CINXE.COM
Parallel programming - Eiffel Software - The Home of EiffelStudio
<!DOCTYPE html> <html lang="en-US" class="loading-site no-js"> <head> <meta charset="UTF-8" /> <link rel="profile" href="http://gmpg.org/xfn/11" /> <link rel="pingback" href="" /> <script>(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <style> .wpcf7-submit{ display:none; } .recaptcha-btn{ display:block; } .grecaptcha-badge { margin: 10px 0; } </style> <script type="text/javascript"> var contactform = []; var checkIfCalled = true; var renderGoogleInvisibleRecaptchaFront = function() { // prevent form submit from enter key jQuery("input[name=_wpcf7]").attr("class","formid"); jQuery('.wpcf7-form').on('keyup keypress', "input", function(e) { var keyCode = e.keyCode || e.which; if (keyCode === 13) { e.preventDefault(); return false; } }); jQuery('.wpcf7-submit').each(function(index){ var checkexclude = 0; var form = jQuery(this).closest('.wpcf7-form'); var value = jQuery(form).find(".formid").val(); // check form exclude from invisible recaptcha if(value == 4746){ checkexclude = 1; form.find('.wpcf7-submit').show(); } if(checkexclude == 0){ // Hide the form orig submit button form.find('.wpcf7-submit').hide(); // Fetch class and value of orig submit button btnClasses = form.find('.wpcf7-submit').attr('class'); btnValue = form.find('.wpcf7-submit').attr('value'); // Add custom button and recaptcha holder form.find('.wpcf7-submit').after('<input type="button" id="wpcf-custom-btn-'+index+'" class="'+btnClasses+' recaptcha-btn recaptcha-btn-type-css" value="'+btnValue+'" title="'+btnValue+'" >'); form.append('<div class="recaptcha-holder" id="recaptcha-holder-'+index+'"></div>'); // Recaptcha rendenr from here var holderId = grecaptcha.render('recaptcha-holder-'+index,{ 'sitekey':'6LfONrkfAAAAAD06syj2ew0sj4lFZbfXJQq9h9KQ', 'size': 'invisible', 'badge' : 'inline', // possible values: bottomright, bottomleft, inline 'callback' : function (recaptchaToken) { //console.log(recaptchaToken); var response=jQuery('#recaptcha-holder-'+index).find('.g-recaptcha-response').val(); //console.log(response); //Remove old response and store new respone jQuery('#recaptcha-holder-'+index).parent().find(".respose_post").remove(); jQuery('#recaptcha-holder-'+index).after('<input type="hidden" name="g-recaptcha-response" value="'+response+'" class="respose_post">') grecaptcha.reset(holderId); if(typeof customCF7Validator !== 'undefined'){ if(!customCF7Validator(form)){ return; } } // Call default Validator function else if(contactFormDefaultValidator(form)){ return; } else{ // hide the custom button and show orig submit button again and submit the form jQuery('#wpcf-custom-btn-'+index).hide(); form.find('input[type=submit]').show(); form.find("input[type=submit]").click(); form.find('input[type=submit]').hide(); jQuery('#wpcf-custom-btn-'+index).attr('style',''); } } },false); // action call when click on custom button jQuery('#wpcf-custom-btn-'+index).click(function(event){ event.preventDefault(); // Call custom validator function if(typeof customCF7Validator == 'function'){ if(!customCF7Validator(form)){ return false; } } // Call default Validator function else if(contactFormDefaultValidator(form)){ return false; } else if(grecaptcha.getResponse(holderId) != ''){ grecaptcha.reset(holderId); } else{ // execute the recaptcha challenge grecaptcha.execute(holderId); } }); } }); } </script><script src="https://www.google.com/recaptcha/api.js?onload=renderGoogleInvisibleRecaptchaFront&render=explicit" async defer></script><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <meta name="viewport" content="width=device-width, initial-scale=1" /> <!-- This site is optimized with the Yoast SEO plugin v24.0 - https://yoast.com/wordpress/plugins/seo/ --> <title>Parallel programming - Eiffel Software - The Home of EiffelStudio</title> <link rel="canonical" href="https://www.eiffel.com/values/parallel-programming/" /> <meta property="og:locale" content="en_US" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Parallel programming - Eiffel Software - The Home of EiffelStudio" /> <meta property="og:description" content="Eiffel SCOOP: object-oriented concurrency without the pain Why go parallel? That much is a given: the future of information technology involves concurrent programming. For flexibility and business value, most programs require multithreading. Network and Web awareness pervade our programs, introducing concurrency requirements at every step. And with the “end of Moore’s law as we know [...]" /> <meta property="og:url" content="https://www.eiffel.com/values/parallel-programming/" /> <meta property="og:site_name" content="Eiffel Software - The Home of EiffelStudio" /> <meta property="article:modified_time" content="2018-03-26T12:29:47+00:00" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:label1" content="Est. reading time" /> <meta name="twitter:data1" content="2 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://www.eiffel.com/values/parallel-programming/","url":"https://www.eiffel.com/values/parallel-programming/","name":"Parallel programming - Eiffel Software - The Home of EiffelStudio","isPartOf":{"@id":"https://www.eiffel.com/#website"},"datePublished":"2013-04-07T21:34:17+00:00","dateModified":"2018-03-26T12:29:47+00:00","breadcrumb":{"@id":"https://www.eiffel.com/values/parallel-programming/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://www.eiffel.com/values/parallel-programming/"]}]},{"@type":"BreadcrumbList","@id":"https://www.eiffel.com/values/parallel-programming/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.eiffel.com/"},{"@type":"ListItem","position":2,"name":"Values","item":"https://www.eiffel.com/values/"},{"@type":"ListItem","position":3,"name":"Parallel programming"}]},{"@type":"WebSite","@id":"https://www.eiffel.com/#website","url":"https://www.eiffel.com/","name":"Eiffel Software - The Home of EiffelStudio","description":"Above and beyond","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.eiffel.com/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}</script> <!-- / Yoast SEO plugin. --> <link rel='prefetch' href='https://www.eiffel.com/wp-content/themes/flatsome/assets/js/flatsome.js?ver=e1ad26bd5672989785e1' /> <link rel='prefetch' href='https://www.eiffel.com/wp-content/themes/flatsome/assets/js/chunk.slider.js?ver=3.19.8' /> <link rel='prefetch' href='https://www.eiffel.com/wp-content/themes/flatsome/assets/js/chunk.popups.js?ver=3.19.8' /> <link rel='prefetch' href='https://www.eiffel.com/wp-content/themes/flatsome/assets/js/chunk.tooltips.js?ver=3.19.8' /> <link rel="alternate" type="application/rss+xml" title="Eiffel Software - The Home of EiffelStudio » Feed" href="https://www.eiffel.com/feed/" /> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.eiffel.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.2"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css' type='text/css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <style id='wp-block-library-inline-css' type='text/css'> :root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px;--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color)}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip:auto!important;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} </style> <link rel='stylesheet' id='contact-form-7-css' href='https://www.eiffel.com/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=6.0.1' type='text/css' media='all' /> <link rel='stylesheet' id='rs-plugin-settings-css' href='https://www.eiffel.com/wp-content/plugins/revslider/public/assets/css/rs6.css?ver=6.1.8' type='text/css' media='all' /> <style id='rs-plugin-settings-inline-css' type='text/css'> .tp-caption a{color:#ff7302;text-shadow:none;-webkit-transition:all 0.2s ease-out;-moz-transition:all 0.2s ease-out;-o-transition:all 0.2s ease-out;-ms-transition:all 0.2s ease-out}.tp-caption a:hover{color:#ffa902} </style> <link rel='stylesheet' id='dashicons-css' href='https://www.eiffel.com/wp-includes/css/dashicons.min.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='thickbox-css' href='https://www.eiffel.com/wp-includes/js/thickbox/thickbox.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='auto-thickbox-css' href='https://www.eiffel.com/wp-content/plugins/auto-thickbox/css/styles-pre39.css?ver=20140420' type='text/css' media='all' /> <link rel='stylesheet' id='featherlight-css' href='https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/css/featherlight.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='jquery-ui-css' href='https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/css/jquery-ui.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='survey-style-front-css' href='https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/css/survey-front-end.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='survey-style-css-css' href='https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/backend/assets/css/survey-general.css?ver=6.7.2' type='text/css' media='all' /> <link rel='stylesheet' id='tablepress-default-css' href='https://www.eiffel.com/wp-content/tablepress-combined.min.css?ver=47' type='text/css' media='all' /> <link rel='stylesheet' id='flatsome-main-css' href='https://www.eiffel.com/wp-content/themes/flatsome/assets/css/flatsome.css?ver=3.19.8' type='text/css' media='all' /> <style id='flatsome-main-inline-css' type='text/css'> @font-face { font-family: "fl-icons"; font-display: block; src: url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.eot?v=3.19.8); src: url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.eot#iefix?v=3.19.8) format("embedded-opentype"), url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.woff2?v=3.19.8) format("woff2"), url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.ttf?v=3.19.8) format("truetype"), url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.woff?v=3.19.8) format("woff"), url(https://www.eiffel.com/wp-content/themes/flatsome/assets/css/icons/fl-icons.svg?v=3.19.8#fl-icons) format("svg"); } </style> <link rel='stylesheet' id='flatsome-style-css' href='https://www.eiffel.com/wp-content/themes/flatsome-child/style.css?ver=3.0' type='text/css' media='all' /> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/cf7-invisible-recaptcha/js/cf7_invisible_recaptcha.js?ver=1.2.3" id="cf7_invisible_recaptcha_functions-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/revslider/public/assets/js/revolution.tools.min.js?ver=6.0" id="tp-tools-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/revslider/public/assets/js/rs6.min.js?ver=6.1.8" id="revmin-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/js/sweetalert.min.js?ver=1.0.0" id="survey-sweetalert-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/js/featherlight.js?ver=1.7.9" id="featherlight-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/js/survey.common.js?ver=1.0.0" id="survey-common-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/perfect-survey/resources/frontend/assets/js/survey.main.js?ver=1.0.0" id="survey-main-js"></script> <link rel="https://api.w.org/" href="https://www.eiffel.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.eiffel.com/wp-json/wp/v2/pages/2475" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.eiffel.com/xmlrpc.php?rsd" /> <link rel='shortlink' href='https://www.eiffel.com/?p=2475' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.eiffel.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.eiffel.com%2Fvalues%2Fparallel-programming%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.eiffel.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.eiffel.com%2Fvalues%2Fparallel-programming%2F&format=xml" /> <!-- start Simple Custom CSS and JS --> <style type="text/css"> div.survey_row th.ps_label_table { font-size: x-small !important; } </style> <!-- end Simple Custom CSS and JS --> <!-- start Simple Custom CSS and JS --> <style type="text/css"> /* Add your CSS code here. For example: .example { color: red; } For brushing up on your CSS knowledge, check out http://www.w3schools.com/css/css_syntax.asp End of comment */ .tagcloud li { font-family:cambria; opacity: unset; color: #FFF; display: inline-block; margin: 0 5px 5px 0; padding: 0 6px; line-height: 30px; border-radius: 5px; } .tagcloud li:nth-child(9n){color: #4A4A4A;} .tagcloud li:nth-child(9n+1){color: #428BCA;} .tagcloud li:nth-child(9n+2){color: #5CB85C;} .tagcloud li:nth-child(9n+3){color: #D9534F;} .tagcloud li:nth-child(9n+4){color: #567E95;} .tagcloud li:nth-child(9n+5){color: #B433FF;} .tagcloud li:nth-child(9n+6){color: #00ABA9;} .tagcloud li:nth-child(9n+7){color: #B37333;} .tagcloud li:nth-child(9n+8){color: #FF6600;} .tagcloud li a{ font-family:cambria; opacity: unset; color: #FFF; display: inline-block; margin: 0 5px 5px 0; padding: 0 6px; line-height: 30px; border-radius: 5px; } .tagcloud li:nth-child(9n) a{color: #4A4A4A;} .tagcloud li:nth-child(9n+1) a{color: #428BCA;} .tagcloud li:nth-child(9n+2) a{color: #5CB85C;} .tagcloud li:nth-child(9n+3) a{color: #D9534F;} .tagcloud li:nth-child(9n+4) a{color: #567E95;} .tagcloud li:nth-child(9n+5) a{color: #044D80;} .tagcloud li:nth-child(9n+6) a{color: orange;} .tagcloud li:nth-child(9n+7) a{color: green;} .tagcloud li:nth-child(9n+8) a{color: #FF6600;} </style> <!-- end Simple Custom CSS and JS --> <!-- start Simple Custom CSS and JS --> <style type="text/css"> /* Add your CSS code here. For example: .example { color: red; } For brushing up on your CSS knowledge, check out http://www.w3schools.com/css/css_syntax.asp End of comment */ .secondary, .checkout-button, .button.checkout, .button.alt { background-color: #308AC8 !important; } .header-main { height: 53px !important; background: url(https://joshuaw25.sg-host.com/wp-content/uploads/outer_header_bg.jpg) repeat-x 0 0; } .nav-box>li.active>a, .nav-pills>li.active>a { opacity: 1; color: #fff !important; background-color: #446084; } #main { //float: left; width: 100%; background: #ECECEE url(https://joshuaw25.sg-host.com/wp-content/uploads/body_container_bg1-1.jpg) no-repeat center bottom; background-size: 100%;} body, div, ul, ol, li, h1, h2, h3, h4, h5, h6, form, fieldset, p { padding: 0; margin: 0; font-weight: normal; font-family: Arial, Tahoma, sans-serif !important; } .vc_row { margin-left: unset !important; margin-right: unset !important; } .vc_inner { /* margin-left: unset !important; */ /* margin-right: unset !important; */ max-width: 1100px; margin: 0px auto !important; } #content h1 { color: #1982D1; padding-bottom: 0.5em; font-weight: bold; line-height: 125%; } #content h2 { color: #1982D1; padding-top: 1em; padding-bottom: 0.5em; font-weight: bold; } a { /* color: #1982d1; */ text-decoration: none; } .large-3.col { float: right; width: 22%; padding: 13px 0 0 0; padding-left: 10px; padding-right: 9px; background: #e7e7e7; background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2U3ZTdlNyIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjQ5JSIgc3RvcC1jb2xvcj0iI2ZkZmRmZCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlN2U3ZTciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, #e7e7e7 0%, #fdfdfd 49%, #e7e7e7 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e7e7e7), color-stop(49%,#fdfdfd), color-stop(100%,#e7e7e7)); background: -webkit-linear-gradient(top, #e7e7e7 0%,#fdfdfd 49%,#e7e7e7 100%); background: -o-linear-gradient(top, #e7e7e7 0%,#fdfdfd 49%,#e7e7e7 100%); background: -ms-linear-gradient(top, #e7e7e7 0%,#fdfdfd 49%,#e7e7e7 100%); background: linear-gradient(to bottom, #e7e7e7 0%,#fdfdfd 49%,#e7e7e7 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e7e7e7', endColorstr='#e7e7e7',GradientType=0 ); -webkit-box-shadow: 1px 1px 17px rgba(50, 50, 50, 0.75); -moz-box-shadow: 1px 1px 17px rgba(50, 50, 50, 0.75); box-shadow: 1px 1px 17px rgba(50, 50, 50, 0.75); } div.user-review { border-top: dotted 1px #ccc; margin-bottom: 10px; padding-top: 10px; font-size: small; } div.user-review div.title { text-align: right; font-weight: bold; font-size: larger; padding-bottom: 5px; } div.user-review p.saying { text-align: justify; font-style: italic; line-height: 130%; } div.user-review div.author { text-align: right; font-style: italic; color: #1982D1; }</style> <!-- end Simple Custom CSS and JS --> <!-- start Simple Custom CSS and JS --> <style type="text/css"> /* Add your CSS code here. For example: .example { color: red; } For brushing up on your CSS knowledge, check out http://www.w3schools.com/css/css_syntax.asp End of comment */ .slogan_sec a.button { -webkit-border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; border-top-left-radius: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; -webkit-border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; border-bottom-right-radius: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; min-width: 120px; background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #008DBA), color-stop(1, #0081AB) ); background: -moz-linear-gradient( center top, #008DBA 5%, #0081AB 100% ); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#008DBA', endColorstr='#0081AB'); background-color: #008DBA; color: #ffffff; text-indent: 0; display: inline-block; font-size: 15px; font-weight: bold; font-style: normal; height: 40px; line-height: 40px; text-decoration: none; text-align: center; border: 0; } #reliable {max-width: 1000px; /* float: left; */ margin: 0px auto; text-align: center; } #reliable li { list-style: none; margin-left: 10px; display: inline-block; font-size: 24px; } .boxouter { float: left; /* max-width: 330px; margin: 10px 30px 10px 0;*/ overflow: hidden; } .box { /* background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #F5F9FF), color-stop(1, #CAD2DB) ); background: -moz-linear-gradient( center top, #F5F9FF 5%, #CAD2DB 100% ); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#F5F9FF', endColorstr='#CAD2DB'); background-color: #F5F9FF; border: 1px solid #ccc; color: #000; */ } div.box { margin: 0; padding: 10px; /* max-width: 290px; */ height: 100%; line-height: 22px; border: solid 1px #ccc; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px; border-top-left-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px; border-top-right-radius: 8px; -webkit-border-bottom-right-radius: 8px; -moz-border-radius-bottomright: 8px; border-bottom-right-radius: 8px; -webkit-border-bottom-left-radius: 8px; -moz-border-radius-bottomleft: 8px; border-bottom-left-radius: 8px; display: inline-block; text-align: center; text-decoration: none; text-indent: 0; font-size: 1em; font-weight: normal; font-style: normal; } .box>h3 strong { color: #E87026; font-size: 105%; } .box>h3 { padding-bottom: 10px; margin: 5px 0 10px 0; border-bottom: solid 1px #ccc; text-indent: 0; line-height: 30px; font-size: 28px; font-weight: bold; font-style: normal; } .box>p { text-indent: 0; line-height: 20px; font-size: 15px; font-weight: bold; font-style: normal; margin: auto; width: 85%; min-height: 90px; } .box a { /* background-color: #1C6FD1; color: white;*/ font-weight: 600 !important; line-height: .75em !important; display: inline-block; box-sizing: border-box; height: 2.75rem; vertical-align: middle; white-space: nowrap; cursor: pointer; margin: 0; padding: .9rem 1.25rem; border-radius: 200px; border: 2px solid #E87026; color:#E87026; } .box.grey { /* background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #FFFFFF), color-stop(1, #D1D1D1) ); background: -moz-linear-gradient( center top, #FFFFFF 5%, #D1D1D1 100% ); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#D1D1D1'); background-color: #FFFFFF; border: 1px solid #ccc; color: #000;*/ } .box.blue { /* background: -webkit-gradient( linear, left top, left bottom, color-stop(0.05, #0F6894), color-stop(1, #004161) ); background: -moz-linear-gradient( center top, #0F6894 5%, #004161 100% ); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0F6894', endColorstr='#004161'); background-color: #0F6894; border: 1px solid #337fed; color: #ffffff; */ } .box.blue h3{/* color: #fff;*/} .logo_sec ul li { list-style: none; /* float: left; */ max-width: 1000px; padding: 26px; display: inline-block; } .logo_sec{text-align: center;} .widget { margin-bottom: unset !important; } #slide-two-bg{background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48c3R5bGU%2BLnN0MntkaXNwbGF5OmlubGluZX0uc3Q0e2ZpbGw6IzA0NGQ4MH08L3N0eWxlPjxnIGlkPSJMYXllcl8yIj48cGF0aCBjbGFzcz0ic3Q0IiBkPSJNODkuNCAxMDUuODhsMTcuNjEtNTUuODVoLTIuOTFsLTE3LjUyIDU1Ljg1ek00NjYuODUgMGwxLjA4IDM5OS45MkwyIDQwMCAxMjguMDkuMDggNDY2Ljg1IDB6TTY5Ljc5IDIxNy45OWgtMi45NEwyMy42OSAzNTUuNTNoMi43M2w0My4zNy0xMzcuNTR6Ii8%2BPC9nPjwvc3ZnPg%3D%3D) right/contain no-repeat,#002E47; padding-bottom: 2rem; padding-top: 2rem;} @media only screen and (max-width: 767px){ #slide-two-bg { background: url(https://joshuaw25.sg-host.com/wp-content/uploads/mobile-background.png); background-size: cover; background-position: right; } } rs-fullwidth-wrap { position: relative; width: 100%; /* max-height: 300px !important; */ display: block; } .box{background-color: white; margin-top: -6rem; padding: 2rem 1rem; box-shadow: 0 4px 12px rgba(0,46,71,0.1); } .box.blue a:hover{color:white;background-color:orange;text-decoration:none;border:2px solid #054EA5;} .box.blue a{background-color: #E87026; color: white; font-weight: 600 !important; line-height: .75em !important; display: inline-block; box-sizing: border-box; height: 2.75rem; vertical-align: middle; white-space: nowrap; cursor: pointer; margin: 0; padding: .9rem 1.25rem; border-radius: 200px; border: 2px solid #E87026;}</style> <!-- end Simple Custom CSS and JS --> <!-- Google Webmaster Tools plugin for WordPress --> <meta name="google-site-verification" content="ckGO_FnXV-A_vLKN2XwGMbKalI3rXzUZgB6S2_qjSZg" /> <script type='text/javascript'> /* <![CDATA[ */ var thickboxL10n = {"next":"Next >","prev":"< Prev","image":"Image","of":"of","close":"Close","loadingAnimation":"https:\/\/www.eiffel.com\/wp-content\/plugins\/auto-thickbox\/images\/loadingAnimation.gif"}; try{convertEntities(thickboxL10n);}catch(e){};; /* ]]> */ </script> <!-- WP Social Preview --> <meta property="og:locale" content="en_US" /> <meta property="og:url" content="https://www.eiffel.com/values/parallel-programming/" /> <meta property="og:title" content="Parallel programming" /> <meta name="twitter:title" content="Parallel programming" /> <meta property="og:description" content="Eiffel SCOOP: object-oriented concurrency without the pain Why go parallel? That much is a given: the future of information technology involves concurrent programming. For flexibility and business value, most programs require multithreading. Network and Web awareness pervade our programs, introducing concurrency requirements at every step. And with the “end of Moore’s law as we know [...]" /> <meta name="twitter:description" content="Eiffel SCOOP: object-oriented concurrency without the pain Why go parallel? That much is a given: the future of information technology involves concurrent programming. For flexibility and business value, most programs require multithreading. Network and Web awareness pervade our programs, introducing concurrency requirements at every step. And with the “end of Moore’s law as we know [...]" /> <!-- / WP Social Preview --> <script type="text/javascript">var wp_post = {"ID":2475,"post_author":"1","post_date":"2013-04-07 21:34:17","post_date_gmt":"2013-04-07 21:34:17","post_content":"<h1>Eiffel SCOOP: object-oriented concurrency without the pain<\/h1>\r\n<h2>Why go parallel?<\/h2>\r\nThat much is a given: the future of information technology involves concurrent programming. For flexibility and business value, most programs require multithreading. Network and Web awareness pervade our programs, introducing concurrency requirements at every step. And with the \"end of Moore's law as we know it\", the free ride is over: performance increases do not come from the hardware any more, but require taking advantage of parallel architecture.\r\n\r\nActually the consensus does not stop here. Everyone who has tried object-oriented concurrent programming know it\u2019s hard. Even the New York Times chipped in, citing industry luminaries such as Bill Gates and Andrew Grove, founder of Intel, to the effect that no one really knows how to program concurrent applications simply and effectively. The US National Academy of Sciences wrote that only \u201chero programmers\u201d can master concurrency today.\r\n\r\nBut we don\u2019t need an academy report to find out what every programmer who has tried concurrency knows: it\u2019s tough, very tough. With the usual techniques, such as threading frameworks for Java, C++ and C#, data races and deadlocks lurk at every corner. Decades of academic research has made hardly more than a dent into the problem: a multithreaded program can work for a while and suddenly go bust; no amount of testing or debugging will rule out these nightmare scenarios.\r\n<h2>Why go parallel with SCOOP?<\/h2>\r\nEnter SCOOP: Simple Concurrent Object-Oriented Programming. SCOOP is a small language extension \u2014 one keyword \u2014 that revolutionizes the world of concurrent programming by enabling you to keep your usual modes of reasoning, honed over decades of progress in software engineering, in a concurrent context.\r\n\r\nThe simple expressive mechanisms of SCOOP enable programmers to tackle even the most demanding concurrent applications in a simple and clear way, leaving all the difficult details to the implementation. The correctness of programs is easy to establish, without the need for painful debugging. Concurrency ceases to be a formidable barrier, becoming a natural complement to the modern programming techniques that you already master.\r\n\r\nCan concurrency really be simple? I thought it was high-priest stuff! Click here to see a short example showing how simple the classic concurrency examples become with SCOOP. For a more in-depth presentation, read the SCOOP section of our documentation or listen to the SCOOP video. How do I get more information on SCOOP?\r\n<h2>Can concurrency really be simple? I thought it was high-priest stuff!<\/h2>\r\nClick here to see a\u00a0<a href=\"\/values\/parallel-programming-example\/\">short example<\/a>\u00a0showing how simple the classic concurrency examples become with SCOOP. For a more in-depth presentation,\u00a0read the\u00a0<a href=\"http:\/\/docs.eiffel.com\/book\/solutions\/concurrent-eiffel-scoop\">SCOOP section in the Eiffel Documentation<\/a>\u00a0or watch to the<a href=\"http:\/\/www.youtube.com\/watch?v=XT6elEA4DM0\" target=\"_blank\">\u00a0SCOOP video<\/a>.\r\n<h2>How do I get SCOOP?<\/h2>\r\nSCOOP is available for <a href=\"\/download\/\">download<\/a>\u00a0as part of\u00a0<a title=\"Eiffelstudio\" href=\"\/eiffelstudio\/\">EiffelStudio<\/a>.","post_title":"Parallel programming","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"parallel-programming","to_ping":"","pinged":"","post_modified":"2018-03-26 05:29:47","post_modified_gmt":"2018-03-26 12:29:47","post_content_filtered":"","post_parent":2551,"guid":"http:\/\/www3.eiffel.com\/?page_id=2475","menu_order":5,"post_type":"page","post_mime_type":"","comment_count":"0","filter":"raw"};</script><script type="text/javascript">var ajaxurl = "https://www.eiffel.com/wp-admin/admin-ajax.php";</script><meta name="generator" content="Powered by WPBakery Page Builder - drag and drop page builder for WordPress."/> <meta name="generator" content="Powered by Slider Revolution 6.1.8 - responsive, Mobile-Friendly Slider Plugin for WordPress with comfortable drag and drop interface." /> <script type="text/javascript">function setREVStartSize(e){ try { var pw = document.getElementById(e.c).parentNode.offsetWidth, newh; pw = pw===0 || isNaN(pw) ? window.innerWidth : pw; e.tabw = e.tabw===undefined ? 0 : parseInt(e.tabw); e.thumbw = e.thumbw===undefined ? 0 : parseInt(e.thumbw); e.tabh = e.tabh===undefined ? 0 : parseInt(e.tabh); e.thumbh = e.thumbh===undefined ? 0 : parseInt(e.thumbh); e.tabhide = e.tabhide===undefined ? 0 : parseInt(e.tabhide); e.thumbhide = e.thumbhide===undefined ? 0 : parseInt(e.thumbhide); e.mh = e.mh===undefined || e.mh=="" || e.mh==="auto" ? 0 : parseInt(e.mh,0); if(e.layout==="fullscreen" || e.l==="fullscreen") newh = Math.max(e.mh,window.innerHeight); else{ e.gw = Array.isArray(e.gw) ? e.gw : [e.gw]; for (var i in e.rl) if (e.gw[i]===undefined || e.gw[i]===0) e.gw[i] = e.gw[i-1]; e.gh = e.el===undefined || e.el==="" || (Array.isArray(e.el) && e.el.length==0)? e.gh : e.el; e.gh = Array.isArray(e.gh) ? e.gh : [e.gh]; for (var i in e.rl) if (e.gh[i]===undefined || e.gh[i]===0) e.gh[i] = e.gh[i-1]; var nl = new Array(e.rl.length), ix = 0, sl; e.tabw = e.tabhide>=pw ? 0 : e.tabw; e.thumbw = e.thumbhide>=pw ? 0 : e.thumbw; e.tabh = e.tabhide>=pw ? 0 : e.tabh; e.thumbh = e.thumbhide>=pw ? 0 : e.thumbh; for (var i in e.rl) nl[i] = e.rl[i]<window.innerWidth ? 0 : e.rl[i]; sl = nl[0]; for (var i in nl) if (sl>nl[i] && nl[i]>0) { sl = nl[i]; ix=i;} var m = pw>(e.gw[ix]+e.tabw+e.thumbw) ? 1 : (pw-(e.tabw+e.thumbw)) / (e.gw[ix]); newh = (e.type==="carousel" && e.justify==="true" ? e.gh[ix] : (e.gh[ix] * m)) + (e.tabh + e.thumbh); } if(window.rs_init_css===undefined) window.rs_init_css = document.head.appendChild(document.createElement("style")); document.getElementById(e.c).height = newh; window.rs_init_css.innerHTML += "#"+e.c+"_wrapper { height: "+newh+"px }"; } catch(e){ console.log("Failure at Presize of Slider:" + e) } };</script> <style id="custom-css" type="text/css">:root {--primary-color: #446084;--fs-color-primary: #446084;--fs-color-secondary: #d26e4b;--fs-color-success: #7a9c59;--fs-color-alert: #b20000;--fs-experimental-link-color: #334862;--fs-experimental-link-color-hover: #111;}.tooltipster-base {--tooltip-color: #fff;--tooltip-bg-color: #000;}.off-canvas-right .mfp-content, .off-canvas-left .mfp-content {--drawer-width: 300px;}.header-main{height: 53px}#logo img{max-height: 53px}#logo{width:169px;}.header-bottom{min-height: 10px}.header-top{min-height: 33px}.transparent .header-main{height: 265px}.transparent #logo img{max-height: 265px}.has-transparent + .page-title:first-of-type,.has-transparent + #main > .page-title,.has-transparent + #main > div > .page-title,.has-transparent + #main .page-header-wrapper:first-of-type .page-title{padding-top: 265px;}.header.show-on-scroll,.stuck .header-main{height:53px!important}.stuck #logo img{max-height: 53px!important}.search-form{ width: 100%;}.header-bg-color {background-color: rgba(255,255,255,0.9)}.header-bottom {background-color: #f1f1f1}.header-main .nav > li > a{line-height: 53px }.stuck .header-main .nav > li > a{line-height: 50px }@media (max-width: 549px) {.header-main{height: 53px}#logo img{max-height: 53px}}body{font-family: Lato, sans-serif;}body {font-weight: 400;font-style: normal;}.nav > li > a {font-family: Lato, sans-serif;}.mobile-sidebar-levels-2 .nav > li > ul > li > a {font-family: Lato, sans-serif;}.nav > li > a,.mobile-sidebar-levels-2 .nav > li > ul > li > a {font-weight: 700;font-style: normal;}h1,h2,h3,h4,h5,h6,.heading-font, .off-canvas-center .nav-sidebar.nav-vertical > li > a{font-family: Lato, sans-serif;}h1,h2,h3,h4,h5,h6,.heading-font,.banner h1,.banner h2 {font-weight: 700;font-style: normal;}.alt-font{font-family: "Dancing Script", sans-serif;}.alt-font {font-weight: 400!important;font-style: normal!important;}.header:not(.transparent) .header-nav-main.nav > li > a {color: #000000;}.footer-1{background-image: url('https://www.eiffel.com/wp-content/uploads/body_container_bg1-1.jpg');}.footer-1{background-color: #ecebf0}.nav-vertical-fly-out > li + li {border-top-width: 1px; border-top-style: solid;}.label-new.menu-item > a:after{content:"New";}.label-hot.menu-item > a:after{content:"Hot";}.label-sale.menu-item > a:after{content:"Sale";}.label-popular.menu-item > a:after{content:"Popular";}</style> <!-- Responsive Select CSS ================================================================ --> <style type="text/css" id="responsive-select-css"> .responsiveSelectContainer select.responsiveMenuSelect, select.responsiveMenuSelect{ display:none; } @media (max-width: 767px) { .responsiveSelectContainer{ border:none !important; background:none !important; box-shadow:none !important; height:auto !important; max-height:none !important; visibility:visible !important; } .responsiveSelectContainer ul, ul.responsiveSelectFullMenu, #megaMenu ul.megaMenu.responsiveSelectFullMenu{ display: none !important; } .responsiveSelectContainer select.responsiveMenuSelect, select.responsiveMenuSelect { display: inline-block; width:100%; } } </style> <!-- end Responsive Select CSS --> <!-- Responsive Select JS ================================================================ --> <script type="text/javascript"> jQuery(document).ready( function($){ $( '.responsiveMenuSelect' ).change(function() { var loc = $(this).find( 'option:selected' ).val(); if( loc != '' && loc != '#' ) window.location = loc; }); //$( '.responsiveMenuSelect' ).val(''); }); </script> <!-- end Responsive Select JS --> <style id="kirki-inline-styles">/* latin-ext */ @font-face { font-family: 'Lato'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://www.eiffel.com/wp-content/fonts/lato/S6u9w4BMUTPHh6UVSwaPGR_p.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { font-family: 'Lato'; font-style: normal; font-weight: 700; font-display: swap; src: url(https://www.eiffel.com/wp-content/fonts/lato/S6u9w4BMUTPHh6UVSwiPGQ.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }/* vietnamese */ @font-face { font-family: 'Dancing Script'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://www.eiffel.com/wp-content/fonts/dancing-script/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Rep8ltA.woff2) format('woff2'); unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; } /* latin-ext */ @font-face { font-family: 'Dancing Script'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://www.eiffel.com/wp-content/fonts/dancing-script/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3ROp8ltA.woff2) format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } /* latin */ @font-face { font-family: 'Dancing Script'; font-style: normal; font-weight: 400; font-display: swap; src: url(https://www.eiffel.com/wp-content/fonts/dancing-script/If2cXTr6YS-zF4S-kcSWSVi_sxjsohD9F50Ruu7BMSo3Sup8.woff2) format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }</style><noscript><style> .wpb_animate_when_almost_visible { opacity: 1; }</style></noscript></head> <body class="page-template-default page page-id-2475 page-child parent-pageid-2551 full-width lightbox nav-dropdown-has-arrow nav-dropdown-has-shadow nav-dropdown-has-border page-template-right-sidebar page-template-right-sidebar-php wpb-js-composer js-comp-ver-6.1 vc_responsive"> <a class="skip-link screen-reader-text" href="#main">Skip to content</a> <div id="wrapper"> <header id="header" class="header header-full-width has-sticky sticky-jump"> <div class="header-wrapper"> <div id="masthead" class="header-main "> <div class="header-inner flex-row container logo-left medium-logo-center" role="navigation"> <!-- Logo --> <div id="logo" class="flex-col logo"> <!-- Header logo --> <a href="https://www.eiffel.com/" title="Eiffel Software – The Home of EiffelStudio - Above and beyond" rel="home"> <img width="359" height="64" src="https://www.eiffel.com/wp-content/uploads/images/logos/eiffel/logo_eiffel_software.png" class="header_logo header-logo" alt="Eiffel Software – The Home of EiffelStudio"/><img width="359" height="64" src="https://www.eiffel.com/wp-content/uploads/images/logos/eiffel/logo_eiffel_software.png" class="header-logo-dark" alt="Eiffel Software – The Home of EiffelStudio"/></a> </div> <!-- Mobile Left Elements --> <div class="flex-col show-for-medium flex-left"> <ul class="mobile-nav nav nav-left "> <li class="nav-icon has-icon"> <a href="#" data-open="#main-menu" data-pos="left" data-bg="main-menu-overlay" data-color="" class="is-small" aria-label="Menu" aria-controls="main-menu" aria-expanded="false"> <i class="icon-menu" ></i> </a> </li> </ul> </div> <!-- Left Elements --> <div class="flex-col hide-for-medium flex-left flex-grow"> <ul class="header-nav header-nav-main nav nav-left nav-box nav-size-medium nav-uppercase" > <li id="menu-item-3363" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3363 menu-item-design-default has-dropdown"><a href="https://www.eiffel.com/eiffelstudio/" class="nav-top-link" aria-expanded="false" aria-haspopup="menu">EiffelStudio<i class="icon-angle-down" ></i></a> <ul class="sub-menu nav-dropdown nav-dropdown-default"> <li id="menu-item-4303" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4303"><a href="https://www.eiffel.com/eiffelstudio/">Overview</a></li> <li id="menu-item-3461" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3461"><a href="https://www.eiffel.com/eiffelstudio/screenshots/">Screenshots</a></li> <li id="menu-item-3367" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3367"><a href="https://www.eiffel.com/eiffelstudio/system-requirements/">System Requirements</a></li> <li id="menu-item-5203" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5203"><a href="https://www.eiffel.com/eiffelstudio/licensing/">Licensing</a></li> <li id="menu-item-6123" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-6123"><a href="/eiffelstudio/product/">Downloads</a></li> <li id="menu-item-5996" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5996"><a href="https://www.eiffel.com/eiffelstudio/buy/">Purchase</a></li> <li id="menu-item-5999" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5999"><a href="https://www.eiffel.com/eiffelstudio/purchase-enterprise/">Enterprise …</a></li> </ul> </li> <li id="menu-item-5113" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-5113 active menu-item-design-default has-dropdown"><a href="https://www.eiffel.com/values/design-by-contract/" class="nav-top-link" aria-expanded="false" aria-haspopup="menu">Values<i class="icon-angle-down" ></i></a> <ul class="sub-menu nav-dropdown nav-dropdown-default"> <li id="menu-item-4300" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4300"><a href="https://www.eiffel.com/values/design-by-contract/">Design By Contract™</a></li> <li id="menu-item-3374" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3374"><a href="https://www.eiffel.com/values/seamless-development/">Seamless Development</a></li> <li id="menu-item-3463" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3463"><a href="https://www.eiffel.com/values/automatic-testing/">Automatic Testing</a></li> <li id="menu-item-3464" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3464"><a href="https://www.eiffel.com/values/void-safety/">Void Safety</a></li> <li id="menu-item-3373" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-2475 current_page_item menu-item-3373 active"><a href="https://www.eiffel.com/values/parallel-programming/" aria-current="page">Parallel Programming</a></li> <li id="menu-item-5222" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5222"><a href="https://www.eiffel.com/values/model-driven-development/">Model-driven Development</a></li> </ul> </li> <li id="menu-item-3375" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3375 menu-item-design-default has-dropdown"><a href="https://www.eiffel.com/services/" class="nav-top-link" aria-expanded="false" aria-haspopup="menu">Services<i class="icon-angle-down" ></i></a> <ul class="sub-menu nav-dropdown nav-dropdown-default"> <li id="menu-item-4299" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4299"><a href="https://www.eiffel.com/services/">Overview</a></li> <li id="menu-item-3465" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3465"><a href="https://www.eiffel.com/services/consulting/">Consulting</a></li> <li id="menu-item-5460" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5460"><a href="https://www.eiffel.com/services/custom-development/">Custom Development</a></li> <li id="menu-item-5054" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5054"><a href="https://www.eiffel.com/services/training/">Training</a></li> <li id="menu-item-4956" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4956"><a href="https://www.eiffel.com/services/support/">Support</a></li> </ul> </li> <li id="menu-item-3740" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3740 menu-item-design-default has-dropdown"><a href="https://www.eiffel.com/resources/" class="nav-top-link" aria-expanded="false" aria-haspopup="menu">Resources<i class="icon-angle-down" ></i></a> <ul class="sub-menu nav-dropdown nav-dropdown-default"> <li id="menu-item-3663" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3663"><a target="_blank" rel="noopener" href="https://www.eiffel.org/documentation">Documentation</a></li> <li id="menu-item-5424" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5424"><a target="_blank" rel="noopener" href="https://www.eiffel.org/resources/libraries">Libraries</a></li> <li id="menu-item-5206" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5206"><a target="_blank" rel="noopener" href="http://www.eiffel.org">Eiffel Community</a></li> <li id="menu-item-3496" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3496"><a href="https://www.eiffel.com/resources/fan-zone/">Fan Zone</a></li> <li id="menu-item-4110" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4110"><a href="https://www.eiffel.com/resources/presentations/">Presentations</a></li> <li id="menu-item-3494" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3494"><a href="https://www.eiffel.com/resources/faqs/">FAQS</a></li> </ul> </li> <li id="menu-item-4306" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-4306 menu-item-design-default has-dropdown"><a href="https://www.eiffel.com/company/about-us/" class="nav-top-link" aria-expanded="false" aria-haspopup="menu">Company<i class="icon-angle-down" ></i></a> <ul class="sub-menu nav-dropdown nav-dropdown-default"> <li id="menu-item-3497" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3497"><a href="https://www.eiffel.com/company/about-us/">About Us</a></li> <li id="menu-item-3504" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3504"><a href="https://www.eiffel.com/company/leadership/">Leadership</a></li> <li id="menu-item-3498" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3498"><a href="https://www.eiffel.com/company/customers/">Customers</a></li> <li id="menu-item-4913" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-4913"><a href="https://www.eiffel.com/posts/news/">News & Events</a></li> <li id="menu-item-3500" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3500"><a href="https://www.eiffel.com/company/careers/">Careers</a></li> <li id="menu-item-4009" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4009"><a href="https://www.eiffel.com/company/contact/">Contact</a></li> </ul> </li> </ul> </div> <!-- Right Elements --> <div class="flex-col hide-for-medium flex-right"> <ul class="header-nav header-nav-main nav nav-right nav-box nav-size-medium nav-uppercase"> <li class="header-search-form search-form html relative has-icon"> <div class="header-search-form-wrapper"> <div class="searchform-wrapper ux-search-box relative is-normal"><form method="get" class="searchform" action="https://www.eiffel.com/" role="search"> <div class="flex-row relative"> <div class="flex-col flex-grow"> <input type="search" class="search-field mb-0" name="s" value="" id="s" placeholder="Search…" /> </div> <div class="flex-col"> <button type="submit" class="ux-search-submit submit-button secondary button icon mb-0" aria-label="Submit"> <i class="icon-search" ></i> </button> </div> </div> <div class="live-search-results text-left z-top"></div> </form> </div> </div> </li> </ul> </div> <!-- Mobile Right Elements --> <div class="flex-col show-for-medium flex-right"> <ul class="mobile-nav nav nav-right "> <li class="header-search header-search-dropdown has-icon has-dropdown menu-item-has-children"> <a href="#" aria-label="Search" class="is-small"><i class="icon-search" ></i></a> <ul class="nav-dropdown nav-dropdown-default"> <li class="header-search-form search-form html relative has-icon"> <div class="header-search-form-wrapper"> <div class="searchform-wrapper ux-search-box relative is-normal"><form method="get" class="searchform" action="https://www.eiffel.com/" role="search"> <div class="flex-row relative"> <div class="flex-col flex-grow"> <input type="search" class="search-field mb-0" name="s" value="" id="s" placeholder="Search…" /> </div> <div class="flex-col"> <button type="submit" class="ux-search-submit submit-button secondary button icon mb-0" aria-label="Submit"> <i class="icon-search" ></i> </button> </div> </div> <div class="live-search-results text-left z-top"></div> </form> </div> </div> </li> </ul> </li> </ul> </div> </div> <div class="container"><div class="top-divider full-width"></div></div> </div> <div class="header-bg-container fill"><div class="header-bg-image fill"></div><div class="header-bg-color fill"></div></div> </div> </header> <main id="main" class=""> <div class="page-wrapper page-right-sidebar"> <div class="row"> <div id="content" class="large-9 left col col-divided" role="main"> <div class="page-inner"> <h1>Eiffel SCOOP: object-oriented concurrency without the pain</h1> <h2>Why go parallel?</h2> <p>That much is a given: the future of information technology involves concurrent programming. For flexibility and business value, most programs require multithreading. Network and Web awareness pervade our programs, introducing concurrency requirements at every step. And with the “end of Moore’s law as we know it”, the free ride is over: performance increases do not come from the hardware any more, but require taking advantage of parallel architecture.</p> <p>Actually the consensus does not stop here. Everyone who has tried object-oriented concurrent programming know it’s hard. Even the New York Times chipped in, citing industry luminaries such as Bill Gates and Andrew Grove, founder of Intel, to the effect that no one really knows how to program concurrent applications simply and effectively. The US National Academy of Sciences wrote that only “hero programmers” can master concurrency today.</p> <p>But we don’t need an academy report to find out what every programmer who has tried concurrency knows: it’s tough, very tough. With the usual techniques, such as threading frameworks for Java, C++ and C#, data races and deadlocks lurk at every corner. Decades of academic research has made hardly more than a dent into the problem: a multithreaded program can work for a while and suddenly go bust; no amount of testing or debugging will rule out these nightmare scenarios.</p> <h2>Why go parallel with SCOOP?</h2> <p>Enter SCOOP: Simple Concurrent Object-Oriented Programming. SCOOP is a small language extension — one keyword — that revolutionizes the world of concurrent programming by enabling you to keep your usual modes of reasoning, honed over decades of progress in software engineering, in a concurrent context.</p> <p>The simple expressive mechanisms of SCOOP enable programmers to tackle even the most demanding concurrent applications in a simple and clear way, leaving all the difficult details to the implementation. The correctness of programs is easy to establish, without the need for painful debugging. Concurrency ceases to be a formidable barrier, becoming a natural complement to the modern programming techniques that you already master.</p> <p>Can concurrency really be simple? I thought it was high-priest stuff! Click here to see a short example showing how simple the classic concurrency examples become with SCOOP. For a more in-depth presentation, read the SCOOP section of our documentation or listen to the SCOOP video. How do I get more information on SCOOP?</p> <h2>Can concurrency really be simple? I thought it was high-priest stuff!</h2> <p>Click here to see a <a href="/values/parallel-programming-example/">short example</a> showing how simple the classic concurrency examples become with SCOOP. For a more in-depth presentation, read the <a href="http://docs.eiffel.com/book/solutions/concurrent-eiffel-scoop">SCOOP section in the Eiffel Documentation</a> or watch to the<a href="http://www.youtube.com/watch?v=XT6elEA4DM0" target="_blank"> SCOOP video</a>.</p> <h2>How do I get SCOOP?</h2> <p>SCOOP is available for <a href="/download/">download</a> as part of <a title="Eiffelstudio" href="/eiffelstudio/">EiffelStudio</a>.</p> </div> </div> <div class="large-3 col"> <div id="secondary" class="widget-area " role="complementary"> <!--WP Widget Cache 0.26 Begin --> <!--Cache custom_html-5 for 86400 second(s)--> <aside id="custom_html-5" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><br/> <p style="text-align: center"> <img src="https://www.eiffel.com/wp-content/uploads/logo.png" alt="EiffelSoftware"/></p> <p style="text-align: center"> <a href="https://www.capterra.com/p/32278/EiffelStudio/" target="_blank" rel="noopener"> <img alt="" title="" style="width: 80px; border:0" src="https://www.eiffel.com/wp-content/uploads/capterra.png" /> </a> </p> <div class="user-review"> <div class="title">"Hands down best."</div> <p class="saying"><strong>"Navigation of the object model in a system is the best I have ever encountered.</strong> The IDE's ability to do this is thanks to the Eiffel Method and Language. There are no ambiguities to object references. I cannot recall the last time I used a text search to locate properties (attributes) or methods."</p> <div class="author">Larry R. (Software Developer)</div> </div> <div class="user-review"> <div class="title">"EiffelStudio your pal and lifesaver."</div> <p class="saying">"The tool is always helping you to create results very quickly. We always say, 'The compiler is your friend' and that really counts for the Eiffel compiler. I can state from experience, that <strong>if the software is compiled it runs, very stable and robust</strong>, while the software always benefits from the high quality Eiffel architecture and underlying method."</p> <div class="author">Paul G. (Team Lead, Software Development)</div> </div> <div class="user-review"> <div class="title">"State of the art software development environment."</div> <p class="saying">"Eiffel is the right language and EiffelStudio the right IDE (integrated development environment) if you want to <strong>develop state of the art, reliable and correct software systems</strong>."</p> <div class="author">Volkan A. (Senior Software Engineer)</div> </div></div></aside><!--WP Widget Cache End --> <aside id="custom_html-7" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><br/> <p style="text-align: center"><a class="button orange" href="https://www.eiffel.com/eiffelstudio/product/feedback/">Feedback</a></p> </div></aside></div> </div> </div> </div> </main> <footer id="footer" class="footer-wrapper"> <!-- FOOTER 1 --> <div class="footer-widgets footer footer-1"> <div class="row large-columns-2 mb-0"> <div id="text-3" class="col pb-0 widget widget_text"> <div class="textwidget"><h2><a href="https://www.eiffel.com/company/about-us/">About Eiffel Software</a></h2> <p> </p> <p>Eiffel Software is recognized since 1985 as the thought leader in making software projects predictable and controllable. EiffelStudio, the company’s flagship product and Integrated Development Environment (IDE), enables software developers to quickly develop systems that work the first time around and that are easy to adapt when the world and the needs change.</p> <p> </p> </div> </div><div id="text-4" class="col pb-0 widget widget_text"> <div class="textwidget"><h2><a href="https://www.eiffel.com/resources/fan-zone/">Connect with us</a></h2> <p> </p> <p><a href="https://www.facebook.com/eiffelsoftware" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://www.eiffel.com/wp-content/uploads/images/logos/social/logo_facebook-50x50.png" alt="Facebook" /></a><a href="http://www.linkedin.com/company/eiffel-software" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://www.eiffel.com/wp-content/uploads/images/logos/social/logo_linkedin-50x50.png" alt="LinkedIn" /></a><a href="https://twitter.com/eiffel_software" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://www.eiffel.com/wp-content/uploads/images/logos/social/logo_twitter-50x50.png" alt="Twitter" /></a><a href="https://www.youtube.com/channel/UCT6IcRZAfa-uFD0k3Dbi_7A" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://www.eiffel.com/wp-content/uploads/images/logos/social/logo_youtube-50x50.png" alt="YouTube" /></a></p> <p> </p> <p>Visit the <a href="https://groups.google.com/forum/#!forum/eiffel-users">Eiffel Users group</a>.</p> </div> </div> </div> </div> <!-- FOOTER 2 --> <div class="footer-widgets footer footer-2 dark"> <div class="row dark large-columns-4 mb-0"> <!--WP Widget Cache 0.26 Begin --> <!--Cache nav_menu-3 for 86400 second(s)--> <div id="nav_menu-3" class="col pb-0 widget widget_nav_menu"><span class="widget-title">Values</span><div class="is-divider small"></div><div class="menu-values-footer-menu-container"><ul id="menu-values-footer-menu" class="menu"><li id="menu-item-3512" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3512"><a href="https://www.eiffel.com/values/design-by-contract/">Design By Contract™</a></li> <li id="menu-item-3513" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3513"><a href="https://www.eiffel.com/values/seamless-development/">Seamless Development</a></li> <li id="menu-item-3514" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3514"><a href="https://www.eiffel.com/values/automatic-testing/">Automatic Testing</a></li> <li id="menu-item-3515" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3515"><a href="https://www.eiffel.com/values/void-safety/">Void Safety</a></li> <li id="menu-item-3516" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3516"><a href="https://www.eiffel.com/values/parallel-programming/">Parallel Programming</a></li> <li id="menu-item-5221" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5221"><a href="https://www.eiffel.com/values/model-driven-development/">Model-driven Development</a></li> </ul></div></div><!--WP Widget Cache End --> <!--WP Widget Cache 0.26 Begin --> <!--Cache nav_menu-4 for 86400 second(s)--> <div id="nav_menu-4" class="col pb-0 widget widget_nav_menu"><span class="widget-title">Services</span><div class="is-divider small"></div><div class="menu-services-footer-menu-container"><ul id="menu-services-footer-menu" class="menu"><li id="menu-item-4305" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4305"><a href="https://www.eiffel.com/services/">Overview</a></li> <li id="menu-item-3518" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3518"><a href="https://www.eiffel.com/services/consulting/">Consulting</a></li> <li id="menu-item-3519" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3519"><a href="https://www.eiffel.com/services/custom-development/" title="Custom">Custom Development</a></li> <li id="menu-item-3520" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3520"><a href="https://www.eiffel.com/services/training/">Training</a></li> <li id="menu-item-3521" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3521"><a href="https://www.eiffel.com/services/support/">Support</a></li> </ul></div></div><!--WP Widget Cache End --> <!--WP Widget Cache 0.26 Begin --> <!--Cache nav_menu-5 for 86400 second(s)--> <div id="nav_menu-5" class="col pb-0 widget widget_nav_menu"><span class="widget-title">Resources</span><div class="is-divider small"></div><div class="menu-resources-footer-menu-container"><ul id="menu-resources-footer-menu" class="menu"><li id="menu-item-5103" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5103"><a target="_blank" href="https://www.eiffel.org/documentation">Documentation</a></li> <li id="menu-item-5422" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5422"><a target="_blank" href="https://www.eiffel.org/resources/libraries">Libraries</a></li> <li id="menu-item-5207" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5207"><a target="_blank" href="http://www.eiffel.org">Eiffel Community</a></li> <li id="menu-item-3524" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3524"><a href="https://www.eiffel.com/resources/fan-zone/">Fan Zone</a></li> <li id="menu-item-3526" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3526"><a href="https://www.eiffel.com/resources/presentations/">Presentations</a></li> <li id="menu-item-4113" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4113"><a href="https://www.eiffel.com/resources/faqs/">FAQS</a></li> </ul></div></div><!--WP Widget Cache End --> <!--WP Widget Cache 0.26 Begin --> <!--Cache nav_menu-6 for 86400 second(s)--> <div id="nav_menu-6" class="col pb-0 widget widget_nav_menu"><span class="widget-title">Company</span><div class="is-divider small"></div><div class="menu-company-footer-menu-container"><ul id="menu-company-footer-menu" class="menu"><li id="menu-item-3528" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3528"><a href="https://www.eiffel.com/company/about-us/">About Us</a></li> <li id="menu-item-3532" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3532"><a href="https://www.eiffel.com/company/leadership/">Leadership</a></li> <li id="menu-item-3531" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3531"><a href="https://www.eiffel.com/company/customers/">Customers</a></li> <li id="menu-item-4914" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-4914"><a href="https://www.eiffel.com/posts/news/">News & Events</a></li> <li id="menu-item-3529" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3529"><a href="https://www.eiffel.com/company/careers/">Careers</a></li> <li id="menu-item-4115" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4115"><a href="https://www.eiffel.com/company/contact/">Contact</a></li> </ul></div></div><!--WP Widget Cache End --> </div> </div> <div class="absolute-footer dark medium-text-center small-text-center"> <div class="container clearfix"> <div class="footer-primary pull-left"> <div class="copyright-footer"> Copyright 2025 © - <a href="/privacy-policy/">Privacy Policy</a> </div> </div> </div> </div> <a href="#top" class="back-to-top button icon invert plain fixed bottom z-1 is-outline hide-for-medium circle" id="top-link" aria-label="Go to top"><i class="icon-angle-up" ></i></a> </footer> </div> <div id="main-menu" class="mobile-sidebar no-scrollbar mfp-hide"> <div class="sidebar-menu no-scrollbar "> <ul class="nav nav-sidebar nav-vertical nav-uppercase" data-tab="1"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3363"><a href="https://www.eiffel.com/eiffelstudio/">EiffelStudio</a> <ul class="sub-menu nav-sidebar-ul children"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4303"><a href="https://www.eiffel.com/eiffelstudio/">Overview</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3461"><a href="https://www.eiffel.com/eiffelstudio/screenshots/">Screenshots</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3367"><a href="https://www.eiffel.com/eiffelstudio/system-requirements/">System Requirements</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5203"><a href="https://www.eiffel.com/eiffelstudio/licensing/">Licensing</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-6123"><a href="/eiffelstudio/product/">Downloads</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5996"><a href="https://www.eiffel.com/eiffelstudio/buy/">Purchase</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5999"><a href="https://www.eiffel.com/eiffelstudio/purchase-enterprise/">Enterprise …</a></li> </ul> </li> <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor menu-item-has-children menu-item-5113"><a href="https://www.eiffel.com/values/design-by-contract/">Values</a> <ul class="sub-menu nav-sidebar-ul children"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4300"><a href="https://www.eiffel.com/values/design-by-contract/">Design By Contract™</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3374"><a href="https://www.eiffel.com/values/seamless-development/">Seamless Development</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3463"><a href="https://www.eiffel.com/values/automatic-testing/">Automatic Testing</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3464"><a href="https://www.eiffel.com/values/void-safety/">Void Safety</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-2475 current_page_item menu-item-3373"><a href="https://www.eiffel.com/values/parallel-programming/" aria-current="page">Parallel Programming</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5222"><a href="https://www.eiffel.com/values/model-driven-development/">Model-driven Development</a></li> </ul> </li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3375"><a href="https://www.eiffel.com/services/">Services</a> <ul class="sub-menu nav-sidebar-ul children"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4299"><a href="https://www.eiffel.com/services/">Overview</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3465"><a href="https://www.eiffel.com/services/consulting/">Consulting</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5460"><a href="https://www.eiffel.com/services/custom-development/">Custom Development</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5054"><a href="https://www.eiffel.com/services/training/">Training</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4956"><a href="https://www.eiffel.com/services/support/">Support</a></li> </ul> </li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3740"><a href="https://www.eiffel.com/resources/">Resources</a> <ul class="sub-menu nav-sidebar-ul children"> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3663"><a target="_blank" rel="noopener" href="https://www.eiffel.org/documentation">Documentation</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5424"><a target="_blank" rel="noopener" href="https://www.eiffel.org/resources/libraries">Libraries</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-5206"><a target="_blank" rel="noopener" href="http://www.eiffel.org">Eiffel Community</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3496"><a href="https://www.eiffel.com/resources/fan-zone/">Fan Zone</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4110"><a href="https://www.eiffel.com/resources/presentations/">Presentations</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3494"><a href="https://www.eiffel.com/resources/faqs/">FAQS</a></li> </ul> </li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-4306"><a href="https://www.eiffel.com/company/about-us/">Company</a> <ul class="sub-menu nav-sidebar-ul children"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3497"><a href="https://www.eiffel.com/company/about-us/">About Us</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3504"><a href="https://www.eiffel.com/company/leadership/">Leadership</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3498"><a href="https://www.eiffel.com/company/customers/">Customers</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-4913"><a href="https://www.eiffel.com/posts/news/">News & Events</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3500"><a href="https://www.eiffel.com/company/careers/">Careers</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4009"><a href="https://www.eiffel.com/company/contact/">Contact</a></li> </ul> </li> <li class="header-divider"></li> </ul> </div> </div> <style id='global-styles-inline-css' type='text/css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--primary: #446084;--wp--preset--color--secondary: #d26e4b;--wp--preset--color--success: #7a9c59;--wp--preset--color--alert: #b20000;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}a:where(:not(.wp-element-button)){text-decoration: none;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-color{color: var(--wp--preset--color--primary) !important;}.has-secondary-color{color: var(--wp--preset--color--secondary) !important;}.has-success-color{color: var(--wp--preset--color--success) !important;}.has-alert-color{color: var(--wp--preset--color--alert) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-background-color{background-color: var(--wp--preset--color--primary) !important;}.has-secondary-background-color{background-color: var(--wp--preset--color--secondary) !important;}.has-success-background-color{background-color: var(--wp--preset--color--success) !important;}.has-alert-background-color{background-color: var(--wp--preset--color--alert) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-border-color{border-color: var(--wp--preset--color--primary) !important;}.has-secondary-border-color{border-color: var(--wp--preset--color--secondary) !important;}.has-success-border-color{border-color: var(--wp--preset--color--success) !important;}.has-alert-border-color{border-color: var(--wp--preset--color--alert) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} </style> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/dist/hooks.min.js?ver=4d63a3d491d11ffd8ac6" id="wp-hooks-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/dist/i18n.min.js?ver=5e580eb46a90c2b997e6" id="wp-i18n-js"></script> <script type="text/javascript" id="wp-i18n-js-after"> /* <![CDATA[ */ wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); /* ]]> */ </script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.0.1" id="swv-js"></script> <script type="text/javascript" id="contact-form-7-js-before"> /* <![CDATA[ */ var wpcf7 = { "api": { "root": "https:\/\/www.eiffel.com\/wp-json\/", "namespace": "contact-form-7\/v1" } }; /* ]]> */ </script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.0.1" id="contact-form-7-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/plugins/auto-thickbox/js/auto-thickbox.min.js?ver=20150514" id="thickbox-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/themes/flatsome/inc/extensions/flatsome-live-search/flatsome-live-search.js?ver=3.19.8" id="flatsome-live-search-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js"></script> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/jquery/ui/datepicker.min.js?ver=1.13.3" id="jquery-ui-datepicker-js"></script> <script type="text/javascript" id="jquery-ui-datepicker-js-after"> /* <![CDATA[ */ jQuery(function(jQuery){jQuery.datepicker.setDefaults({"closeText":"Close","currentText":"Today","monthNames":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthNamesShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"nextText":"Next","prevText":"Previous","dayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"dayNamesShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"dayNamesMin":["S","M","T","W","T","F","S"],"dateFormat":"MM d, yy","firstDay":1,"isRTL":false});}); /* ]]> */ </script> <script type="text/javascript" src="https://www.eiffel.com/wp-includes/js/hoverIntent.min.js?ver=1.10.2" id="hoverIntent-js"></script> <script type="text/javascript" id="flatsome-js-js-extra"> /* <![CDATA[ */ var flatsomeVars = {"theme":{"version":"3.19.8"},"ajaxurl":"https:\/\/www.eiffel.com\/wp-admin\/admin-ajax.php","rtl":"","sticky_height":"53","stickyHeaderHeight":"0","scrollPaddingTop":"0","assets_url":"https:\/\/www.eiffel.com\/wp-content\/themes\/flatsome\/assets\/","lightbox":{"close_markup":"<button title=\"%title%\" type=\"button\" class=\"mfp-close\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line><\/svg><\/button>","close_btn_inside":false},"user":{"can_edit_pages":false},"i18n":{"mainMenu":"Main Menu","toggleButton":"Toggle"},"options":{"cookie_notice_version":"1","swatches_layout":false,"swatches_disable_deselect":false,"swatches_box_select_event":false,"swatches_box_behavior_selected":false,"swatches_box_update_urls":"1","swatches_box_reset":false,"swatches_box_reset_limited":false,"swatches_box_reset_extent":false,"swatches_box_reset_time":300,"search_result_latency":"0"}}; /* ]]> */ </script> <script type="text/javascript" src="https://www.eiffel.com/wp-content/themes/flatsome/assets/js/flatsome.js?ver=e1ad26bd5672989785e1" id="flatsome-js-js"></script> </body> </html>