home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Environments / SmallEiffel 0.3.3 / SmallEiffel PPC / docs / Eiffel FAQ < prev    next >
Encoding:
Text File  |  1996-05-12  |  46.8 KB  |  1,301 lines  |  [TEXT/dosa]

  1.  
  2. *** NEW FAQ MAINTAINER ***
  3.  
  4. This is the last edition of the comp.lang.eiffel FAQ that I will be
  5. posting.
  6.  
  7. The new maintainer is Conrad Taylor (email conradt@sc.comm.mot.com),
  8. who has kindly agreed to take over this task.
  9.  
  10. Thanks to all those who have contributed over the last few years.
  11.  
  12. Regards,
  13. Roger Browne
  14.  
  15. EIFFEL: FREQUENTLY ASKED QUESTIONS
  16. ----------------------------------
  17.  
  18. This question-and-answer list is posted monthly to the Usenet newsgroups 
  19. comp.lang.eiffel, comp.answers and news.answers.
  20.  
  21. Please send corrections, additions and comments to Conrad Taylor 
  22. (conradt@sc.comm.mot.com).
  23.  
  24. This information is abstracted and condensed from the posts of many 
  25. contributors to comp.lang.eiffel, supplemented by information from vendors. 
  26. No guarantees are made regarding its accuracy.
  27.  
  28. This compilation is by Roger Browne. Distribution over the Internet or by 
  29. electronic mail is unrestricted. Other use requires my permission.
  30.  
  31. You can receive the latest copy by anonymous file transfer from:
  32.  
  33.    ftp://ftp.cm.cf.ac.uk/pub/eiffel/eiffel-faq
  34.    ftp://rtfm.mit.edu/pub/usenet/news.answers/eiffel-faq
  35.  
  36. or by sending an email message to archive-server@cm.cf.ac.uk with this
  37. message body:
  38.  
  39.    send Eiffel eiffel-faq
  40.  
  41. ----------
  42.  
  43. CONTENTS
  44.  
  45. Changes since the last posting:
  46.  
  47. Added a what's new section to the FAQ to inform the Eiffel Community
  48. of new software releases of Eiffel related products and services.
  49.  
  50.    N01) New OO/Eiffel book from A-W
  51.    N02) SmallEiffel Eiffel Compiler
  52.  
  53. What's New:
  54.  
  55.    N01) New OO/Eiffel book from A-W
  56.    N02) SmallEiffel Eiffel Compiler
  57.  
  58. Frequently Asked Questions:
  59.  
  60.    Q01) What is Eiffel?
  61.    Q02) Where did Eiffel come from?
  62.    Q03) What Eiffel products are available?
  63.    Q04) Is Eiffel available for free or as shareware?
  64.    Q05) Is there an archive of the comp.lang.eiffel newsgroup?
  65.    Q06) What is Sather? How does it compare to Eiffel?
  66.    Q07) What books are available for learning about Eiffel?
  67.    Q08) Are any magazines or newsletters available concerning Eiffel?
  68.    Q09) Where can I find Eiffel on the World-Wide-Web?
  69.    Q10) Where can I get an Eiffel editor or emacs-mode?
  70.    Q11) What is BON?
  71.    Q12) How large are typical Eiffel executables?
  72.    Q13) Are there standards for the Eiffel language?
  73.    Q14) How fast do Eiffel applications run?
  74.    Q15) Are there any Eiffel user groups?
  75.    Q16) Where can I get Eiffel products and services?
  76.    Q17) Are there any conferences for Eiffel users?
  77.    Q18) Why do most Eiffel implementations compile to C?
  78.  
  79. Language Issues:
  80.  
  81.    L01) What features does Eiffel have?
  82.    L02) What changes have been made to the Eiffel language definition?
  83.    L03) What libraries come with Eiffel?
  84.    L04) What's the big deal about preconditions and postconditions?
  85.    L05) Please explain and discuss covariance vs. contravariance.
  86.    L06) Is it true that there are "holes" in the Eiffel type system?
  87.    L07) Is there support for concurrency in Eiffel?
  88.    L08) Why doesn't Eiffel allow function overloading?
  89.    L09) Why are there no procedural types in Eiffel?
  90.    L10) Why are there no class attributes in Eiffel?
  91.    L11) How can I call the parent-class version of a redefined routine?
  92.    L12) Where can I find a comparison between Eiffel and C++?
  93.    L13) Are there any destructors in Eiffel?
  94.  
  95. N01)   New OO/Eiffel book from A-W
  96.  
  97. This new book entitled "Object-Oriented Software Engineering in Eiffel"
  98. by Jean-Marc Jezequel in the "Addison-Wesley Eiffel in Practice Series"
  99. (Series Editor, Bettrand Meyer).  The book focuses on the use of Eiffel
  100. in the large mission critical systems. 
  101.  
  102. >From the back cover of the book:
  103.  
  104.    An indispensable resource for anyone working with Eiffel, this
  105.    up-to-date  guide  provides  full  coverage of the most recent
  106.    version of the language, focusing on Eiffel's practical use in
  107.    the  development  of large, mission-critical software systems.
  108.  
  109.    In addition to a comprehensive description of Eiffel's  syntax
  110.    and  semantics,  you  will  find in-depth information on style
  111.    guides, analysis & design, design patterns, and validation and
  112.    testing.  Descriptions  and comparisons of available compilers
  113.    and  libraries will help you decide which  Eiffel  tools  best
  114.    fit  your  development needs. The book even includes an Eiffel
  115.    resource guide.
  116.  
  117.    The book's most notable feature is its three large-scale  case
  118.    studies   that  demonstrate  Eiffel  in  action,  illustrating
  119.    implementation techniques and showcasing  Eiffel's  power  and
  120.    effectiveness  in  three  different realms: The MIS world, the
  121.    embedded systems/telecommunications  world,  and  the  numeric
  122.    world.
  123.  
  124.    By reading this book you will not only obtain a  knowledge  of
  125.    the  mechanics  of  Eiffel programming, but you will also come
  126.    away with an understanding of Eiffel's role in  the  field  of
  127.    object-oriented  technology  and  a  sense  of  the language's
  128.    strong potential in large software development.
  129.  
  130. OBTAINING THE BOOK
  131.  
  132. "Object-Oriented  Software  Engineering  in  Eiffel"  by  Jean-Marc
  133. Jezequel  (ISBN 0-201-63381-7, 340+ pages, soft cover) is available
  134. from ISE for US$ 40   plus applicable tax (CA residents, 8.25%) and
  135. shipping  (in the USA, $5   for UPS Ground per book, $15    for UPS
  136. 2nd Day Air. Canada: $15  for UPS Ground per book $25   for UPS 2nd
  137. Day  Air.   Other:  $40  for  UPS  International Air, or Airmail at
  138. cost.).  It is also available in technical bookstores worldwide.
  139.  
  140. You can order  by phone, fax, or email from ISE using the addresses
  141. below.   A comprehensive list of Eiffel-related books and 
  142. documentation is available on ISE's web site:
  143.  
  144.            http://www.eiffel.com/doc/documentation.html
  145.  
  146. Interactive Software Engineering Inc.
  147. 270 Storke Rd, Suite 7, Santa Barbara, CA 93117 USA
  148. Phone (805)685-1006, Fax (805)685-6869
  149.  
  150. ----------
  151.  
  152. N02)   SmallEiffel Eiffel Compiler 
  153.  
  154. SmallEiffel is a free Eiffel compiler distributed under the terms 
  155. of the GNU General Public License as published by the Free Software 
  156. Foundation.
  157.  
  158. SmallEiffel is the fruit of a research project done at
  159. CRIN (Centre de Recherche en Informatique de Nancy).
  160. SmallEiffel is already used (and tested) by students of the 
  161. University Henri Poincare' at Nancy (FRANCE).
  162. We are using Eiffel as a first langage for teaching OOP 
  163. since 1990 (SmallEiffel is used since september 1995).
  164.  
  165. Brief description of SmallEiffel :
  166.  
  167. - Target code is ANSI C. The compiler is fully written in 
  168.   Eiffel (bootstrapped and purifyed).
  169. - SmallEiffel Works on all UNIX-like platform including LINUX.
  170.   Code is easely portable on other platforms (students have 
  171.   already run Smalleiffel on OS2 and DOS).
  172. - SmallEiffel uses a new technology of compilation (we have 
  173.   sent a submission for OOPSLA96).
  174.   SmallEiffel replace a lot of late binding calls by static
  175.   hard calls (84% of calls on the compiler code itself are 
  176.   replaced).
  177.  
  178. Try SmallEiffel by youself.
  179. You can download SmallEiffel at :
  180.  
  181.     ftp://ftp.loria.fr/pub/loria/genielog/SmallEiffel
  182.  
  183. ----------
  184.  
  185. Q01)   What is Eiffel?
  186.  
  187. Eiffel is an advanced object-oriented programming language that emphasizes 
  188. the design and construction of high-quality and reusable software.
  189.  
  190. Eiffel is not a superset or extension of any other language. Eiffel 
  191. strongly encourages OO programming and does not allow dangerous 
  192. practices from previous generation languages although it does interface 
  193. to other languages such as C and C++. Eiffel supports the concept of 
  194. "Design by Contract" to improve software correctness.
  195.  
  196. Beyond the language aspect Eiffel may be viewed as a method of software 
  197. construction. Eiffel is an excellent vehicle for software education, 
  198. including for a first programming course.
  199.  
  200. ----------
  201.  
  202. Q02)   Where did Eiffel come from?
  203.  
  204. Eiffel was created by Bertrand Meyer and developed by his company, 
  205. Interactive Software Engineering (ISE) of Goleta, CA.
  206.  
  207. Dr. Meyer borrowed on his extensive experience with OOP, particularly with 
  208. Simula. He also added in important concepts from his academic work on 
  209. software verification and computer language definition.
  210.  
  211. Eiffel's design addresses many practical concerns that software engineers 
  212. face when creating complex software. Eiffel has evolved continually since 
  213. its conception on September 14, 1985 and its first introduction in 1986.
  214.  
  215. Eiffel is named after Gustave Eiffel, the engineer who designed the Eiffel 
  216. Tower.
  217.  
  218. ----------
  219.  
  220. Q03)   What Eiffel products are available?
  221.  
  222. Commercial Eiffel compilers, libraries and tools are available from the
  223. following vendors and their resellers:
  224.  
  225.   Interactive Software Engineering Inc (ISE Eiffel)
  226.   Tower Technology Corporation (TowerEiffel)
  227.   SIG Computer GmbH (Eiffel/S)
  228.  
  229. The following platforms are supported by one or more of the above vendors:
  230.  
  231.   PC: DOS, OS/2, Windows 3.1, Windows 95, Windows NT, PC Unix 
  232.     (Interactive, SCO, and ESIX), Nextstep, Linux
  233.   OTHER HARDWARE: Sparc (SunOS & Solaris), NeXTStep, HP9000, DEC 5xxx,
  234.     Sony News, DG Aviion, DEC Alpha OSF-1, DEC OpenVMS, RS6000, Pyramid,
  235.     QNX, Silicon Graphics, Macintosh (Motorola & PowerPC)
  236.  
  237. Special offers are available on many of these products for personal or
  238. educational use.
  239.  
  240. Further information about these products is available from the vendors
  241. by email and on the world-wide-web.
  242.  
  243. See Q16 for contact details and websites.
  244.  
  245. ----------
  246.  
  247. Q04)   Is Eiffel available for free or as shareware?
  248.  
  249. ISE's "Free Eiffel for Windows" is a TTY-based, menu-driven Eiffel
  250. interpreter. It runs under Windows 3.1 & Windows NT, and is
  251. available by FTP from SimTel mirror sites in SimTel/win3/eiffel
  252. in files fre3r2d1.zip to fre3r2d6.zip inclusive.
  253.  
  254. SIG Computer's "Eiffel/S 1.3s" is a shareware version of their Eiffel
  255. compiler for DOS, Unix and Macintosh, and is available by FTP from SimTel
  256. mirror sites in SimTel/msdos/eiffel, or from the UWCC archive at
  257. ftp//ftp.cm.cf.ac.uk/pub/Eiffel/SIG/Eiffel-S-1.3/
  258.  
  259. The EON Eiffel compiler is shareware under MS-DOS and Linux, and a beta-
  260. test version is available from ftp://ftp.demon.co.uk/pub/eiffel/eon-eiffel/
  261.  
  262. The following Eiffel archive sites allow anonymous file transfer:
  263.  
  264. ftp://ftp.tu-clausthal.de/pub/atari/languages/eiffel/vici_102.lzh
  265.    The Atari ST interpreter referred to above.
  266.  
  267. ftp://ftp.cm.cf.ac.uk/pub/eiffel
  268.    University of Wales. Contains the latest version of this FAQ, plus the 
  269.    front-end parser (ep) and various public domain classes. To contribute, 
  270.    contact Ted Lawson (ted@cm.cf.ac.uk).
  271.  
  272. ftp://ftp.fu-berlin.de/pub/unix/languages/heron
  273.    This is an Eiffel front-end parser (HERON) in the public domain, 
  274.    created by Burghardt Groeber and Olaf Langmack of the Freie Universitat 
  275.    in Berlin.
  276.  
  277. ftp://ftp.informatik.uni-stuttgart.de/pub/eiffel
  278.    Falkultaet Informatik der Universitaet Stuttgart, Germany. Contains a 
  279.    compiler generator, several encapsulations, a pretty-printer for 
  280.    Eiffel/S, and some utility classes. To contribute, contact Joerg Schulz 
  281.    (schulz@adam.informatik.uni-stuttgart.de).
  282.  
  283. ftp://utarlg.uta.edu/CSE/EIFFEL
  284.    UT-Arlington, USA. Contains some code from Eiffel Outlook back issues.
  285.  
  286. SIG Computer produces a CD-ROM containing most of the available freeware,
  287. shareware and public domain Eiffel material.
  288.  
  289. ----------
  290.  
  291. Q05)   Is there an archive of the comp.lang.eiffel newsgroup?
  292.  
  293. Yes, at the following FTP sites:
  294.  
  295. ftp://wuarchive.wustl.edu/usenet/comp.lang.eiffel/
  296. ftp://gatekeeper.dec.com/pub/plan/eiffel/usenet/ (to September 1992 only)
  297.  
  298. and on the WWW at http://www.cm.cf.ac.uk/CLE/
  299.  
  300. ----------
  301.  
  302. Q06)   What is Sather? How does it compare to Eiffel?
  303.  
  304. Sather is an OO language, originally patterned after Eiffel but now
  305. very different, created at ICSI of Berkeley, CA.
  306.  
  307. Sather does not support Design by Contract, but has some other
  308. interesting features. See the usenet newsgroup comp.lang.sather.
  309.  
  310. ----------
  311.  
  312. Q07)   What books are available for learning about Eiffel?
  313.  
  314. The classic text for learning about Eiffel (and OO programming in general) 
  315. is Dr. Meyer's "Object Oriented Software Construction". Although the 
  316. language has evolved significantly since the book was published, the 
  317. presentation of the basic problems and solutions which motivate the OO
  318. mind set are still quite compelling. This is the book to get if you 
  319. are new to the object-oriented world (Prentice Hall, ISBN 13-629031-0). 
  320. Available in French as "Conception et Programmation par Objets" (90/10 
  321. InterEditions, ISBN 2-7296-0272-0) and in German as "Objektorientiert 
  322. Softwareentwicklung (Hanser, ISBN 3-446-15773-5).
  323.  
  324. Also by Dr. Meyer, "Eiffel: The Language", combines an introduction to 
  325. Eiffel, the language reference, and a good deal of philosophy into its 600 
  326. pages. This is a rigorous and comprehensive book which some readers may 
  327. find heavy going despite Dr. Meyer's clarity of expression. It is the 
  328. definitive language reference, and essential reading for all serious Eiffel 
  329. users. Get the second or later printing (same ISBN), which includes many 
  330. corrections and changes (there is not a second edition, and none is 
  331. currently underway) (Prentice Hall, ISBN 13-247925-7). Available in French 
  332. as "Eiffel, le langage" (94/10 InterEditions, ISBN 2-7296-0525-8).
  333.  
  334. Dr. Meyer and Jean-Marc Nerson have edited "Object-Oriented Applications". 
  335. It includes an introduction to Eiffel technology followed by seven in-depth 
  336. descriptions of large applications written in Eiffel. (Prentice Hall, ISBN 
  337. 13-013798-7)
  338.  
  339. Robert Switzer has written "Eiffel: An Introduction". This is a very clear 
  340. and concise Eiffel primer, with many code fragments and two substantial 
  341. Eiffel applications. (Prentice Hall, ISBN 13-105909-2). Available in French 
  342. as "Introduction a Eiffel" (Masson, ISBN 2-225-84-656-1)
  343.  
  344. ISE distributes a set of 6 video lectures entitled "Object-Oriented 
  345. Software Construction", taught by Bertrand Meyer. These provide an overall 
  346. introduction to the method and use ISE Eiffel 3 to illustrate the concepts.
  347.  
  348. Frieder Monninger's book "Eiffel: Objektorientiertes Programmieren in der 
  349. Praxis" is a very down-to-earth Eiffel handbook in German. (Heise, ISBN 3-
  350. 88229-028-5).
  351.  
  352. Bertrand Meyer's "Reusable Software: The Base Object-Oriented Component 
  353. Libraries" (Prentice Hall, ISBN 0-13-245499-8, about 530 pages) describes 
  354. principles of library design and the taxonomy of fundamental computing 
  355. structures. Serves as a manual for the EiffelBase libraries.
  356.  
  357. Bertrand Meyer's "An Object-Oriented Environment: Principles and 
  358. Application" (Prentice Hall, ISBN 0-13-245507-2, 240 pages) describes the 
  359. ISE EiffelBench environment as well as the "Melting Ice" compilation 
  360. technology and the EiffelBuild GUI application builder.
  361.  
  362. Richard Wiener's "Software Development Using Eiffel: There can be life 
  363. other than C++" (Prentice-Hall, ISBN 0-13-100686-X) is a useful book (full 
  364. of serious code samples) for those with a grounding in another OO language.
  365.  
  366. A book by Kim Walden and Jean-Marc Nerson, "Seamless Object-Oriented 
  367. Software Architecture: Analysis and Design of Reliable Systems", describes 
  368. the BON method in detail (Prentice Hall, ISBN 0-13-031303-3).
  369.  
  370. Pete Thomas and Ray Weedon's "OO Programming in Eiffel" is a very 
  371. comprehensive Eiffel tutorial and textbook, with a solid "Abstract Data 
  372. Type" approach (Addison-Wesley, ISBN 0-201-59387-4).
  373.  
  374. Another book called "OO Programming in Eiffel" is by Robert Rist and
  375. Robert Terwilliger, and is a textbook with an emphasis on design.
  376. (Prentice-Hall, ISBN 0-13-205931-2).
  377.  
  378. Bertrand Meyer's "Object Success" is a manager's guide to object 
  379. orientation, its impact on the corporation and its use for re-engineering
  380. the software process (Prentice-Hall, ISBN 0-13-192833-3).
  381.  
  382. Macmillan publishes John Tyrrell's inexpensive and very approachable
  383. textbook "Eiffel Object-Oriented Programming" (ISBN 0-333-64554-5).
  384.  
  385. There is also a white paper titled 'Eiffel: A Manager's Perspective' which
  386. provides a quick introduction to Eiffel and the benefits it brings to the 
  387. software development process. For a free copy, send your name and postal
  388. address to tower@twr.com
  389.  
  390. ----------
  391.  
  392. Q08)   Are any magazines or newsletters available concerning Eiffel?
  393.  
  394. Eiffel Outlook is a bi-monthly journal devoted to Eiffel, published 
  395. since 1991. Topics cover all areas of interest to the Eiffel community.
  396.  
  397. Subscriptions, trial subscriptions and back issues are available from:
  398.  
  399.    SIG Computer in Germany
  400.    Everything Eiffel in the UK & France
  401.    Simon Parker in Ireland
  402.    IMSL in Japan
  403.    Enea Data in Sweden
  404.    Tower Technology in the USA and all other countries
  405.  
  406. Details are available at 
  407. <http://www.cm.cf.ac.uk/Tower/Outlook.html> or by sending email to 
  408. <outlook@twr.com>.
  409.  
  410. ISE produces a newsletter "Eiffel World". Subscriptions are free (email 
  411. your request to info@eiffel.com). Individual copies are available from:
  412.  
  413.    Cybertech in Argentina
  414.    Class Technology in Australia
  415.    Jay-Kell Technologies in Canada
  416.    SOL in France
  417.    SIG Computer in Germany
  418.    Eiffel Ireland in Ireland
  419.    Etnoteam in Italy
  420.    Information & Math Science Lab or Software Research Associates in Japan
  421.    Chromasoft in Mexico
  422.    Science OO Products & Systems in the Netherlands
  423.    Objective Methods in New Zealand
  424.    Ruperez & Associates in Spain
  425.    Enea Data in Sweden
  426.    Abstraction in Switzerland
  427.    Everything Eiffel in the UK
  428.  
  429. If you're interested in Software Design Patterns you may like to subscribe 
  430. to the Eiffel Patterns mailing list. Send email to:
  431.  
  432.    e-patterns-request@cbr.dit.csiro.au
  433.  
  434. ----------
  435.  
  436. Q09)   Where can I find Eiffel on the World-Wide-Web?
  437.  
  438. An Eiffel home page is held on the University of Wales College of Cardiff's 
  439. server at http://www.cm.cf.ac.uk/CLE/. Vendor websites are listed in Q16.
  440.  
  441. ----------
  442.  
  443. Q10)   Where can I get an Eiffel editor or emacs-mode?
  444.  
  445. Franck Arnaud's Eiffel extension to the Windows/WindowsNT programmers 
  446. editor Codewright from Premia allows you to see Eiffel code in colour, has 
  447. smart indenting and a few templates. Available by anonymous FTP from
  448. ftp://ftp.cm.cf.ac.uk/pub/eiffel/tools/cweiffel.zip
  449.  
  450. The WINEDIT shareware programmer's editor offers colour syntax 
  451. highlighting, works with Eiffel/S under MS-Windows, and is available from:
  452. ftp://src.doc.ic.ac.uk/computing/systems/ibmpc/windows3/programr/we-30d.zip
  453. and ftp://gatekeeper.dec.com/.f/micro/msdos/win3/programr/we-30d.zip
  454.  
  455. Alan Philips' free Programmers File Editor also works with Eiffel/S under 
  456. MS-Windows, has templates but not syntax highlighting, available from 
  457. ftp://ftp.demon.co.uk/pub/ibmpc/windows/editors/pfe0507.zip
  458.  
  459. Tower Technology Corporation supplies an Eiffel 3 emacs mode that supports 
  460. syntax-directed highlighting, auto-indentation and is easily customized for 
  461. font use, color and indentation amounts. It comes as part of the 
  462. TowerEiffel system, but is also available free for anyone who requests it. 
  463. Send email to elisp@atlanta.twr.com to get the latest version.
  464.  
  465. ----------
  466.  
  467. Q11)   What is BON?
  468.  
  469. BON ("Business Object Notation") is a method for high-level analysis and 
  470. design, offering a seamless reversible transition to an Eiffel 
  471. implementation. The method emphasizes Design by Contract and systematic 
  472. development.
  473.  
  474. ISE supports BON with its EiffelCASE tool.
  475.  
  476. ----------
  477.  
  478. Q12)   How large are typical Eiffel executables?
  479.  
  480. (How large are typical C executables?)
  481.  
  482. Seriously, Eiffel does impose a minimum size which is large since even 
  483. trivial Eiffel applications bring in a lot of classes. So, a simple program 
  484. like "Hello World" will create a relatively large executable.
  485.  
  486. Interestingly, Eiffel applications seem to grow less rapidly as new 
  487. capabilities are added. Reuse does help out tremendously in this regard. A 
  488. good Eiffel compiler allows large applications to be smaller than equally 
  489. functional applications written in C.
  490.  
  491. Note that leaving assertion checking in the code increases the size of 
  492. applications a lot. Despite this, many of us prefer that they remain 
  493. throughout development. Some even deliver a PRECONDITIONS-only version of 
  494. their applications to their early customers.
  495.  
  496. ----------
  497.  
  498. Q13)   Are there standards for the Eiffel language?
  499.  
  500. The definition of the Eiffel language is in the public domain. This 
  501. definition is controlled by NICE, the Non-profit International Consortium 
  502. for Eiffel. This means that anyone or any company may create a compiler, 
  503. interpreter, or whatever having to do with Eiffel. NICE reserves the right 
  504. to validate that any such tool conforms to the current definition of the 
  505. Eiffel language before it can be distributed with the Eiffel trademark. 
  506. (i.e. advertised as an "Eiffel" compiler.)
  507.  
  508. The Eiffel trademark is owned and controlled by NICE. NICE is using 
  509. Bertrand Meyer's book, "Eiffel: The Language" (2nd Printing), as the 
  510. initial definition of the language.
  511.  
  512. The NICE board of directors for 1995 consists of Christine Mingins (chair), 
  513. Bertrand Meyer (treasurer), Simon Parker (secretary) and Paul Johnson.
  514.  
  515. In June 1995 NICE published the first version (called "Vintage 95") of the
  516. Eiffel Library Standard. Those parts of an Eiffel application that use
  517. only the standard classes and features should run with minimal change on any
  518. compiler supporting ELS-95.
  519.  
  520. NICE (Nonprofit International Consortium for Eiffel)
  521. 45 Hazelwood
  522. Shankill
  523. Co Dublin
  524. Republic of Ireland
  525. TEL: +353 1 282 3487
  526. email: nice@atlanta.twr.com
  527.  
  528. ----------
  529.  
  530. Q14)   How fast do Eiffel applications run?
  531.  
  532. Early versions of Eiffel were slow. Recent implementations have improved 
  533. dramatically. However, to achieve maximum performance under any Eiffel 
  534. implementation, run-time assertion monitoring must be switched off.
  535.  
  536. It's hard to generalise, but compared to C++, simple computation-intensive 
  537. applications will run perhaps 15% slower. Large applications are often 
  538. dominated by memory management rather than computation. ISE recently 
  539. demonstrated that by simply adding a call to the garbage collector's "full-
  540. collect" routine at a time when there were known to be few live objects, 
  541. performance became dramatically faster than a corresponding C++ version.
  542.  
  543. ----------
  544.  
  545. Q15)   Are there any Eiffel user groups?
  546.  
  547. International Eiffel User Group
  548. Darcy Harrison - Attention: IEUG
  549. ISE Inc.
  550. 270 Storke Road, Suite 7
  551. Goleta, CA 93117, USA
  552. TEL (805) 685-1006
  553. FAX (805) 685-6869
  554. darcyh@eiffel.com
  555.  
  556. UK & Ireland Eiffel Interest Group (currently inactive)
  557.  
  558. GUE, Groupe des Utilisateurs Eiffel (France)
  559. Jean-Marc Nerson
  560. 104 rue Castagnary, 75015 Paris
  561. TEL +33 1 45 32 58 80
  562. FAX +33 1 44 32 58 81
  563. marc@eiffel.fr
  564. (meets every 2 months or so)
  565.  
  566. TowerEiffel User's Group
  567. Private cyberspace mailing list for supported Tower customers with meetings 
  568. coinciding with major OO Conferences and Events.
  569.  
  570. ----------
  571.  
  572. Q16)   Where can I get Eiffel products and services?
  573.  
  574. These vendors, resellers and suppliers of Eiffel training and
  575. consultancy are listed in alphabetical order:
  576.  
  577. Abstraction
  578. 18 Faubourg de l'Hopital
  579. 2000 Neuchatel, Switzerland
  580. phone +41.38.25.04.93
  581. fax +41.38.259.857
  582. email silberstein@clients.switch.ch
  583.  
  584. Class Technology Pty. Ltd.
  585. PO Box 2674
  586. North Sydney NSW 2060, Australia
  587. TEL +61 2 9922 7222
  588. FAX +61 2 9922 7703
  589. email info@class.com.au
  590.  
  591. Cromasoft SA de CV
  592. Mazatlan 161
  593. Col Condesa, 06140 Mexico
  594. TEL +52 5 286 82 13
  595. FAX +52 5 286 80 57
  596. email claudio@croma.sunmexico.sun.com
  597.  
  598. Cybertech
  599. Systens Integration for CIM
  600. Suarez 1281, Third Floor,Apt.A
  601. CP-1288 Buenos Aires, Argentina
  602. TEL +54 1 28 1950
  603. FAX +54 1 322 1071 or 963 0070
  604.  
  605. Eiffel Iberica
  606. Aptdo 1646, 20080 San Sebastian, Spain
  607. TEL +34 943 471906
  608. email ean@sc.ehu.es
  609.  
  610. Eiffel Ireland
  611. 45 Hazelwood
  612. Shankill
  613. Co Dublin, Ireland
  614. TEL +353 1 282 3487
  615. email sparker@eiffel.ie
  616. www http://www.eiffel.ie/Eiffel/
  617.  
  618. Enea Data
  619. Box 232, Nytorpsvagen 5
  620. S-183 23 Taby, Sweden
  621. TEL +46 8 792 25 00
  622. FAX +46 8 768 43 88
  623. email eiffel@enea.se
  624.  
  625. Eon Software
  626. 19 Stapleton Road
  627. Heddington, Oxford OX3 7LX, UK
  628. TEL +44 865 741452
  629. email ian@eonsw.demon.co.uk
  630.  
  631. EtnoTeam
  632. Via Adelaide Bono Cairoli 34
  633. 20217 Milano, Italy
  634. TEL +39 2 261621
  635. FAX +39 2 26110755
  636. email sales@etnomi.it
  637.  
  638. Everything Eiffel
  639. 6 Bambers Walk
  640. Wesham PR4 3DG
  641. England
  642. TEL & FAX +44 1772 687525
  643. email rogerb@eiffel.demon.co.uk
  644.  
  645. Feinarbeit
  646. Altenbraker Strasse 4
  647. D-12053 Berlin, Germany
  648. tel +49 30 6215827
  649. fax +49 30 6215863
  650. email langmack@netmbx.netmbx.de
  651.  
  652. Information and Math Science Lab Inc.
  653. 2-43-1, Ikebukuro, Toshima-ku
  654. Tokyo 171, Japan
  655. email fushimi@idas.imslab.co.jp
  656. TEL +81 3 3590 5211
  657. FAX +81 3 3590 5353
  658.  
  659. Interactive Software Engineering, Inc
  660. 270 Storke Road, Suite 7
  661. Goleta, CA 93117
  662. TEL 805-685-1006
  663. FAX 805-685-6869
  664. email info@eiffel.com
  665. www http://outback.eiffel.com/
  666.  
  667. Jay-Kell Technologies, Inc.
  668. 48 Lakeshore Road, Suite #1
  669. Pointe Claire, Quebec
  670. Canada H9S 4H4
  671. TEL +51 4 630 1005
  672. FAX +51 4 630 1456
  673.  
  674. Objectif Concept
  675. Passage Cour-Robert 5
  676. CH 1700 Fribourg, Switzerland
  677. TEL +41 37 232977
  678. FAX +41 37 464889
  679.  
  680. Objective Methods Ltd
  681. PO Box 17356 (77 Chamberlain Rd)
  682. Karori, Wellington, New Zealand
  683. TEL +64 4 476 9499
  684. FAX +64 4 476 9237 or 8772
  685. email dkenny@swell.actrix.gen.nz
  686.  
  687. Ruperez & Associates
  688. c/San Bartolome 21, 5F
  689. 20001 San Sebastian, Spain
  690. TEL +34 43 461801
  691. email jipferur@si.ehu.es
  692.  
  693. SIG Computer GmbH
  694. zu den Bettern 4
  695. D 35619 Braunfels, Germany
  696. TEL +49 6472 2096, FAX +49 6472 7213
  697. email eiffel@eiffel.de
  698. (cyrillic email eiffel@sigcomp.msk.su)
  699. www http://www.sigco.com/
  700.  
  701. Software Research Associates
  702. 1-1-1 Hirakawo-Cho
  703. Chiyoda-ku Tokyo 102, Japan
  704. TEL +81 3 3234 8789
  705. FAX +81 3 3262 9719
  706. email sugita@sra.co.jp
  707.  
  708. SOL
  709. 104 rue Castagnary
  710. 75015 Paris, France
  711. TEL +33 1 45 32 58 80
  712. FAX +33 1 45 32 58 81
  713. email eiffel@eiffel.fr
  714.  
  715. SOOPS
  716. Sarphatistraat 133
  717. NL-1018 GC Amsterdam, The Netherlands
  718. TEL +31 20 525 6644
  719. FAX +31 20 624 6392
  720. email A731CISK@HASARA11.BITNET
  721.  
  722. Sritech Information Technology
  723. 744/51 2nd Floor
  724. 10 Mian Road, 4th Block
  725. Jayanagar, Bangalore, India 560011
  726. TEL +91 812 640661
  727. FAX +91 812 643608
  728.  
  729. Tower Technology Corporation
  730. 1501 Koenig Lane
  731. Austin, TX 78756 USA
  732. TEL 512-452-9455
  733. FAX 512-452-1721
  734. email: tower@twr.com
  735. www http://www.twr.com/
  736.  
  737. ZumaSoft
  738. 6235 Paseo Canyon Drive
  739. Malibu, California 90265, USA
  740. TEL & FAX +1 310 457-6263
  741. email tstevens@netcom.com
  742.  
  743. ----------
  744.  
  745. Q17)   Are there any conferences for Eiffel users?
  746.  
  747. The conferences listed here are not just for Eiffel. Eiffel shares the 
  748. spotlight with other OO languages including C++ and Smalltalk.
  749.  
  750. Feb 26 - 29 1996
  751. TOOLS Europe, Paris France
  752.  
  753. Jul 29 - Aug 2 1996
  754. TOOLS USA, Santa Barbara California
  755.  
  756. TOOLS is the major international conference devoted to the applications of 
  757. OO technology. Other events, such as Eiffel User Group meetings or NICE 
  758. meetings are often held in conjunction with TOOLS.
  759.  
  760. TOOLS Conferences
  761. PO Box 6863, Santa Barbara, CA 93160, USA
  762. TEL (805) 685 1006, FAX (805) 685 6869
  763. email tools@tools.com
  764.  
  765. ----------
  766.  
  767. Q18)   Why do most Eiffel implementations compile to C?
  768.  
  769. By using C as a target language, an Eiffel implementor can:
  770.  
  771. -  bring Eiffel to the marketplace faster and at lower cost
  772. -  port their implementation more easily to other platforms
  773. -  take advantage of optimisation provided by the C compiler
  774.  
  775. Much of the technology that makes Eiffel relatively simple to use also 
  776. makes it more difficult to implement (an Eiffel-to-C compiler is perhaps 4 
  777. to 5 times more difficult to create than a native Pascal compiler).
  778.  
  779. Compiling Eiffel to C seems to work well under Unix. C is sometimes thought 
  780. of as the native code of Unix.
  781.  
  782. On the other hand, C is not universal on other platforms, and the Eiffel 
  783. purchaser may need to buy a C compiler as well, and possibly replace it if 
  784. the supported C compilers change with new versions of the Eiffel compiler.
  785.  
  786. With a native-code compiler, you'd get somewhat better throughput and the 
  787. potential for smaller executables and slightly better performance. You'd 
  788. also get a higher price and an even longer wait for Eiffel to show up on 
  789. other than the leading market share machines.
  790.  
  791. ----------
  792.  
  793. L01)   What features does Eiffel have?
  794.  
  795. Eiffel is a pure object-oriented language. Its modularity is based on 
  796. classes. It stresses reliability, and facilitates design by contract. It 
  797. brings design and programming closer together. It encourages the re-use of 
  798. software components.
  799.  
  800. Eiffel offers classes, multiple inheritance, polymorphism, static typing 
  801. and dynamic binding, genericity (constrained and unconstrained), a 
  802. disciplined exception mechanism, systematic use of assertions to promote 
  803. programming by contract, and deferred classes for high-level design and 
  804. analysis.
  805.  
  806. Eiffel has an elegant design and programming style, and is easy to learn.
  807.  
  808. An overview is available at http://www.eiffel.com/manuals/language/intro/
  809.  
  810. ----------
  811.  
  812. L02)   What changes have been made to the Eiffel language definition?
  813.  
  814. Eiffel is still a relatively new language, and there have been a number of 
  815. changes to its definition. Here is a summary of the major changes:
  816.  
  817. 1. Changes between the publication of "Object-Oriented Software 
  818.    Construction" in 1988, and the release of Eiffel 2.3:
  819.  
  820.    - Constrained genericity enables a generic class to restrict its
  821.      generic parameters to the descendants of a given class
  822.  
  823.    - The indexing clause allows information about a class to be
  824.      recorded for extraction by archival, browsing and query tools
  825.  
  826.    - The assignment attempt operator "?=" provides a way to make
  827.      type-safe assignments going against the inheritance hierarchy
  828.  
  829.    - User-defined infix and prefix operator features
  830.  
  831.    - Expanded types support composite objects without dynamic
  832.      allocation, and with value semantics
  833.  
  834.    - The obsolete clause for smooth library evolution
  835.  
  836.    - The unique keyword for implicitly-assigned integer codes
  837.  
  838.    - The multi-branch instruction (similar to a case statement)
  839.  
  840.    - The boolean operator for implication ("implies")
  841.  
  842. 2. Changes with the introduction of Eiffel Version 3:
  843.  
  844.    - The feature adaptation subclause must now be terminated with "end"
  845.  
  846.    - Semicolons as instruction separators are optional
  847.  
  848.    - Groups of features are bracketed by a feature clause. All features
  849.      are exported unless the feature clause specifies a restriction.
  850.      The repeat subclause is no longer needed, because inherited
  851.      features keep the original export status they had in the parent
  852.      unless they are redefined, or are the subject of an export
  853.      subclause in the feature adaptation clause.
  854.  
  855.    - Preconditions can only be replaced by weaker ones, postconditions
  856.      can only be replaced by stronger ones. This is now enforced by the
  857.      language through the use of "require else" in preconditions and
  858.      "ensure then" in postconditions.
  859.  
  860.    - Ambiguities in repeated inheritance are resolved by a select
  861.      clause.
  862.  
  863.    - A feature can no longer be replicated and redefined in the same
  864.      feature adaptation clause, however the same effect can be achieved
  865.      through repeated inheritance
  866.  
  867.    - Two or more features may be defined at the same time (e.g. "f1, f2
  868.      is...").
  869.  
  870.    - The keyword "frozen" before a feature name prohibits redefinition
  871.      of the feature in descendants
  872.  
  873.    - In an anchored declaration, the anchor may now also be a formal
  874.      argument of the enclosing routine
  875.  
  876.    - A class may have zero, one or more creation procedures, designated
  877.      with the "creation" keyword. A new creation syntax using the "!!"
  878.      symbol allows the appropriate creation procedure to be specified.
  879.      It is also possible to directly create an object of any type which
  880.      conforms to the entity to which it is being attached.
  881.  
  882.    - The meaning of dot notation has been made more uniform, and
  883.      alternative constructs have been provided for the special
  884.      language-defined features that previously used dot notation:
  885.          x.Create   is now  !! x
  886.          y.Clone(x) is now  y := clone(x)
  887.          x.Forget   is now  x := Void
  888.          x.Void     is now  x = Void
  889.          x.Equal(y) is now  equal(x, y)
  890.  
  891.    - Manifest arrays can be specified, for example
  892.          <<"Jan", "Feb", "Mar">>
  893.      which also provides a way to pass a variable number of arguments
  894.      to a routine.
  895.  
  896.    - The command-line parameters are made available to the creation
  897.      procedure of the root class as an array of strings.
  898.  
  899.    - A default rescue procedure called default_rescue may be defined
  900.      and inherited.
  901.  
  902.    - A class may be declared to be an expanded class, in which case any
  903.      type based on that class will be expanded.
  904.  
  905.    - An object may no longer contain a reference to an expanded object
  906.      that is a sub-object of another object. Instead, upon assignment
  907.      of an expanded object to a non-expanded object, the expanded
  908.      object will be cloned, and a reference to the newly-cloned object
  909.      will be stored in the non-expanded object.
  910.  
  911.    - The operator "div" has been replaced by "//", and the operator
  912.      "mod" has been replaced by "\\".
  913.  
  914. 3. Changes between first and second printings of "Eiffel: The Language"
  915.  
  916.    - New basic types INTEGER_REF, REAL_REF, CHARACTER_REF and
  917.      BOOLEAN_REF etc have been introduced to provide non-expanded basic
  918.      types.
  919.  
  920.    - Introduction of the POINTER type to enable external references to
  921.      be passed around in Eiffel programs.
  922.  
  923.    - Calls from Eiffel to external routines no longer implicitly pass
  924.      the current object as the first parameter.
  925.  
  926.    There are many other (more minor) changes, which Neil Wilson has
  927.    summarized in ftp.cm.cf.ac.uk:/pub/eiffel/Docs in both Microsoft Rich
  928.    Text Format and ASCII.
  929.  
  930. ----------
  931.  
  932. L03)   What libraries come with Eiffel?
  933.  
  934. All vendors aim to support the Eiffel Library Standard kernel classes.
  935.  
  936. In addition, extensive library classes are supplied with the compilers
  937. including data structures, graphics, lexical analysis and parsing,
  938. IO, persistence, formatting and more.
  939.  
  940. Contact the vendors for further details.
  941.  
  942. ----------
  943.  
  944. L04)   What's the big deal about preconditions and postconditions?
  945.  
  946. The big deal is that it supports programming by contract. For example, 
  947. preconditions (require clauses) are simple boolean statements that are used 
  948. to check that the input arguments are valid and that the object is in a 
  949. reasonable state to do the requested operation. If not, an exception is 
  950. generated. Similarly, postconditions (ensure clauses) make sure that a 
  951. method has successfully performed its duties, thus "fulfilling its 
  952. contract" with the caller. Invariants are boolean expressions that are 
  953. checked every time an object method returns back to a separate object.
  954.  
  955. You can use these ideas in any OO programming language, but 
  956. usually must supply your own assertion mechanisms or rely on programmer 
  957. discipline. In Eiffel, the ideas are integrated into the whole fabric of 
  958. the environment. We find them used by:
  959.  
  960. -- the exception handling mechanism.
  961.    (Tracebacks almost always identify the correct culprit code since 
  962.    preconditions almost always denote an error in the calling method, while 
  963.    postconditions denote an error in the called method.)
  964.  
  965. -- the automatic compilation system.
  966.    (Assertions can be disabled entirely or selectively by type on a per 
  967.    class basis.)
  968.  
  969. -- the Eiffel compiler
  970.    (Invariants, preconditions and postconditions are all inherited in a 
  971.    manner that makes logical sense.)
  972.    (Assertion expressions are not allowed to produce side effects so they 
  973.    can be omitted without effect.)
  974.  
  975. -- the automatic documentation tools
  976.    (Preconditions and postconditions are important statements about what a 
  977.    method does, often effectively describing the "contract" between the 
  978.    caller and callee. Invariants can yield information about legal states 
  979.    an object can have.)
  980.  
  981. In the future we expect to see formal methods technology work its way into 
  982. the assertion capability. This will allow progressively more powerful 
  983. constraints to be put into place. In addition, if a conjecture by Dr. Meyer 
  984. bears fruit, the notion of preconditions may be extended into an important 
  985. mechanism for the development of parallel programming.
  986.  
  987. ----------
  988.  
  989. L05)   Please explain and discuss covariance vs. contravariance.
  990.  
  991. Consider the following situation: we have two classes PARENT and CHILD. 
  992. CHILD inherits from PARENT, and redefines PARENT's feature 'foo'.
  993.  
  994.    class PARENT
  995.       feature
  996.          foo (arg: A) is ...
  997.    end
  998.  
  999.    class CHILD
  1000.       inherit
  1001.          PARENT redefine foo end
  1002.       feature
  1003.          foo (arg: B) is ...
  1004.    end
  1005.  
  1006. The question is: what restrictions are placed on the type of argument to 
  1007. 'foo', that is 'A' and 'B'? (If they are the same, there is no problem.)
  1008.  
  1009. Here are two possibilities:
  1010.  
  1011.    (1)  B must be a child of A (the covariant rule - so named because in 
  1012.         the child class the types of arguments in redefined routines are 
  1013.         children of types in the parent's routine, so the inheritance 
  1014.         "varies" for both in the same direction)
  1015.  
  1016.    (2)  B must be a parent of A (the contravariant rule)
  1017.  
  1018. Eiffel uses the covariant rule.
  1019.  
  1020. At first, the contravariant rule seems theoretically appealing. Recall that 
  1021. polymorphism means that an attribute can hold not only objects of its 
  1022. declared type, but also of any descendant (child) type. Dynamic binding 
  1023. means that a feature call on an attribute will trigger the corresponding 
  1024. feature call for the *actual* type of the object, which may be a descendant 
  1025. of the declared type of the attribute. With contravariance, we can assign 
  1026. an object of descendant type to an attribute, and all feature calls will 
  1027. still work because the descendant can cope with feature arguments at least 
  1028. as general as those of the ancestor. In fact, the descendant object is in 
  1029. every way also a fully-valid instance of the ancestor object: we are using 
  1030. inheritance to implement subtyping.
  1031.  
  1032. However, in programming real-world applications we frequently need to 
  1033. specialize related classes jointly.
  1034.  
  1035. Here is an example, where PLOT_3D inherits from PLOT, and DATA_SAMPLE_3D 
  1036. inherits from DATA_SAMPLE.
  1037.  
  1038.    class PLOT
  1039.       feature
  1040.          add(arg: DATA_SAMPLE) is ...
  1041.  
  1042.    class PLOT_3D
  1043.       inherit
  1044.          PLOT redefine add end
  1045.       feature
  1046.          add(arg: DATA_SAMPLE_3D) is ...
  1047.  
  1048. This requires the covariant rule, and works well in Eiffel.
  1049.  
  1050. It would fail if we were to put a PLOT_3D object into a PLOT attribute and 
  1051. try to add a DATA_SAMPLE to it. It fails because we have used inheritance 
  1052. to implement code re-use rather than subtyping, but have called a feature 
  1053. of the ancestor class on an object of the descendant class as if the 
  1054. descendant object were a true subtype. It is the compiler's job to detect 
  1055. and reject this error, to avoid the possibility of a run-time type error.
  1056.  
  1057. Here's another example where a real-world situation suggests a covariant 
  1058. solution. Herbivores eat plants. Cows are herbivores. Grass is a plant. 
  1059. Cows eat grass but not other plants.
  1060.  
  1061.    class HERBIVORE                               class PLANT
  1062.    feature
  1063.       eat(food: PLANT) is ...
  1064.       diet: LIST[PLANT]
  1065.  
  1066.    class COW                                     class GRASS
  1067.    inherit                                       inherit
  1068.       HERBIVORE                                     PLANT
  1069.          redefine eat
  1070.       end
  1071.    feature eat(food: GRASS) is ...
  1072.  
  1073. This does what we want. The compiler must stop us from putting a COW object 
  1074. into a HERBIVORE attribute and trying to feed it a PLANT, but we shouldn't 
  1075. be trying to do this anyway.
  1076.  
  1077. Also consider the container 'diet'. We are not forced to redefine this 
  1078. feature in descendant classes, because with covariant redefinition of the 
  1079. argument to 'eat', the feature 'diet' can always contain any object that 
  1080. can be eaten (e.g. grass for a cow). (With contravariant redefinition of 
  1081. the argument to 'eat', it would be necessary to re-open the parent class to 
  1082. make the type of the container 'diet' more general).
  1083.  
  1084. To summarise: Real-world problems often lend themselves to covariant 
  1085. solutions. Eiffel handles these well. Incorrect programs in the presence of 
  1086. covariant argument redefinition can cause run-time type errors unless the 
  1087. compiler catches these.
  1088.  
  1089. Sather uses the contravariant rule, but uses separate mechanisms for 
  1090. subtyping and code reuse and only allows dynamic binding on true subtypes. 
  1091. This seems to make contravariance work well, but it can force the Sather 
  1092. programmer to use concrete types when modelling covariant problems. 
  1093. Concrete types cannot be further subtyped in Sather, so this can reduce the 
  1094. potential for re-use (in Eiffel, any type can be further subtyped, but the 
  1095. compiler must check that it is used validly).
  1096.  
  1097. ----------
  1098.  
  1099. L06)   Is it true that there are "holes" in the Eiffel type system?
  1100.  
  1101. No. The design of Eiffel makes it possible to catch all type errors at 
  1102. compile time, so that an Eiffel program cannot abort with a run time type 
  1103. error.
  1104.  
  1105. However, to catch the more obscure type errors at compile time, the 
  1106. compiler must analyse the way that classes interact within the entire 
  1107. system, rather than just looking at each class one by one. This type of 
  1108. system-wide checking is also necessary for many compiler optimisations.
  1109.  
  1110. Because system-wide compile-time validity checking can be complex, some 
  1111. compilers insert run-time traps for these errors instead, and some may fail 
  1112. to correctly trap these errors. Ask your Eiffel compiler vendor how they 
  1113. handle these type problems.
  1114.  
  1115. ----------
  1116.  
  1117. L07)   Is there support for concurrency in Eiffel?
  1118.  
  1119. Eiffel does not yet support concurrency; neither do current commercial 
  1120. compilers. However, work on concurrency for Eiffel is a hot research
  1121. topic.
  1122.  
  1123. For four articles on concurrency facilities for Eiffel, including Bertrand 
  1124. Meyer's article "Systematic Concurrent Object-Oriented Programming", see 
  1125. the September 1993 "Communications of the ACM" (Vol. 36, Number 9).
  1126.  
  1127. ----------
  1128.  
  1129. L08)   Why doesn't Eiffel allow function overloading?
  1130.  
  1131. In Eiffel, no two features of a class may have the same identifier, 
  1132. regardless of their respective signatures.  The prevents the use of 
  1133. function overloading ("multiple polymorphism"), a common programming 
  1134. technique in languages like C++.
  1135.  
  1136. Eiffel is designed to be minimal: it includes exactly the features that its 
  1137. designer considered necessary, and nothing else.
  1138.  
  1139. Because Eiffel already supports (single) polymorphism through its 
  1140. inheritance system, the only positive thing that function overloading buys 
  1141. you is reducing the number of feature names you have to learn. This is at 
  1142. the expense of reducing the ability of the compiler to trap mistakes (often 
  1143. type errors).
  1144.  
  1145. Readability is also enhanced when overloading is not possible. With 
  1146. overloading you would need to consider the type of the arguments as well as 
  1147. the type of the target before you can work out which feature is called. 
  1148. With multiple inheritance and dynamic binding this is awkward for a 
  1149. compiler and error-prone for a human. There is no intuitive rule which 
  1150. could be used to disambiguate routine calls where there is no "nearest" 
  1151. routine.
  1152.  
  1153. However, in Eiffel it's easy to write one routine with arguments of the 
  1154. most general applicable type, then use the assignment attempt operator to 
  1155. carry out the appropriate operation according to the run-time type of the 
  1156. arguments (thereby explicitly programming the disambiguation "rules").
  1157.  
  1158. Having said that, the lack of multiple polymorphism does force us to write 
  1159. some common mathematical operations (e.g. matrix math) in an awkward way, 
  1160. and forces arithmetic expressions to be treated specially (the "arithmetic 
  1161. balancing rule", ETL p385). But no-one has come up with a solution which is 
  1162. so simple, elegant and useful that it improves the quality of Eiffel as a 
  1163. whole.
  1164.  
  1165. ----------
  1166.  
  1167. L09)   Why are there no procedural types in Eiffel?
  1168.  
  1169. The notion of allowing a routine to be passed as an argument to a routine 
  1170. is in many people's view incompatible with the OO method. The definition 
  1171. of object-orientation implies that every operation belongs to an object 
  1172. type, so one does not manipulate routines just by themselves.
  1173.  
  1174. A possible technique when one feels the need to use a routine argument is 
  1175. to write a class and include the routine in it. Then (rather than passing a 
  1176. routine argument) pass an object - an instance of this class - to which the 
  1177. routine can then be applied. This is a more flexible approach in the long 
  1178. term. For example, you may later add an "undo" routine to your routine-
  1179. containing class, or an attribute such as "time of last execution".
  1180.  
  1181. ----------
  1182.  
  1183. L10)   Why are there no class attributes in Eiffel?
  1184.  
  1185. In Eiffel, the "once" function provides greater functionality in a more 
  1186. disciplined way. The body of a "once" function is executed once only, when 
  1187. it is first called. Thereafter, the "once" function returns the same Result 
  1188. without re-executing its body.
  1189.  
  1190. The "once" function can therefore be used to implement a shared attribute
  1191. of reference type (initialized on its first use).
  1192.  
  1193. A "once" function can be included in a mixin class. The shared attribute
  1194. returned by that once function is then available to all instances of
  1195. classes which inherit from the mixin class.
  1196.  
  1197. ----------
  1198.  
  1199. L11)   How can I call the parent-class version of a redefined routine?
  1200.  
  1201. When an inherited routine is redefined in a child class, is there a way for 
  1202. the redefined routine to call the version in the parent class?
  1203.  
  1204. 1) If you are responsible for the design of the parent class, you may
  1205.    anticipate such a need. You may provide multiple versions of the same
  1206.    routine body, with some versions frozen (not redefinable):
  1207.  
  1208.    class PARENT
  1209.    feature foo, frozen parent_foo is
  1210.       do
  1211.          ...
  1212.       end
  1213.    end
  1214.  
  1215.    class CHILD
  1216.    inherit
  1217.       PARENT
  1218.          redefine foo
  1219.       end
  1220.    feature foo is
  1221.       do
  1222.          parent_foo
  1223.          ...
  1224.       end
  1225.    end
  1226.  
  1227. 2) Otherwise, you use repeated inheritance to get two versions of 'foo',
  1228.    and redefine one of them:
  1229.  
  1230.    class PARENT
  1231.    feature foo is
  1232.       do
  1233.          ...
  1234.       end
  1235.    end
  1236.  
  1237.    class CHILD
  1238.    inherit
  1239.       PARENT
  1240.          rename foo as parent_foo
  1241.       end
  1242.       PARENT
  1243.          redefine foo
  1244.          select foo  -- (in case of dynamic binding)
  1245.       end
  1246.    feature
  1247.       foo is
  1248.          do
  1249.             parent_foo
  1250.             ...
  1251.          end
  1252.    end
  1253.  
  1254. ----------
  1255.  
  1256. L12)   Where can I find a comparison between Eiffel and C++?
  1257.  
  1258. In Richard Wiener's book "Software Development Using Eiffel: There can be 
  1259. life after C++" (Prentice-Hall, ISBN 0-13-100686-X).
  1260.  
  1261. ----------
  1262.  
  1263. L13)   Are there any destructors in Eiffel?
  1264.  
  1265. Eiffel objects are garbage-collected, so that there is no need for
  1266. the software developer to worry about whether, how and when to "destruct" 
  1267. or "free" them in the software text.
  1268.  
  1269. Some implementations offer a "free" procedure for programmers who 
  1270. absolutely want to remove an object manually. Such a procedure is "use at 
  1271. your own risk" and is not needed in normal Eiffel development.
  1272.  
  1273. Coming back to normal usage, the need may arise to ensure that certain 
  1274. operations will automatically take place whenever the garbage collector 
  1275. reclaims an object. For example if an Eiffel object describing a file 
  1276. becomes unreachable and hence is eventually garbage-collected, you may 
  1277. want to ensure that the physical file will be closed at that time. Some 
  1278. implementations of Eiffel provide a mechanism for that purpose: procedure 
  1279. 'dispose' from the Kernel Library class MEMORY.
  1280.  
  1281. Whenever the garbage collector collects an object, it calls 'dispose' on 
  1282. that object. The procedure does nothing by default (so that a smart GC will 
  1283. of course avoid executing any actual call). But any class may inherit from 
  1284. MEMORY and redefine 'dispose' to perform appropriate actions, such as 
  1285. closing a file. Such actions are sometimes called "finalization". This 
  1286. technique achieves it conveniently.
  1287.  
  1288. Because there is no guarantee as to the order in which the garbage 
  1289. collector will reclaim objects that have become unreachable, safe 
  1290. redefinitions of 'dispose' should only act on external resources such as 
  1291. file descriptors, database elements, window system resources etc, not on 
  1292. Eiffel object structures themselves.
  1293.  
  1294. -- 
  1295. -- Roger Browne, 6 Bambers Walk, Wesham, PR4 3DG, UK   | Ph 01772-687525
  1296. -- Everything Eiffel: compilers/libraries/publications | +44-1772-687525
  1297.  
  1298.  
  1299.  
  1300. 
  1301.