home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / faqs / comp / answers / eiffel-faq < prev    next >
Encoding:
Internet Message Format  |  1997-10-12  |  45.9 KB

  1. Path: senator-bedfellow.mit.edu!faqserv
  2. From: Franck_Arnaud@stratus.com
  3. Newsgroups: comp.lang.eiffel,comp.answers,news.answers
  4. Subject: comp.lang.eiffel Frequently Asked Questions (FAQ)
  5. Supersedes: <eiffel-faq_873884907@rtfm.mit.edu>
  6. Followup-To: comp.lang.eiffel
  7. Date: 11 Oct 1997 08:26:24 GMT
  8. Organization: TCAM Systems (UK) Ltd
  9. Lines: 1412
  10. Approved: news-answers-request@mit.edu
  11. Expires: 24 Nov 1997 08:26:08 GMT
  12. Message-ID: <eiffel-faq_876558368@rtfm.mit.edu>
  13. Reply-To: franck_arnaud@stratus.com
  14. NNTP-Posting-Host: penguin-lust.mit.edu
  15. X-Last-Updated: 1997/09/05
  16. Originator: faqserv@penguin-lust.MIT.EDU
  17. Xref: senator-bedfellow.mit.edu comp.lang.eiffel:24059 comp.answers:28462 news.answers:114292
  18.  
  19. Archive-name: eiffel-faq
  20. Posting-Frequency: approximately monthly
  21. Last-modified: 05 September 1997
  22.  
  23. EIFFEL: FREQUENTLY ASKED QUESTIONS
  24. =2D---------------------------------
  25.  
  26. This question-and-answer list is posted monthly to the Usenet
  27. newsgroups comp.lang.eiffel, comp.answers and news.answers.
  28.  
  29. Please send corrections, additions and comments to Franck Arnaud
  30. (franck_arnaud@stratus.com).
  31.  
  32. This information is abstracted and condensed from the posts of many
  33. contributors to comp.lang.eiffel, supplemented by information from
  34. vendors. No guarantees are made regarding its accuracy.
  35.  
  36. This compilation is by Franck Arnaud. Distribution is unrestricted.
  37. It builds on the work of the previous maintainers: Rock Howard, =
  38.  
  39. Roger Browne, Conrad Taylor in chronological order.
  40.  
  41. You can receive the latest copy by anonymous file transfer from:
  42.  
  43.    ftp://ftp.cm.cf.ac.uk/pub/eiffel/eiffel-faq
  44.    ftp://rtfm.mit.edu/pub/usenet/news.answers/eiffel-faq
  45.  
  46. or by sending an email message to mail-server@rtfm.mit.edu with this
  47. message body:
  48.  
  49.    send /pub/usenet/news.answers/eiffel-faq
  50.  
  51. =2D---------
  52.  
  53. CONTENTS
  54.  
  55. Changes since the last posting:
  56.  
  57.   - Questions have been renumbered using 4-letter codes for easier =
  58.  
  59.     reference.
  60.   - FAQ section: all questions but QEIF, QORI and QBON changed.
  61.   - Language section: LPAR, LEVC, LCAT, LTSK updated.
  62.  
  63. Frequently Asked Questions:
  64.  
  65.    QEIF  What is Eiffel?
  66.    QORI  Where did Eiffel come from?
  67.    QCOM  What Eiffel compilers are available?
  68.    QFRE  Is Eiffel available for free or as shareware?
  69.    QARC  Is there an archive of the comp.lang.eiffel newsgroup?
  70.    QBOK  What books are available for learning about Eiffel?
  71.    QWEB  Where can I find Eiffel on the World-Wide-Web?
  72.    QEDI  Where can I get an Eiffel editor or emacs-mode?
  73.    QBON  What is BON?
  74.    QSAT  What is Sather? How does it compare to Eiffel?
  75.    QSTD  Are there standards for the Eiffel language?
  76.    QTGV  How fast do Eiffel applications run?
  77.    QGRP  Are there any Eiffel user groups?
  78.    QADR  Where can I get Eiffel products and services?
  79.    QCNF  Are there any conferences for Eiffel users?
  80.    QECC  Why do most Eiffel implementations compile to C?
  81.  
  82. Language Issues:
  83.  
  84.    LFEA  What features does Eiffel have?
  85.    LCHN  What changes have been made to the Eiffel language definition?
  86.    LLIB  What libraries come with Eiffel?
  87.    LDBC  What's the big deal about preconditions and postconditions?
  88.    LCON  Please explain and discuss covariance vs. contravariance.
  89.    LCAT  Is it true that there are "holes" in the Eiffel type system?
  90.    LTSK  Is there support for concurrency in Eiffel?
  91.    LOVL  Why doesn't Eiffel allow function overloading?
  92.    LPRC  Why are there no procedural types in Eiffel?
  93.    LATR  Why are there no class attributes in Eiffel?
  94.    LPAR  How can I call the parent-class version of a redefined
  95.          routine?
  96.    LEVC  Where can I find a comparison between Eiffel and C++?
  97.    LDES  Are there any destructors in Eiffel?
  98.  
  99. =2D---------
  100.  
  101. QEIF:   What is Eiffel?
  102.  
  103. Eiffel is an advanced object-oriented programming language that
  104. emphasizes the design and construction of high-quality and reusable
  105. software.
  106.  
  107. Eiffel is not a superset or extension of any other language. Eiffel
  108. strongly encourages OO programming and does not allow dangerous
  109. practices from previous generation languages although it does
  110. interface to other languages such as C and C++. Eiffel supports the
  111. concept of "Design by Contract" to improve software correctness.
  112.  
  113. Beyond the language aspect Eiffel may be viewed as a method of
  114. software construction. Eiffel is an excellent vehicle for software
  115. education, including for a first programming course.
  116.  
  117. =2D---------
  118.  
  119. QORI:   Where did Eiffel come from?
  120.  
  121. Eiffel was created by Bertrand Meyer and developed by his company,
  122. Interactive Software Engineering (ISE) of Goleta, CA.
  123.  
  124. Dr. Meyer borrowed on his extensive experience with OOP, particularly
  125. with Simula. He also added in important concepts from his academic
  126. work on software verification and computer language definition.
  127.  
  128. Eiffel's design addresses many practical concerns that software
  129. engineers face when creating complex software. Eiffel has evolved
  130. continually since its conception on September 14, 1985 and its first
  131. introduction in 1986.
  132.  
  133. Eiffel is named after Gustave Eiffel, the engineer who designed the
  134. Eiffel Tower.
  135.  
  136. =2D---------
  137.  
  138. QCOM:   What Eiffel compilers are available?
  139.  
  140. The following Eiffel compilers are currently available and supported =
  141.  
  142. by their vendors or authors. The list is ordered by date of first =
  143.  
  144. publication.
  145.  
  146. In the case of commercial products, the price is not mentioned because =
  147.  
  148. there can be varying conditions depending on platforms, conditions of =
  149.  
  150. use (personal vs. professional), etc. Please check with the vendors' =
  151.  
  152. web-sites for up to date pricing information. As a rule of thumb, =
  153.  
  154. limited or personal versions of compilers cost from US$ 50 to US$ 200 =
  155.  
  156. while a full-blown compiler for a single-user licence and the right to =
  157.  
  158. royalty-free distribution varies from US$ 200 to US$ 1500, on mainstream=
  159.  
  160.  
  161. platforms.
  162.  
  163. In the list below, the 'target' entry indicates what code is produced =
  164.  
  165. by the compiler. Most -- but not all -- compilers produce C code so a =
  166.  
  167. supported C compiler is needed.
  168.  
  169. In the 'platform' entry, an indication of supported platforms is given. =
  170. =
  171.  
  172. "Win32" means Windows 95 and Windows NT on Intel x86. No compiler (but =
  173.  
  174. indirectly Smalleiffel) is available under Windows NT on RISC platforms =
  175. =
  176.  
  177. to the best of our knowledge. "Unix" means various Unices, check with =
  178.  
  179. vendor for the actual list of platforms. Most vendors supporting Unix =
  180.  
  181. do support Linux on Intel x86.
  182.  
  183. The 'brief description' sections are abstracted from the vendors' web =
  184.  
  185. pages.
  186.  
  187.  
  188.  Vendor: Interactive Software Engineering Inc, USA
  189.  Product: ISE Eiffel (current version: 4.1)
  190.  Licensing conditions: Commercial; free time-limited evaluation version
  191.  Target: C
  192.  Platforms: Win32, Unix =
  193.  
  194.  Web: http://www.eiffel.com/
  195.  
  196.  Brief description: =
  197.  
  198.   The ISE Eiffel environment includes: =
  199.  
  200.   - EiffelBench, a complete graphical development environment with
  201. unique =
  202.  
  203.     facilities for fast compilation, power browsing, documentation, =
  204.  
  205.     symbolic debugging and more
  206.   - EiffelBase, a complete and professional set of classes covering =
  207.  
  208.     containers, collections, I/O, iterators, object persistence, table =
  209.  
  210.     searching etc.
  211.   - Under Windows, the Windows Eiffel Library (WEL), combining the power=
  212.  
  213. of =
  214.  
  215.     Eiffel with access to the Windows API. =
  216.  
  217.  
  218.  
  219.  Vendor: Tower Technology Corporation
  220.  Product: TowerEiffel (current version: 2.0)
  221.  Licensing condition: Commercial
  222.  Target: C
  223.  Platforms: Win32, Unix
  224.  Web: http://www.twr.com/
  225.  
  226.  Brief description:
  227.   TowerEiffel is a complete enviromenent that includes: =
  228.  
  229.   - High Performance Eiffel 3 Compiler =
  230.  
  231.   - Programming Environment =
  232.  
  233.   - Automatic Documentation Generation =
  234.  
  235.   - Hundreds of Reusable Classes =
  236.  
  237.   - Multi-language Source Level Debugger =
  238.  
  239.   - Browsing Tools =
  240.  
  241.   - Project Management Tools
  242.  
  243.  
  244.  Vendor: Dominique Colnet and others
  245.  Product: SmallEiffel
  246.  Licensing conditions: Freeware
  247.  Target: ANSI C / Java Virtual Machine
  248.  Platforms: Any ANSI C machine
  249.  Web: No web site yet, master ftp site at
  250.             ftp://ftp.loria.fr/pub/loria/genielog/SmallEiffel/
  251.             =
  252.  
  253.  Brief description:
  254.   SmallEiffel is intended to be a complete, though small and very fast, =
  255. =
  256.  
  257.   free Eiffel compiler. SmallEiffel is already used by students of the =
  258.  
  259.   University Henri Poincare in Nancy, France.
  260.   SmallEiffel has already been ported to several platforms. The current =
  261. =
  262.  
  263.   distribution includes an Eiffel to C compiler, an Eiffel to Java =
  264.  
  265.   bytecode compiler, a pretty printer and various tools.
  266.  
  267.  
  268.  Vendor: Halstenbach ACT GmbH, Germany
  269.  Product: iss-base (current version: 1.6)
  270.  Licensing conditions: Commercial
  271.  Target: C
  272.  Platforms: Win32, Unix
  273.  Web: http://www.halstenbach.de/
  274.  
  275.  Brief description:
  276.   iss-bench is the interactive and platform-independent tool for the =
  277.  
  278.   development of Eiffel programs under MS Windows and UNIX. It features =
  279. =
  280.  
  281.   incremental compiling, automatic recognition of dependencies, a =
  282.  
  283.   source-code debugger and browsing tools.
  284.   Libraries include: iss-baselib (data structures), iss-vision =
  285.  
  286.   (user interface-management-system providing Windows API support =
  287.  
  288.   and a series of further abstractions to create complex dialogs),
  289.   iss-store (relational databases interface).
  290.  
  291.   (Note: iss-bench and iss-baselib are based on but not the same =
  292.  
  293.   as ISE Eiffel. iss-vision and iss-build are unrelated with ISE =
  294.  
  295.   products.)
  296.  
  297.  
  298.  Vendor: Object Tools GmbH, Germany
  299.  Product: Visual Eiffel (current version: 2.0)
  300.  Licensing conditions: Commercial; free feature-limited evaluation
  301. version
  302.  Target: Native Intel x86
  303.  Platforms: Win32 only
  304.  Web: http://www.object-tools.com/
  305.  
  306.  Brief description:
  307.   Using Visual Eiffel and DM will help you to develop complex Windows =
  308.  
  309.   applications in a very short time. Visual Eiffel gives you =
  310.  
  311.   - an integrated workbench with the Windows look and feel a =
  312.  
  313.     professional Eiffel compiler producing very efficient native =
  314.  
  315.     code for Intel processors =
  316.  
  317.   - DM - the most rapid RAD tool you have ever seen gives you everything=
  318.  
  319.  
  320.     to build applications for Windows fast. =
  321.  
  322.   - many useful libraries for the production of commercial Windows =
  323.  
  324.     applications - for ActiveX component integration, for ODBC access, =
  325.  
  326.     for the creation of nice graphical packages and much more.
  327.  
  328.  
  329. Other Eiffel compilers are worth mentioning although they may be =
  330.  
  331. either not supported any more, or an older version, or at an early =
  332.  
  333. stage of development so that their implementation of the language =
  334.  
  335. is far from complete.
  336.  
  337.  
  338. =2D SIG Eiffel/S, version 1.3: Eiffel/S was the first Eiffel 3 =
  339.  
  340.   compiler, and the first Eiffel compiler available on the PC
  341.   platform. Version 1.3, is still available as shareware from =
  342.  
  343.   Object Tools (formerly SIG) but it is a few years old. A =
  344.  
  345.   much improved version has been announced for a while, =
  346.  
  347.   but is not available at the time of writing. Eiffel/S 1.3 is =
  348.  
  349.   a command line compiler producing C code, it is available =
  350.  
  351.   for DOS32, Windows 95 and NT and many Unix platforms.
  352.   Object Tools is at http://www.object-tools.com/.
  353.  
  354. =2D EON Eiffel: An Eiffel to C++ compiler, written in C++, =
  355.  
  356.   not actively maintained.
  357.  =
  358.  
  359. =2D FEC is a native Eiffel compiler for SUN SPARC machines. An early =
  360.  
  361.   beta version can be downloaded from Fridtjof Siebert's page at
  362.  =
  363.  
  364. http://www.informatik.uni-stuttgart.de/ifi/ps/siebert/fridi_eiffel.html
  365.  
  366.  
  367. =2D---------
  368.  
  369. QFRE:   Is Eiffel available for free or as shareware?
  370.  
  371. SmallEiffel is a freeware compiler, provided as a highly =
  372.  
  373. portable C package that can compile on most ANSI C platforms.
  374. The actual source code of the compiler (in Eiffel, from which =
  375.  
  376. the provided C code is compiled) is not available.
  377.  
  378. Many commercial vendors offer free evaluation versions, with =
  379.  
  380. some limitations. Commercial vendors often also have cheap =
  381.  
  382. entry-level versions for popular platforms like Win32 on =
  383.  
  384. Intel-based PCs.
  385.  
  386. =2D---------
  387.  
  388. QARC:   Is there an archive of the comp.lang.eiffel newsgroup?
  389.  
  390. Yes, on the WWW at:
  391.   http://www.cm.cf.ac.uk/CLE/
  392. or at the following FTP sites:
  393.   ftp://wuarchive.wustl.edu/usenet/comp.lang.eiffel/
  394.  
  395. The newsgroup is also archived at the usual places on the web =
  396.  
  397. (DejaNews, AltaVista, etc).
  398.  
  399. =2D---------
  400.  
  401. QBOK:   What books are available for learning about Eiffel?
  402.  
  403. ESSENTIAL READING
  404.  
  405.  Title: Object-Oriented Software Construction, second edition
  406. Author: Bertrand Meyer, ISE Inc.
  407.   ISBN: ISBN 0-13-629155-4 -- Published 1997
  408.  Short: This book is the comprehensive reference on all aspects of
  409.         object technology, from design principles to O-O techniques,
  410. Design
  411.         by Contract, O-O analysis, concurrency, persistence, abstract
  412. data
  413.         types and many more. Written by a pioneer in the field, contains=
  414.  
  415. an
  416.         in-depth analysis of both methodological and technical issues.
  417.  
  418.         While not presented as an 'Eiffel book' (Eiffel is presented as =
  419. =
  420.  
  421.         the 'notation' used to illustrate the concept) this is essential=
  422.  
  423.  
  424.         for any Eiffelist and it actually includes a rather complete =
  425.  
  426.         description of the 'notation' -- Eiffel.
  427.  
  428.         Comes with a CD-ROM containing: the complete hyperlinked text,
  429.         for easy reference; software to read the text on major industry
  430.         platforms; supplementary material (reusable components,
  431.         mathematical complements); and a complete graphical O-O
  432.         development environment supporting the concepts of the book.
  433.  
  434.  
  435.  Title: Eiffel: The Language
  436. Author: Bertrand Meyer
  437.   ISBN: ISBN 0-13-247925-7 -- Published 1992
  438.  Short: This book combines an introduction to Eiffel, the language
  439. reference,
  440.         and a good deal of philosophy into its 600 pages. This is a
  441. rigorous
  442.         and comprehensive book which some readers may find heavy going
  443. despite
  444.         Dr. Meyer's clarity of expression. It is the definitive language=
  445.  
  446.         reference, and essential reading for all serious Eiffel users.
  447. Get the
  448.         second or later printing (same ISBN), which includes many
  449. corrections
  450.         and changes (there is not a second edition, and none is
  451. currently
  452.         underway). This book is also available in French (ISBN
  453. 2-7296-0525-8).
  454.  
  455.  
  456. OTHER BOOKS
  457.  
  458.  Title: An Object-Oriented Introduction to Computer Science Using Eiffel=
  459.  
  460. Author: Richard Wiener -- ISBN: 0-13-838725 -- Published 1997
  461.  Short: None
  462.  
  463.  Title: Object Technology for Scientific Computing Object-Oriented
  464.             Numerical Software in Eiffel and C
  465. Author: Paul Dubois -- ISBN: 0-13-267808-X -- Published 1996
  466.  Short: Accompanying CD with the Free Eiffel for UNIX & Linux
  467. environments.
  468.  
  469.  Title: Object-Oriented Software Engineering with Eiffel
  470. Author: Jean-Marc Jezequel -- ISBN: 0-201-63381-7 -- Published 1996
  471.  Short: A comprehensive guide to Eiffel. In addition to describing
  472. Eiffel, =
  473.  
  474.         the book contains descriptions and comparisons of compilers and =
  475. =
  476.  
  477.         libraries available on the market.
  478.  
  479.  Title: Object Structures: Building OO Software Components with Eiffel
  480. Author: Jacob Gore -- ISBN: 0-201-63480-5 -- Published 1996
  481.  Short: This is the first "data structures" book for Eiffel, bringing to=
  482.  
  483.  
  484.         the study of that language the first comprehensive treatment of
  485.         one of the most important topics in any programming language.
  486.  
  487.  Title: Eiffel Object-Oriented Programming
  488. Author: John Tyrrell -- ISBN: 0-333-64554-5 -- Published 1995
  489.  Short: This is an inexpensive and very approachable book.
  490.  
  491.  Title: Software Development Using Eiffel: There can be life other than
  492. C++
  493. Author: Richard Wiener -- ISBN: 0-13-100686-X -- Published 1995
  494.  Short: This is a useful book with a lot of code examples for those with=
  495.  
  496.         a grounding in another OO language.
  497.  
  498.  Title: Object Success
  499. Author: Bertrand Meyer -- ISBN: 0-13-192833-3 -- Published 1995
  500.  Short: This book is a  manager's guide to object orientation, its
  501. impact on =
  502.  
  503.         the corporation and its use for re-engineering the software
  504. process.
  505.  
  506.  Title: Object Oriented Programming in Eiffel
  507. Author: Pete Thomas and Ray Weedon -- ISBN: 0-201-59387-4 -- Published
  508. 1995
  509.  Short: This book is a very comprehensive Eiffel tutorial and textbook,
  510.         with a solid "Abstract Data Type" approach.
  511.  
  512.  Title: Object Oriented Programming in Eiffel
  513. Author: R. Rist and R. Terwilliger -- ISBN: 0-13-205931-2 -- Published
  514. 1995
  515.  Short: This is a textbook with an emphasis on design.
  516.  
  517.  Title: Seamless Object-Oriented Software Architecture: Analysis and
  518.             Design of Reliable Systems
  519. Author: Kim Walden and Jean-Marc Nerson -- ISBN: 0-13-031303-3 -- Publ.
  520. 1994
  521.  Short: This book describes the Business Object Notation (BON) Method in=
  522.  
  523.         detail.
  524.  
  525.  Title: Reusable Software: The Base Object-Oriented Component Libraries
  526. Author: Bertrand Meyer -- ISBN: 0-13-245499-8 -- Published 1994
  527.  Short: This book describes principles of library design and the
  528. taxonomy of
  529.         fundamental computing structures. Serves as a manual for the
  530.         EiffelBase libraries.
  531.  
  532.  Title: An Object-Oriented Environment: Principles and Application
  533. Author: Bertrand Meyer -- ISBN: 0-13-245507-2 -- Published 1994
  534.  Short: This book describes the ISE EiffelBench environment as well as
  535. the
  536.         "Melting Ice" compilation technology and the EiffelBuild GUI
  537.         application builder.
  538.  
  539.  Title: Object-Oriented Applications
  540. Author: Meyer and Nerson editors -- ISBN: 0-13-013798-7 -- Published
  541. 1993
  542.  Short: This book includes an introduction to Eiffel technology
  543.         followed by seven in-depth descriptions of large applications =
  544.  
  545.         written in Eiffel.
  546.  
  547.  Title: Eiffel: Objektorientiertes Programmieren in der Praxis
  548. Author: Frieder Monninger -- ISBN: ISBN 3-88229-028-5 -- Published 1993
  549.  Short: This book is a very down-to-earth Eiffel handbook in German.
  550.  
  551.  Title: Eiffel: An Introduction
  552. Author: Robert Switzer -- ISBN: 0-13-105909-2 -- Published 1993
  553.  Short: This book is a very clear and concise Eiffel primer, with many
  554. code
  555.         fragments and two substantial Eiffel applications. Also, this
  556. book is
  557.         available in French as "Introduction a Eiffel" (ISBN
  558. 2-225-84-656-1).
  559.  
  560.  Title: Object Oriented Software Construction, first edition
  561. Author: Bertrand Meyer -- ISBN: 0-13-629049-3 -- Published 1988
  562.  Short: An earlier edition of the second edition mentioned above, based =
  563. =
  564.  
  565.         on a previous version of the language.
  566.         Also available in French, German, Italian, Dutch, etc.
  567.  
  568. =2D---------
  569.  
  570. QWEB:   Where can I find Eiffel on the World-Wide-Web?
  571.  
  572. http://www.cm.cf.ac.uk/CLE/
  573.   An Eiffel home page that is held on the University of Wales College =
  574.  
  575.   of Cardiff's server.
  576.  
  577. http://www.progsoc.uts.edu.au/~geldridg/eiffel/
  578.   Geoff Eldridge's Eiffel pages including GUERL, a preview of Eiffel =
  579.  
  580.   Liberty, an online journal, the online C++ Critique, and other =
  581.  
  582.   useful information.
  583.  
  584. http://www.totalweb.co.uk/gustave/
  585.   Gustave is a repository of Eiffel resources maintained by Roger =
  586.  
  587.   Browne of Everything Eiffel.
  588.  
  589. The main vendors websites are:
  590.  
  591.  Halstenbach ACT   http://www.halstenbach.de/
  592.  ISE               http://www.eiffel.com/
  593.  Object Tools      http://www.object-tools.com/
  594.  Tower Technology  http://www.twr.com/
  595.  =
  596.  
  597. =2D---------
  598.  
  599. QEDI:   Where can I get an Eiffel editor or emacs-mode?
  600.  
  601. Tower Technology Corporation supplies an Eiffel 3 emacs mode that
  602. supports syntax-directed highlighting, auto-indentation and is easily
  603. customized for font use, color and indentation amounts. It comes as
  604. part of the TowerEiffel system, but is also available free for anyone
  605. who requests it. Send email to elisp@atlanta.twr.com to get the latest
  606. version.
  607.  
  608. The WINEDIT shareware programmer's editor offers colour syntax
  609. highlighting, works with Eiffel/S under MS-Windows, and is available
  610. from all main Windows shareware archives.
  611.  
  612. Alan Philips' free Programmers File Editor also works with Eiffel/S
  613. under MS-Windows, has templates but not syntax highlighting, available
  614. from http://www.lancs.ac.uk/people/cpaap/pfe/ .
  615.  
  616. Franck Arnaud's Eiffel extension to the Windows/WindowsNT programmers
  617. editor Codewright from Premia implements chromacoding of Eiffel code, =
  618.  
  619. has smart indenting and some templates. Available from =
  620.  
  621. http://www.altsoft.demon.co.uk/free/ .
  622.  
  623. =2D---------
  624.  
  625. QBON:   What is BON?
  626.  
  627. BON ("Business Object Notation") is a method for high-level analysis
  628. and design, offering a seamless reversible transition to an Eiffel
  629. implementation. The method emphasizes Design by Contract and
  630. systematic development.
  631.  
  632. ISE supports BON with its EiffelCase tool.
  633.  
  634. =2D---------
  635.  
  636. QSAT:   What is Sather? How does it compare to Eiffel?
  637.  
  638. Sather is an OO language, originally patterned after Eiffel but now
  639. very different, created at ICSI of Berkeley, CA.
  640.  
  641. Sather does not support Design by Contract, but has some other
  642. interesting features. See the Usenet newsgroup comp.lang.sather =
  643.  
  644. or the Sather home page at http://www.icsi.berkeley.edu/~sather/.
  645.  
  646. =2D---------
  647.  
  648. QSTD:   Are there standards for the Eiffel language?
  649.  
  650. The definition of the Eiffel language is in the public domain. This
  651. definition is controlled by NICE, the Non-profit International
  652. Consortium for Eiffel.
  653.  
  654. The Eiffel trademark is owned and controlled by NICE. NICE is using
  655. Bertrand Meyer's book, "Eiffel: The Language" (2nd Printing), as the
  656. initial definition of the language.
  657.  
  658. The NICE board of directors for 1997 consists of Simon Parker, =
  659.  
  660. Bertrand Meyer, Rock Howard, James McKim.
  661.  
  662. In June 1995 NICE published the first version (called "Vintage 95") of
  663. the Eiffel Library Standard. Those parts of an Eiffel application that
  664. use only the standard classes and features should run with minimal
  665. change on any compiler supporting ELS-95.
  666.  
  667. NICE (Nonprofit International Consortium for Eiffel)
  668. 45 Hazelwood
  669. Shankill
  670. Co Dublin
  671. Republic of Ireland
  672. TEL: +353 1 282 3487
  673. email: nice@atlanta.twr.com
  674.  
  675. =2D---------
  676.  
  677. QTGV:  How fast do Eiffel applications run?
  678.  
  679. Early implementations of Eiffel were slow. Recent implementations have
  680. improved dramatically. However, to achieve maximum performance under
  681. any Eiffel implementation, run-time assertion monitoring must be
  682. switched off.
  683.  
  684. It's hard to generalise, but compared to C++, simple
  685. computation-intensive applications will run perhaps 15% slower. Large
  686. applications are often dominated by memory management rather than
  687. computation. The effect of garbage collection is an oft-debated point, =
  688.  
  689. generally the overhead is quite low (10%) and in principle a style of =
  690.  
  691. programming assuming a GC could be more efficient than typical manual =
  692.  
  693. memory management. This also depends on the kind of application, the =
  694.  
  695. implementation of the garbage collector, etc.
  696.  
  697. =2D---------
  698.  
  699. QGRP:  Are there any Eiffel user groups?
  700.  
  701. Compiler vendors usually run user groups for their user base, often =
  702.  
  703. in the form of a mailing-list or meetings during conferences. Contact =
  704.  
  705. the individual vendors for more information.
  706.  
  707. UK & Ireland Eiffel Interest Group (currently inactive)
  708.  
  709.  
  710. =2D---------
  711.  
  712. QADR:   Where can I get Eiffel products and services?
  713.  
  714. These vendors, resellers and suppliers of Eiffel training and
  715. consultancy are listed in alphabetical order:
  716.  
  717. (The vendor names followed by an asterisk are those whose =
  718.  
  719. address could not be verified. If the people concerned read =
  720.  
  721. the FAQ or someone knows an email address to contact them, =
  722.  
  723. please contact the FAQ maintainer.)
  724.  
  725.  
  726. ARGENTINA
  727.  
  728. Cybertech*
  729.  POST Systens Integration for CIM, Suarez 1281, Third Floor, Apt.A
  730.        CP-1288 Buenos Aires, Argentina
  731.  TEL +54 1 28 1950             FAX +54 1 322 1071 or 963 0070
  732.  
  733.  
  734. AUSTRALIA
  735.  
  736. Class Technology Pty. Ltd.
  737.  POST PO Box 6274, North Sydney NSW 2060, Australia
  738.  TEL +61 2 9922 7222           FAX +61 2 9922 7703
  739.  EMAIL eiffel@class.com.au     WEB http://www.class.com.au/
  740.  
  741.  
  742. CANADA
  743.  
  744. Jay-Kell Technologies, Inc.*
  745.  POST 48 Lakeshore Road, Suite #1, =
  746.  
  747.       Pointe Claire, Quebec, Canada H9S 4H4
  748.  TEL +1 514 630 1005           FAX +1 514 630 1456
  749.  
  750.  
  751. EUROPEAN UNION
  752.  
  753. Advanced Media Technology Ltd.
  754.  POST Box 16, Hatolantie 140, SF-34 301 Kuru, Finland
  755.  TEL +358 400 620 236          FAX +358 3 4737 117
  756.  EMAIL jukka.haukijarvi@eiffel.fi
  757.  WEB http://www.eiffel.fi/
  758.  
  759. Cap Gemini France, ITMI APTOR, Eiffel Group
  760.  POST 86-90 rue Thiers, F-92513 Boulogne-Billancourt Cedex, France
  761.  TEL +33 1 4910 5300           FAX +33 1 4910 5102
  762.  EMAIL eiffel@capgemini.fr
  763.  
  764. Eiffel Software Iberica
  765.  POST Isabel II, 4, 1D; 20011 San Sebastian, Spain
  766.  TEL/FAX +34 943 472108
  767.  EMAIL jipferur@si.ehu.es
  768.  
  769. Eiffel Ireland
  770.  POST 45 Hazelwood, Shankill, Co Dublin, Ireland
  771.  TEL +353 1 282 3487
  772.  EMAIL sparker@eiffel.ie       WEB http://www.eiffel.ie/Eiffel/
  773.  
  774. Enea Data
  775.  POST Box 232, Nytorpsvagen 5, S-183 23 Taby, Sweden
  776.  TEL +46 8 638 5000            FAX +46 8 638 50 50
  777.  EMAIL eiffel@enea.se          WEB http://www.enea.se/
  778.  
  779. EtnoTeam
  780.  POST Via Adelaide Bono Cairoli 34, I-20127 Milano, Italy
  781.  TEL +39 2 261621              FAX +39 2 26110755
  782.  EMAIL sales@etnomi.it         WEB http://www.etnomi.it/
  783.  
  784. Everything Eiffel
  785.  POST 6 Bambers Walk, Wesham PR4 3DG, England
  786.  TEL & FAX +44 1772 687525     WEB http://www.eiffel.demon.co.uk/
  787.  EMAIL roger@eiffel.demon.co.uk =
  788.  
  789.  
  790. Halstenbach ACT GmbH
  791.  POST Breidenbrucher Strasse 2, D-51674 Wiehl, Germany
  792.  TEL + 49 2261 9902 0          FAX +49 2261 9902 99
  793.  EMAIL info@halstenbach.de     WEB http://www.halstenbach.de/
  794.  
  795. Langmack & Partner, Feinarbeit
  796.  POST Gitshinner Strasse 91 - 2. Hof, D-10969 Berlin, Germany
  797.  TEL +49 30 616794 61          FAX +49 30 616794 67
  798.  EMAIL langmack@feinarbeit.de
  799.  
  800. Object Tools GmbH
  801.  POST Zu den Bettern 4, D-35619 Braunfels, Germany
  802.  TEL +49 6472 911030           FAX +49 6472 911031
  803.  EMAIL eiffel@eiffel.de        WEB http://www.eiffel.de/
  804.  
  805. Jan Willamowius
  806.  POST Semperstr. 1, D-22303 Hamburg, Germany
  807.  TEL +49 40-2806209
  808.  EMAIL jan@janhh.shnet.org =
  809.  
  810.  WEB http://swt-www.informatik.uni-hamburg.de/~1willamo/dl.html
  811.  
  812.  
  813. INDIA
  814.  
  815. Sritech Information Technology*
  816.  POST 744/51 2nd Floor, 10 Mian Road, 4th Block
  817.       Jayanagar, Bangalore, India 560011
  818.  TEL +91 812 640661            FAX +91 812 643608
  819.  
  820.  
  821. JAPAN
  822.  
  823. Information and Math Science Lab Inc.
  824.  POST 2-43-1, Ikebukuro, Toshima-ku, Tokyo 171
  825.  TEL +81 3 3590 5211           FAX +81 3 3590 5353
  826.  EMAIL fushimi@imslab.co.jp    WEB http://www.imslab.co.jp/
  827.  
  828.  
  829. NEW ZEALAND
  830.  
  831. Objective Methods Ltd
  832.  POST PO Box 17356 (77 Chamberlain Rd)
  833.        Karori, Wellington, New Zealand
  834.  TEL +64 4 476 9499            FAX +64 4 476 9237
  835.  EMAIL dkenny@actrix.gen.nz
  836.  
  837.  
  838. SWITZERLAND
  839.  
  840. Abstraction
  841.  POST Faubourg de l'Hopital, CH-2000 Neuchatel, Switzerland
  842.  TEL +41 32 7250493            FAX +41 32 7259857
  843.  EMAIL abstraction@access.ch
  844.  
  845. Objectif Concept*
  846.  POST Passage Cour-Robert 5, CH-1700 Fribourg, Switzerland
  847.  TEL +41 37 232977             FAX +41 37 464889
  848.  
  849.  
  850. UNITED STATES OF AMERICA
  851.  
  852. Halstenbach ACT, Inc.
  853.  POST 827 State Street, Santa Barbara, CA 93101, USA                 =
  854.  
  855.  TEL +1 805 568 0023           FAX +1 805 884 0806
  856.  EMAIL info@halstenbach.de     WEB http://www.halstenbach.de/
  857.          =
  858.  
  859. Interactive Software Engineering, Inc
  860.  POST ISE Building, 2nd floor, 270 Storke Road, Goleta, CA 93117, USA
  861.  TEL +1 805 685 1006           FAX +1 805 685 6869
  862.  EMAIL info@eiffel.com         WEB http://www.eiffel.com/
  863.  
  864. Object Tools, Inc. =
  865.  
  866.  POST 13267 Summit Sq. Center, Route 413 & Doublewoods Rd, =
  867.  
  868.       Langhorne, PA 19047, USA
  869.  TEL/FAX +1 215 504 0854
  870.  EMAIL info@object-tools.com   WEB http://www.object-tools.com/
  871.  
  872. Tower Technology Corporation
  873.  POST 1501 Koenig Lane, Austin, TX 78756, USA
  874.  TEL +1 512 452 9455           FAX +1 512 452 1721
  875.  EMAIL tower@twr.com           WEB ttp://www.twr.com/
  876.  
  877. =2D---------
  878.  
  879. QCNF:   Are there any conferences for Eiffel users?
  880.  
  881. The conferences listed here are not just for Eiffel. Eiffel shares the
  882. spotlight with other OO languages including C++ and Smalltalk.
  883.  
  884. TOOLS is one of the major international conferences devoted to the
  885. applications of OO technology. Other events, such as Eiffel User Group
  886. meetings or NICE meetings are often held in conjunction with TOOLS.
  887.  
  888. The TOOLS home page is at http://www.tools.com/, email tools@tools.com
  889.  
  890. The ACM SIGPLAN Conference On Object-Oriented Programming Systems, =
  891.  
  892. Languages and Applications (OOPSLA) is another well-known conference =
  893.  
  894. about OO Technology. OOPSLA home page is at =
  895.  
  896. http://www.acm.org/sigplan/oopsla/
  897.  
  898. ECOOP is the annual European Conference for Object-Oriented Programming.=
  899.  
  900.  
  901. http://iamwww.unibe.ch/ECOOP/
  902.  
  903. =2D---------
  904.  
  905. QECC:   Why do most Eiffel implementations compile to C?
  906.  
  907. By using C as a target language, an Eiffel implementor can:
  908.  
  909. =2D  bring Eiffel to the marketplace faster and at lower cost
  910. =2D  port their implementation more easily to other platforms
  911. =2D  take advantage of optimisation provided by the C compiler
  912.  
  913. Much of the technology that makes Eiffel relatively simple to use also
  914. makes it more difficult to implement (an Eiffel-to-C compiler is
  915. perhaps 4 to 5 times more difficult to create than a native Pascal
  916. compiler).
  917.  
  918. Compiling Eiffel to C seems to work well under Unix. C is sometimes
  919. thought of as the native code of Unix.
  920.  
  921. On the other hand, C is not universal on other platforms, and the
  922. Eiffel purchaser may need to buy a C compiler as well, and possibly
  923. replace it if the supported C compilers change with new versions of
  924. the Eiffel compiler.
  925.  
  926. With a native-code compiler, you may get somewhat better throughput =
  927.  
  928. and the potential for smaller executables and slightly better =
  929.  
  930. performance.
  931.  
  932. =2D---------
  933.  
  934. LFEA:   What features does Eiffel have?
  935.  
  936. Eiffel is a pure object-oriented language. Its modularity is based on
  937. classes. It stresses reliability, and facilitates design by contract.
  938. It brings design and programming closer together. It encourages the
  939. re-use of software components.
  940.  
  941. Eiffel offers classes, multiple inheritance, polymorphism, static
  942. typing and dynamic binding, genericity (constrained and
  943. unconstrained), a disciplined exception mechanism, systematic use of
  944. assertions to promote programming by contract, and deferred classes
  945. for high-level design and analysis.
  946.  
  947. Eiffel has an elegant design and programming style, and is easy to
  948. learn.
  949.  
  950. An overview is available at
  951. http://www.eiffel.com/doc/manuals/language/intro/
  952.  
  953. =2D---------
  954.  
  955. LCHN:   What changes have been made to the Eiffel language definition?
  956.  
  957. Eiffel is still a relatively new language, and there have been a
  958. number of changes to its definition.
  959.  
  960. There were significant changes between the publication of
  961. "Object-Oriented =
  962.  
  963. Software Construction", first edition in 1988, and the release of =
  964.  
  965. Eiffel 2.3. =
  966.  
  967.  
  968. More significant changes came with the introduction of Eiffel 3, the =
  969.  
  970. current and only version of the language in use today. These changes =
  971.  
  972. are summarised in Eiffel: The Language.
  973.  
  974. There were some less significant changes between the first =
  975.  
  976. and second printings of "Eiffel: The Language":
  977.  
  978.    - New basic types INTEGER_REF, REAL_REF, CHARACTER_REF and
  979.      BOOLEAN_REF etc have been introduced to provide non-expanded
  980.      basic types.
  981.  
  982.    - Introduction of the POINTER type to enable external references to
  983.      be passed around in Eiffel programs.
  984.  
  985.    - Calls from Eiffel to external routines no longer implicitly pass
  986.      the current object as the first parameter.
  987.  
  988. There are many other (more minor) changes, which Neil Wilson has
  989. summarized in ftp://ftp.cm.cf.ac.uk/pub/eiffel/Docs in both Microsoft
  990. Rich Text Format and ASCII.
  991.  
  992. =2D---------
  993.  
  994. LLIB:   What libraries come with Eiffel?
  995.  
  996. All vendors aim to support the Eiffel Library Standard kernel classes.
  997.  
  998. In addition, extensive library classes are supplied with the compilers
  999. including data structures, graphics, lexical analysis and parsing, IO,
  1000. persistence, formatting and more.
  1001.  
  1002. Contact the vendors for further details.
  1003.  
  1004. =2D---------
  1005.  
  1006. LDBC:   What's the big deal about preconditions and postconditions?
  1007.  
  1008. The big deal is that it supports programming by contract. For example,
  1009. preconditions (require clauses) are simple boolean statements that are
  1010. used to check that the input arguments are valid and that the object
  1011. is in a reasonable state to do the requested operation. If not, an
  1012. exception is generated. Similarly, postconditions (ensure clauses)
  1013. make sure that a method has successfully performed its duties, thus
  1014. "fulfilling its contract" with the caller. Invariants are boolean
  1015. expressions that are checked every time an object method returns back
  1016. to a separate object.
  1017.  
  1018. You can use these ideas in any OO programming language, but usually
  1019. must supply your own assertion mechanisms or rely on programmer
  1020. discipline. In Eiffel, the ideas are integrated into the whole fabric
  1021. of the environment. We find them used by:
  1022.  
  1023. =2D- the exception handling mechanism.
  1024.    (Tracebacks almost always identify the correct culprit code since
  1025.    preconditions almost always denote an error in the calling method,
  1026.    while postconditions denote an error in the called method.)
  1027.  
  1028. =2D- the automatic compilation system.
  1029.    (Assertions can be disabled entirely or selectively by type on a
  1030.    per class basis.)
  1031.  
  1032. =2D- the Eiffel compiler
  1033.    (Invariants, preconditions and postconditions are all inherited in
  1034.    a manner that makes logical sense.)
  1035.    (Assertion expressions are not allowed to produce side effects so
  1036.    they can be omitted without effect.)
  1037.  
  1038. =2D- the automatic documentation tools
  1039.    (Preconditions and postconditions are important statements about
  1040.    what a method does, often effectively describing the "contract"
  1041.    between the caller and callee. Invariants can yield information
  1042.    about legal states an object can have.)
  1043.  
  1044. In the future we expect to see formal methods technology work its way
  1045. into the assertion capability. This will allow progressively more
  1046. powerful constraints to be put into place. In addition, if a
  1047. conjecture by Dr. Meyer bears fruit, the notion of preconditions may
  1048. be extended into an important mechanism for the development of
  1049. parallel programming.
  1050.  
  1051. =2D---------
  1052.  
  1053. LCON:   Please explain and discuss covariance vs. contravariance.
  1054.  
  1055. Consider the following situation: we have two classes PARENT and
  1056. CHILD. CHILD inherits from PARENT, and redefines PARENT's feature
  1057. 'foo'.
  1058.  
  1059.    class PARENT
  1060.       feature
  1061.          foo (arg: A) is ...
  1062.    end
  1063.  
  1064.    class CHILD
  1065.       inherit
  1066.          PARENT redefine foo end
  1067.       feature
  1068.          foo (arg: B) is ...
  1069.    end
  1070.  
  1071. The question is: what restrictions are placed on the type of argument
  1072. to 'foo', that is 'A' and 'B'? (If they are the same, there is no
  1073. problem.)
  1074.  
  1075. Here are two possibilities:
  1076.  
  1077.    (1)  B must be a child of A (the covariant rule - so named because
  1078.         in the child class the types of arguments in redefined
  1079.         routines are children of types in the parent's routine, so the
  1080.         inheritance "varies" for both in the same direction)
  1081.  
  1082.    (2)  B must be a parent of A (the contravariant rule)
  1083.  
  1084. Eiffel uses the covariant rule.
  1085.  
  1086. At first, the contravariant rule seems theoretically appealing. Recall
  1087. that polymorphism means that an attribute can hold not only objects of
  1088. its declared type, but also of any descendant (child) type. Dynamic
  1089. binding means that a feature call on an attribute will trigger the
  1090. corresponding feature call for the *actual* type of the object, which
  1091. may be a descendant of the declared type of the attribute. With
  1092. contravariance, we can assign an object of descendant type to an
  1093. attribute, and all feature calls will still work because the
  1094. descendant can cope with feature arguments at least as general as
  1095. those of the ancestor. In fact, the descendant object is in every way
  1096. also a fully-valid instance of the ancestor object: we are using
  1097. inheritance to implement subtyping.
  1098.  
  1099. However, in programming real-world applications we frequently need to
  1100. specialize related classes jointly.
  1101.  
  1102. Here is an example, where PLOT_3D inherits from PLOT, and
  1103. DATA_SAMPLE_3D inherits from DATA_SAMPLE.
  1104.  
  1105.    class PLOT
  1106.       feature
  1107.          add(arg: DATA_SAMPLE) is ...
  1108.  
  1109.    class PLOT_3D
  1110.       inherit
  1111.          PLOT redefine add end
  1112.       feature
  1113.          add(arg: DATA_SAMPLE_3D) is ...
  1114.  
  1115. This requires the covariant rule, and works well in Eiffel.
  1116.  
  1117. It would fail if we were to put a PLOT_3D object into a PLOT attribute
  1118. and try to add a DATA_SAMPLE to it. It fails because we have used
  1119. inheritance to implement code re-use rather than subtyping, but have
  1120. called a feature of the ancestor class on an object of the descendant
  1121. class as if the descendant object were a true subtype. It is the
  1122. compiler's job to detect and reject this error, to avoid the
  1123. possibility of a run-time type error.
  1124.  
  1125. Here's another example where a real-world situation suggests a
  1126. covariant solution. Herbivores eat plants. Cows are herbivores. Grass
  1127. is a plant. Cows eat grass but not other plants.
  1128.  
  1129.    class HERBIVORE                               class PLANT
  1130.    feature
  1131.       eat(food: PLANT) is ...
  1132.       diet: LIST[PLANT]
  1133.  
  1134.    class COW                                     class GRASS
  1135.    inherit                                       inherit
  1136.       HERBIVORE                                     PLANT
  1137.          redefine eat
  1138.       end
  1139.    feature eat(food: GRASS) is ...
  1140.  
  1141. This does what we want. The compiler must stop us from putting a COW
  1142. object into a HERBIVORE attribute and trying to feed it a PLANT, but
  1143. we shouldn't be trying to do this anyway.
  1144.  
  1145. Also consider the container 'diet'. We are not forced to redefine this
  1146. feature in descendant classes, because with covariant redefinition of
  1147. the argument to 'eat', the feature 'diet' can always contain any
  1148. object that can be eaten (e.g. grass for a cow). (With contravariant
  1149. redefinition of the argument to 'eat', it would be necessary to
  1150. re-open the parent class to make the type of the container 'diet' more
  1151. general).
  1152.  
  1153. To summarise: Real-world problems often lend themselves to covariant
  1154. solutions. Eiffel handles these well. Incorrect programs in the
  1155. presence of covariant argument redefinition can cause run-time type
  1156. errors unless the compiler catches these.
  1157.  
  1158. Sather uses the contravariant rule, but uses separate mechanisms for
  1159. subtyping and code reuse and only allows dynamic binding on true
  1160. subtypes. This seems to make contravariance work well, but it can
  1161. force the Sather programmer to use concrete types when modelling
  1162. covariant problems. Concrete types cannot be further subtyped in
  1163. Sather, so this can reduce the potential for re-use (in Eiffel, any
  1164. type can be further subtyped, but the compiler must check that it is
  1165. used validly).
  1166.  
  1167. =2D---------
  1168.  
  1169. LCAT:   Is it true that there are "holes" in the Eiffel type system?
  1170.  
  1171. No. The design of Eiffel makes it possible to catch all type errors at
  1172. compile time, so that an Eiffel program cannot abort with a run time
  1173. type error.
  1174.  
  1175. However, to catch a class of certain more obscure type errors at
  1176. compile time, the compiler must analyse the way that classes interact
  1177. within the entire system, rather than just looking at each class one
  1178. by one.
  1179.  
  1180. The two main type of errors that cannot be checked easily are:
  1181.  (a) covariant redefinition of routines parameters as in question LDBC.
  1182.  (b) restriction of exports in a descendant class.
  1183.  
  1184. There is a proposal underway that, if accepted, will allow compilers
  1185. to incrementally check this class of errors by looking at classes =
  1186.  
  1187. and not at the whole system every time.
  1188.  
  1189. Because system-wide compile-time validity checking can be complex,
  1190. no compiler available today implements full static type checking. Some =
  1191.  
  1192. insert run-time checks. On the other hand, the cases where system =
  1193.  
  1194. level validity problems can occur are not too frequent so this is not =
  1195.  
  1196. a major annoyance in practice.
  1197.  
  1198. =2D---------
  1199.  
  1200. LTSK:   Is there support for concurrency in Eiffel?
  1201.  
  1202. Eiffel does support concurrency in the latest specification for the
  1203. language as defined by Interactive Software Engineering (ISE).  A
  1204. more complete description on concurrency -- the SCOOP model =
  1205.  
  1206. =2D- can be found in "Object Oriented Software Construction 2ed" by =
  1207.  
  1208. Bertrand Meyer. Papers are also available from ISE web site at =
  1209.  
  1210. http://www.eiffel.com/doc/manuals/technology/concurrency/ .
  1211.  
  1212. Some compilers also support various forms of multithreading =
  1213.  
  1214. independently of SCOOP.
  1215.  
  1216. =2D---------
  1217.  
  1218. LOVL:   Why doesn't Eiffel allow function overloading?
  1219.  
  1220. In Eiffel, no two features of a class may have the same identifier,
  1221. regardless of their respective signatures.  This prevents the use of
  1222. function overloading ("multiple polymorphism"), a common programming
  1223. technique in languages like C++.
  1224.  
  1225. Eiffel is designed to be minimal: it includes exactly the features
  1226. that its designer considered necessary, and nothing else.
  1227.  
  1228. Because Eiffel already supports (single) polymorphism through its
  1229. inheritance system, the only positive thing that function overloading
  1230. buys you is reducing the number of feature names you have to learn.
  1231. This is at the expense of reducing the ability of the compiler to trap
  1232. mistakes (often type errors).
  1233.  
  1234. Readability is also enhanced when overloading is not possible. With
  1235. overloading you would need to consider the type of the arguments as
  1236. well as the type of the target before you can work out which feature
  1237. is called. With multiple inheritance and dynamic binding this is
  1238. awkward for a compiler and error-prone for a human. There is no
  1239. intuitive rule which could be used to disambiguate routine calls where
  1240. there is no "nearest" routine.
  1241.  
  1242. However, in Eiffel it's easy to write one routine with arguments of
  1243. the most general applicable type, then use the assignment attempt
  1244. operator to carry out the appropriate operation according to the
  1245. run-time type of the arguments (thereby explicitly programming the
  1246. disambiguation "rules").
  1247.  
  1248. Having said that, the lack of multiple polymorphism does force us to
  1249. write some common mathematical operations (e.g. matrix math) in an
  1250. awkward way, and forces arithmetic expressions to be treated specially
  1251. (the "arithmetic balancing rule", ETL p385). But no-one has come up
  1252. with a solution which is so simple, elegant and useful that it
  1253. improves the quality of Eiffel as a whole.
  1254.  
  1255. =2D---------
  1256.  
  1257. LPRC:   Why are there no procedural types in Eiffel?
  1258.  
  1259. The notion of allowing a routine to be passed as an argument to a
  1260. routine is in many people's view incompatible with the OO method. The
  1261. definition of object-orientation implies that every operation belongs
  1262. to an object type, so one does not manipulate routines just by
  1263. themselves.
  1264.  
  1265. A possible technique when one feels the need to use a routine argument
  1266. is to write a class and include the routine in it. Then (rather than
  1267. passing a routine argument) pass an object - an instance of this class
  1268. =2D to which the routine can then be applied. This is a more flexible
  1269. approach in the long term. For example, you may later add an "undo"
  1270. routine to your routine - containing class, or an attribute such as
  1271. "time of last execution".
  1272.  
  1273. =2D---------
  1274.  
  1275. LATR:   Why are there no class attributes in Eiffel?
  1276.  
  1277. In Eiffel, the "once" function provides greater functionality in a
  1278. more disciplined way. The body of a "once" function is executed once
  1279. only per system (not per instance of the class), when it is first =
  1280.  
  1281. called. Thereafter, the "once" function returns the same Result =
  1282.  
  1283. without re-executing its body.
  1284.  
  1285. The "once" function can therefore be used to implement a shared
  1286. attribute of reference type (initialized on its first use).
  1287.  
  1288. A "once" function can be included in a mixin class. The shared
  1289. attribute returned by that once function is then available to all
  1290. instances of classes which inherit from the mixin class.
  1291.  
  1292. =2D---------
  1293.  
  1294. LPAR:   How can I call the parent-class version of a redefined routine?
  1295.  
  1296. When an inherited routine is redefined in a child class, is there a
  1297. way for the redefined routine to call the version in the parent class?
  1298.  
  1299. 1) If you are responsible for the design of the parent class, you may
  1300.    anticipate such a need. You may provide multiple versions of the
  1301.    same routine body, with some versions frozen (not redefinable):
  1302.  
  1303.    class PARENT
  1304.    feature foo, frozen parent_foo is
  1305.       do
  1306.          ...
  1307.       end
  1308.    end
  1309.  
  1310.    class CHILD
  1311.    inherit
  1312.       PARENT
  1313.          redefine foo
  1314.       end
  1315.    feature foo is
  1316.       do
  1317.          parent_foo
  1318.          ...
  1319.       end
  1320.    end
  1321.  
  1322. 2) Otherwise, you use repeated inheritance to get two versions of
  1323.    'foo', and redefine one of them:
  1324.  
  1325.    class PARENT
  1326.    feature foo is
  1327.       do
  1328.          ...
  1329.       end
  1330.    end
  1331.  
  1332.    class CHILD
  1333.    inherit
  1334.       PARENT
  1335.          rename foo as parent_foo
  1336.       end
  1337.       PARENT
  1338.          redefine foo
  1339.          select foo  -- (in case of dynamic binding)
  1340.       end
  1341.    feature
  1342.       foo is
  1343.          do
  1344.             parent_foo
  1345.             ...
  1346.          end
  1347.    end
  1348.  
  1349. 3) While usable both these constructs have their limitations and a
  1350. proposal =
  1351.  
  1352.    is under way to replace them with a more direct solution: the new
  1353. reserved
  1354.    word Precursor that allows to call the parent version of a redefined =
  1355. =
  1356.  
  1357.    routine in its body. In the rare cases when a routine has more than
  1358. one =
  1359.  
  1360.    precursor, the call can be qualified to specify which precursor is
  1361. called.
  1362.  
  1363.    Under this proposal, the example becomes:
  1364.  
  1365.     class CHILD
  1366.     inherit
  1367.        PARENT
  1368.           redefine foo =
  1369.  
  1370.        end
  1371.     feature
  1372.        foo is
  1373.           do
  1374.              Precursor -- call previous version
  1375.              ...
  1376.           end
  1377.  
  1378. =2D---------
  1379.  
  1380. LEVC:   Where can I find a comparison between Eiffel and other
  1381. languages?
  1382.  
  1383. In Richard Wiener's book "Software Development Using Eiffel: There can
  1384. be life after C++" (Prentice-Hall, ISBN 0-13-100686-X).
  1385.  
  1386. Ian Joyner's "C++ critique" includes a comparison between C++, Eiffel
  1387. and =
  1388.  
  1389. other languages. It is at the following URL:
  1390. http://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3.html
  1391.  
  1392. You can also find a comparison of Eiffel, C++, Java, and Smalltalk at
  1393. ISE's
  1394. Web site, http://www.eiffel.com/doc/manuals/technology/oo_comparison/
  1395.  
  1396. =2D---------
  1397.  
  1398. LDES:   Are there any destructors in Eiffel?
  1399.  
  1400. Eiffel objects are garbage-collected, so that there is no need for the
  1401. software developer to worry about whether, how and when to "destroy"
  1402. or "free" them in the software text.
  1403.  
  1404. Some implementations offer a "free" procedure for programmers who
  1405. absolutely want to remove an object manually. Such a procedure is "use
  1406. at your own risk" and is not needed in normal Eiffel development.
  1407.  
  1408. Coming back to normal usage, the need may arise to ensure that certain
  1409. operations will automatically take place whenever the garbage
  1410. collector reclaims an object. For example if an Eiffel object
  1411. describing a file becomes unreachable and hence is eventually
  1412. garbage-collected, you may want to ensure that the physical file will
  1413. be closed at that time. Some implementations of Eiffel provide a
  1414. mechanism for that purpose: procedure 'dispose' from the Kernel
  1415. Library class MEMORY.
  1416.  
  1417. Whenever the garbage collector collects an object, it calls 'dispose'
  1418. on that object. The procedure does nothing by default (so that a smart
  1419. GC will of course avoid executing any actual call). But any class may
  1420. inherit from MEMORY and redefine 'dispose' to perform appropriate
  1421. actions, such as closing a file. Such actions are sometimes called
  1422. "finalization". This technique achieves it conveniently.
  1423.  
  1424. Because there is no guarantee as to the order in which the garbage
  1425. collector will reclaim objects that have become unreachable, safe
  1426. redefinitions of 'dispose' should only act on external resources such
  1427. as file descriptors, database elements, window system resources etc,
  1428. not on Eiffel object structures themselves.
  1429.  
  1430.  
  1431.