CINXE.COM
Eiffel Community
<!doctype html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>Eiffel Community</title> <link media="all" rel="stylesheet" href="/theme/responsive-eiffel-org/css/all.css" /> <link rel="shortcut icon" href="https://www.eiffel.org/favicon.ico"/> <link href="https://fonts.googleapis.com/css?family=Inconsolata|Open+Sans:400,700|Titillium+Web" rel="stylesheet" type="text/css" /> <!--[if IE]><script src="/theme/responsive-eiffel-org/js/ie.js"></script><![endif]--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <link rel="stylesheet" href="/module/auth/files/css/auth.css" type="text/css"/> <link rel="stylesheet" href="/module/node/files/css/node.css" type="text/css"/> <link rel="stylesheet" href="/module/blog/files/css/blog.css" type="text/css"/> <link rel="stylesheet" href="/module/comments/files/css/comments.css" type="text/css"/> <link rel="stylesheet" href="/module/wikitext/files/css/wikitext.css" type="text/css"/> <link rel="stylesheet" href="/module/taxonomy/files/css/taxonomy.css" type="text/css"/> <style> table.recent-changes th { padding: 3px; } table.recent-changes td { padding: 3px; border: dotted 1px #ddd; } table.recent-changes td.date { padding-left: 15px; } table.recent-changes td.title { font-weight: bold; } </style> <link rel="stylesheet" href="/module/feed_aggregator/files/css/feed_aggregator.css" type="text/css"/> <link rel="profile" href="http://gmpg.org/xfn/11" /> <meta property="url" content="https://www.eiffel.org/" /> <meta property="description" content="Welcome to the community portal for Eiffel, the programming language for tackling tomorrow’s problems today." /> <meta property="keywords" content="[eiffel,community,programming,language,design,contract,dbc,object,oo]" /> <meta property="og:type" content="website" /> <meta property="og:image" content="https://www.eiffel.org/favicon.ico" /> <link rel='canonical' href='https://www.eiffel.org/' /> <link rel='shortlink' href='https://www.eiffel.org/' /> <script type="text/javascript" src="/module/wdocs/files/js/wdocs.js"></script> <link rel="stylesheet" href="/module/wdocs/files/css/wdocs.css" type="text/css"/> </head> <body class="page"> <div id="page"> <!-- Header --> <header id="header" class="grid-3"> <div class="logo"><a href="https://www.eiffel.org/"><img src="/theme/responsive-eiffel-org/images/logo.png" width="226" height="60" alt="Eiffel"></a></div> <nav id="nav"> <ul> <li><a href="https://www.eiffel.org/welcome">welcome</a></li> <li><a href="https://www.eiffel.org/documentation">documentation</a></li> <li><a href="https://www.eiffel.org/resources">resources</a></li> <li><a href="https://www.eiffel.org/contribute">contribute</a></li> <li><a href="https://www.eiffel.org/blogs">blogs</a></li> <li><a href="https://www.eiffel.org/downloads">download</a></li> </ul> </nav> <nav class="add-links"> <ul> <li> <a href="/account/roc-login?destination=">Sign in</a> </li> <li class="search"> <div class="block" id="block-gcse_search_form"><div class="inside"><form class="search-form" method="GET" action="https://www.eiffel.org/gcse20"> <input type="image" alt="Search" class="btn" src="/theme/responsive-eiffel-org/images/ico-search.png"/> <input type="text" name="q" size="25" maxlength="255" value="" /> </form> </div></div> </li> </ul> </nav> </header> <!-- Main part --> <main id="main"> <a id="main-content"><!-- Internal anchor to top content --></a> <section class="jumbotron"> <div class="container"> <div class="grid-2"> <div class="col"><div class="block" id="block-codeboard_demo"><div class="inside"><div class="codeboard-demo"> <div class="btn-holder"><a class="btn-play" href="codeboard">Try Eiffel online</a></div> <div class="codeboard-player"> <link rel="stylesheet" property="stylesheet" href="/module/codeboard/files/css/codeboard_static_demo.css"/> <div class="slider-wrapper"> <div class="slider" data-slider-delay="7000"> <input type="radio" name="slider" class="trigger" id="slide1" checked="checked" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel"> io.put_string_32 ("[ Hello! ¡Hola! Bonjour! こんにちは! Здравствуйте! Γειά σου! ]")</pre> <p class="slide-caption"> Unicode output in console </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide2" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel">feature -- Access ... invariant all_items_valid: ∀ x: items ¦ x.is_valid at_least_one_marked: ∃ x: items ¦ x.is_marked end</pre> <p class="slide-caption"> Assertions: class invariants with symbolic notation </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide3" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel"> values := << 1, 2, 4, 8 >> -- Sum of (index * values [index]). across values as i from sum := 0 loop sum := sum + i.cursor_index * i.item end</pre> <p class="slide-caption"> <a href="https://codeboard.eiffel.org/projects/4"> Sum using across loop </a> </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide4" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel"> rating := locale.plural_translation_in_context ("$1 star", "$1 stars", "example.context", n) ... rating: READABLE_STRING_32 -- Translated message. locale: I18N_LOCALE -- Currently selected locale with translations. do ... end</pre> <p class="slide-caption"> <a href="https://www.eiffel.org/files/doc/static/trunk/libraries/i18n/i18n_locale_flatshort.html#f_plural_translation_in_context"> Internationalization </a> </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide5" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel">class DINING_PHILOSOPHER ... feature -- Basic operations eat (left, right: separate FORK) -- Race-free access to the forks `left` and `right`. do left.use right.use end end</pre> <p class="slide-caption"> <a href="https://codeboard.eiffel.org/projects/5"> Concurrency with SCOOP </a> </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide6" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel">feature -- Access balance: INTEGER -- Current balance in dollars. feature -- Element change withdraw (amount: INTEGER) -- Remove `amount` dollars. require positive: amount > 0 not_too_big: amount <= balance do balance := balance - amount ensure increased: balance = old balance - amount end</pre> <p class="slide-caption"> <a href="https://codeboard.eiffel.org/projects/6"> Bank account example </a> </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide7" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel">run -- Execute tasks from `pool`. do from until not attached retrieved_task (pool) as task loop separate task as t do t.call end end end</pre> <p class="slide-caption"> <a href="https://codeboard.eiffel.org/projects/7"> Running a pool of tasks </a> </p> </div> </div><!-- .slide --> <input type="radio" name="slider" class="trigger" id="slide8" /> <div class="slide"> <div class="slide-item"> <pre class="prettyprint lang-eiffel">class REFEREE: race_start.publish (create {DATE_TIME}.make_now_utc) class RACE_CONTROL: race_start: EVENT_TYPE [DATE_TIME] class SPRINTER: race_start.subscribe (agent run_from_now) run_from_now (t: DATE_TIME) -- Record `t` as starting time and get running. do start_time := t run end</pre> <p class="slide-caption"> Event-based programming with agents </p> </div> </div><!-- .slide --> </div> <ul class="slider-nav"> <li class="slider-nav__item"><label class="slider-nav__label" for="slide1">1</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide2">2</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide3">3</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide4">4</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide5">5</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide6">6</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide7">7</label></li> <li class="slider-nav__item"><label class="slider-nav__label" for="slide8">8</label></li> </ul><!-- .slider-nav --> </div><!-- .slider-wrapper --> <script type="text/javascript" src="/module/codeboard/files/codeboard_static_demo.js"></script> </div><!-- codeboard-player --> </div> </div></div></div> <div class="col"></div> </div> </div> </section> <!-- Feeds ... --> <section class="rss-block"> <div class="container"> <h1>Recent posts</h1> <ul> <li><h2>News</h2><div class="roccms-load" data-href="/feed_aggregation/news?view=embedded&size=7"></div></li> <li><h2>Forum</h2><div class="roccms-load" data-href="/feed_aggregation/forum?view=embedded&size=7"></div></li> <li><h2>Facebook</h2> <div id="fb-root"></div> <script> (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> <div class="fb-page" data-href="https://www.facebook.com/Eiffel-Programming-Language-235981463124887/" data-tabs="timeline" data-small-header="true" data-adapt-container-width="true" data-hide-cover="true" data-show-facepile="false"></div> </li> </ul> </div> </section><!-- Feeds --> <section id="eiffel-community"> <div class="container"> <h1>Community</h1> <div class="grid-3 has-gutter"> <div class="one-third"> <h2>Gitter</h2> <img src="/theme/responsive-eiffel-org/images/ico5.png" /> <p> Real-time chat<br/> <a href="https://gitter.im/EiffelSoftware/EiffelStudio" target="blank">EiffelSoftware/EiffelStudio</a> </p> </div> <div class="one-third"> <h2>Forum</h2> <img src="/theme/responsive-eiffel-org/images/social20.png" /> <p> Thread communication<br/> <a href="http://groups.eiffel.com" target="blank">groups.eiffel.com</a> </p> </div> <div class="one-third"> <h2>Source</h2> <img src="/theme/responsive-eiffel-org/images/ico2.png" /> <p> Github repository<br/> <a href="https://github.com/EiffelSoftware/eiffelstudio" target="blank">EiffelSoftware/EiffelStudio</a> </p> </div> </div> </div> </section> <section id="built-with-eiffel"> <div class="container"> <h2>This site is powered by <a href="https://www.eiffel.com/" target="blank">Eiffel</a>.</h2> <img src="https://raw.githubusercontent.com/eiffelhub/media/master/logo/powered_by_eiffel_logo/png_200x80/powered_by_Eiffel_Logo_blue.png" /> <p>Built with the Eiffel <a href="https://github.com/EiffelWebFramework/ROC" target="blank">ROC-CMS</a> based on <a href="http://www.eiffelweb.org" target="blank">EiffelWeb</a>.</p> </div> </section> </main> <!-- Footer --> <footer id="footer"> <div class="container"> <nav class="footer-nav"> <ul class="grid-5 has-gutter"> <li class="one-sixth"><a href="https://www.eiffel.org/welcome">Welcome</a> <ul> <li><a href="https://www.eiffel.org/purpose">Purpose</a></li> <li><a href="https://www.eiffel.org/news">News</a></li> <li><a href="https://www.eiffel.org/updates">Updates</a></li> <li><a href="https://www.eiffel.org/forum">Forum</a></li> <li><a href="https://www.eiffel.org/community">Community</a></li> <li><a href="https://www.eiffel.org/contact">Contact</a></li> <li> <a href="/account/roc-login?destination=">Sign in</a> </li> </ul> </li> <li class="one-sixth"><a href="https://www.eiffel.org/documentation">Documentation</a> <ul> <li><a href="https://www.eiffel.org/doc/eiffel">Eiffel</a></li> <li><a href="https://www.eiffel.org/doc/eiffelstudio">EiffelStudio</a></li> <li><a href="https://www.eiffel.org/doc/solutions">Solutions</a></li> <li><a href="https://www.eiffel.org/doc/glossary">Glossary</a></li> <li><a href="https://www.eiffel.org/doc/faqs">FAQs</a></li> <li><a href="https://www.eiffel.org/contribute">Contribute</a></li> </ul> </li> <li class="one-sixth"><a href="https://www.eiffel.org/resources">Resources</a> <ul> <li><a href="https://www.eiffel.org/resources/libraries">Libraries</a></li> <li><a href="https://www.eiffel.org/resources/tools">Tools</a></li> <li><a href="https://www.eiffel.org/resources/wish_list">Wish list</a></li> <li><a href="https://www.eiffel.org/resources/videos">Videos</a></li> <li><a href="https://www.eiffel.org/resources/follow_us">Follow us</a></li> </ul> </li> <li class=""> <div class="btn-holder"> <a class="btn btn-download" href="https://www.eiffel.org/downloads">Download Now</a> <a class="btn btn-tryonline" href="https://www.eiffel.org/try_eiffel">Try Eiffel Online</a> <a class="btn btn-contribute" href="https://www.eiffel.org/contribute">Contribute</a> <a class="btn btn-account" href="/account/roc-login?destination=">Sign in</a> </div> </li> <li class="one-sixth"> <ul class="social-networks"> <li><a class="facebook" target="_blank" href="https://www.facebook.com/pages/Eiffel-Programming-Language/235981463124887">Facebook</a></li> <li><a class="youtube" target="_blank" href="http://www.youtube.com/user/EiffelLanguage">You Tube</a></li> <li><a class="twitter" target="_blank" href="https://twitter.com/Eiffel_Language">Twitter</a></li> </ul> </li> </ul> </nav> <!-- Block "built_with_eiffel" cached: 02/25/2025 3:00:20.000 PM --> <div style="float: right">Built with the Eiffel ROC CMS and the <a href="http://www.eiffelweb.org">EiffelWeb framework</a>.</div> </div> </footer> <script src="/theme/responsive-eiffel-org/js/wdownloads.js"></script> <script src="/theme/responsive-eiffel-org/js/home.js"></script> <link href="/theme/responsive-eiffel-org/js/google-code-prettify-eiffel/styles/lang-eiffel.css" type="text/css" rel="stylesheet" /> <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js"></script> <script src="/theme/responsive-eiffel-org/js/google-code-prettify-eiffel/src/lang-eiffel.js"></script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </div> </body> </html>