Return-Path: Received: from EDRC.CMU.EDU by B.GP.CS.CMU.EDU id aa01677; 23 May 94 18:29:57 EDT Received: from brazil.cambridge.apple.com by EDRC.CMU.EDU id aa00608; 23 May 94 18:29:12 EDT Received: from ministry.cambridge.apple.com by brazil.cambridge.apple.com with SMTP (5.64/25-eef) id AA02127; Mon, 23 May 94 18:21:03 -0400 for gwydion-group@cs.cmu.edu Received: by cambridge.apple.com (5.64/25-eef) id AA04097; Mon, 23 May 94 18:20:27 -0400 Received: from [90.223.0.232] by cambridge.apple.com with SMTP (5.64/25-eef) id AA04068; Mon, 23 May 94 18:19:58 -0400 Message-Id: <9405232219.AA04068@cambridge.apple.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="========================_2982740==_" Date: Mon, 23 May 1994 18:20:50 -0500 To: macdylan-team@cambridge.apple.com, dylan-partners@cambridge.apple.com, fleischman@cambridge.apple.com From: alms@cambridge.apple.com (Andrew LM Shalit) Subject: New Dylan FAQ --========================_2982740==_ Content-Type: text/plain; charset="us-ascii" I've drafted an updated version of the Dylan FAQ. I want to get a new FAQ out ASAP, so that people who heard about Dylan at the recent WWDC don't get misled by the _very_ old FAQ that's currently out there. I'm particularly interested in better sections on "other implementations". There's currently only a very brief mention of Marlais, and nothing on the other implementations. (Yikes!) Something about the FTP site at CMU would good, also. Perhaps Stoney could write something about the object model? Sending me complete text to insert is best, of course :-) I'll be posting the new FAQ on Thursday. If I get a bunch of new material after that, I'll post another one the following Thursday. Thanks. -Andrew --========================_2982740==_ Content-Type: text/plain; name="Dylan-FAQ.rtf"; charset="us-ascii" Content-Disposition: attachment; filename="Dylan-FAQ.rtf" {\rtf1\mac\deff2 {\fonttbl{\f0\fswiss Chicago;}{\f2\froman New York;}{\f3\fswiss Geneva;}{\f4\fmodern Monaco;}{\f16\fnil Palatino;}{\f20\froman Times;}{\f21\fswiss Helvetica;}{\f22\fmodern Courier;}{\f23\ftech Symbol;}{\f2017\fnil Lubalin Graph;} {\f2046\fnil Swing;}{\f2515\fnil MT Extra;}{\f12899\fnil AppleGaramond LtIt;}{\f12900\fnil AppleGaramond BkIt;}{\f12901\fnil AppleGaramond BdIt;}{\f12902\fnil AppleGaramond Lt;}{\f12903\fnil AppleGaramond Bk;}{\f12904\fnil AppleGaramond Bd;} {\f13101\fnil Tekton Oblique;}{\f13102\fnil Tekton;}{\f14917\fnil BI Letter Gothic BoldSlanted;}{\f14918\fnil B Letter Gothic Bold;}{\f14919\fnil I Letter Gothic Slanted;}{\f14920\fnil Letter Gothic;}}{\colortbl\red0\green0\blue0;\red0\green0\blue255; \red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;}{\stylesheet{\f21 \sbasedon222\snext0 Normal;}}\margb720\widowctrl\ftnbj\ftnrestart\fracwidth \sectd \linemod0\linex0\cols1 {\footer \pard\plain \tqc\tx4320\tqr\tx8640 \f21 {\f12903 \tab \tab }{\f12903 \chpgn }{\f12903 \par }}\pard\plain \qc \f21 {\b\f16\fs36 Dylan\'aa FAQ\par }\pard \qc {\b\f16\fs28 \'f0 Apple Computer - May 23, 1994\par }\pard {\f16 \par }\pard {\f16 This memo answers questions which are frequently asked about the Dylan programming language, and its implementations.\par }\pard {\f16 \par }\pard {\f16 The latest version of this memo is available by anonymous ftp from cambridge.apple.com in the file }{\f22 /pub/dylan/dylan-faq.txt }{\f16 (plain ascii), or in the file }{\f22 /pub/dylan/dylan-faq.rtf }{\f16 (formatted, using RTF, which can be read by Microsoft Word, MacWrite, and many other word processors). Other Dylan documents are available for ftp from the same directory.\par }\pard {\f16 \par }\pard {\f16 This FAQ was substantially revised on 25-May-94.\par }\pard {\f16 \par }\pard {\f16 If you want to keep up with Dylan news, consider joining the info-dylan mailing list or the comp.lang.dylan newsgroup, described below.\par }\pard {\f16 \par }\pard {\f16 \par }{\b\f16 General Questions About Dylan}{\f16 \par \par }{\b\f16 What is Dylan?\par }{\f16 \par Dylan is a new Object Oriented Dynamic Language (OODL). Dylan combines the features o f static and dynamic languages. The goal of the language is to support a high level of programmer productivity, whil still allowing the efficient delivery of applications and libraries.\par \par }\pard {\f16 Dylan is consistently object-oriented. It is not a procedural language with an object-oriented extension. To this end, Dylan does not attempt to be compatible with any previously existing programming language.\par }\pard {\f16 \par }{\b\f16 Where can I get a copy of the language specification?\par \par }\pard {\f16 The first version of the language specification was published in 1992, and distributed in book form. Since then, the language has unde rgone a great deal of change in response to feedback from potential users and implementors. A number of changes to the language design have been published electronically in the form of design notes.\par }\pard {\f16 \par }\pard {\f16 In the first week of June, 1994, an intermediate language specification will be available by anonymous ftp, in the file }{\f22 /pub/dylan/intermediate-spec.rtf}{\f16 . This document is the combination of the old Dylan book, the published design notes, and additional unpublished design decisions. The document is called \ldblquote intermediate\rdblquote not because the language design is unfinished, but because the structure of the document is unfinished. The current round of language design is essentially complete.\par }\pard {\f16 \par }\pard {\f16 A final version of the language design will be published in early 1995.\par \par }{\b\f16 What is the target audience for Dylan?\par }{\f16 \par The target audience for Dylan is developers of commercial application software, most of whom are currently using static languages such as C and C++. \par \par }{\b\f16 How does Dylan differ from previous OODLs?\par }{\f16 \par Dylan is designed to allow the powerful and flexible programming techniques and development environments associated with OODLs, while also allowing the small, fast delivered applications currently associated with static languages.\par \par Unlike many dynamic languages, Dylan's design consciously enables the runtime environment to execute without the development environment present. In addition, Dylan will let you selectively 'turn-off' dynamic capabilities when they are no longer needed, allowing more efficient compilation.\par \par }{\b\f16 Are there any public mailing lists for discussing Dylan?\par }{\f16 \par }\pard {\f16 Yes.\par \par }\pard {\f16 The }{\f22 info-dylan}{\f16 mailing list is a forum for discussing all subjects related to Dylan. This mailing is also available as a digest, and is linked to the Newsgroup }{\f22 comp.lang.dylan}{\f16 .\par }\pard {\f16 \par }\pard {\f16 The }{\f22 announce-dylan}{\f16 mailing list is a moderated list, for major announcements about Dylan (such as the availability of new implementations of the language).\par \par }\pard {\f16 To subscribe to info-dylan or announce-dylan, send mail to }{\f22 majordomo@cambridge.apple.com.}{\f16 The body of the message should be \line "}{\f22 subscribe }{\i\f22 }{\f16 ", where }{\i\f16 }{\f16 is the name of the mailing list you want to subscribe to. To unsubscribe to one of the mailing lists, send majordomo a message with the body "}{\f22 unsubscribe }{\i\f22 }{\f16 ". If you would like to subscribe or unsubcribe an address whic h is different from the return address of the message, include the address after the }{\i\f16 }{\f16 . For complete majordomo instructions, send a message with the body "help".\par }\pard {\f16 \par }\pard {\f16 The name of the digest form of }{\f22 info-dylan}{\f16 is }{\f22 info-dylan-digest}{\f16 .\par \par }\pard \ri360 {\f16 Please do not send administrative requests to the mailing lists! If you have trouble with info-dylan, send mail to }{\f22 sysadmin@cambridge.apple.com.}{\f16 \par }\pard {\f16 \par }\pard {\b\f16 Where should I send comments on the Dylan language?\par \par }\pard {\f16 Most comments can be sent to }{\f22 info-dylan}{\f16 . If you wish to send a private letter to the Apple engineers working on dylan, you can send a message to }{\f22 dylan-comments@cambridge.apple.com}{\f16 . (AppleLink users should send mail to }{\f22 DYLAN}{\f16 ).\par \par }{\b\f16 What should I do if I want to implement Dylan?\par }{\f16 \par Send mail to }{\f22 dylan-comments@cambridge.apple.com}{\f16 . We have put together a program to support implementors, and we want to hear from you. (AppleLink users should send mail to }{\f22 DYLAN}{\f16 ).\par \par If you've written an implementation of Dylan and want to release it, please contact us for a trademark license.\par }\pard {\f16 \par }\pard {\b\f16 Does Apple have an implementation of Dylan?\par }{\f16 \par }\pard {\f16 Apple recently announced plans to release an implementation of Dyan.\par \par }\pard {\f16 Apple Dylan provides the Dylan language embedded in high-level development environment.\par }\pard {\f16 \par }\pard {\f16 The first release of Apple Dylan is scheduled to ship in the first quarter of 1995. This release will support native 68K stand alone applications.\par }\pard {\f16 \par }\pard {\f16 Six to nine months after the first release, Apple will release a version of Dylan which supports native PowerPC code and OpenDoc parts (components).\par }\pard {\f16 \par }\pard {\b\f16 Are there third-party implementations of Dylan available?\par }{\f16 \par }\pard {\f16 Several third-parties have expressed interest in implementing Dylan.\par \par }\pard {\f16 One experimental implementation has been released and is being supported. This implementatin is called Marlais, and it was created by Brent Benson.\par Marlais 0.3 is available in the Dylan ftp directory at }{\f22 cambridge.apple.com}{\f16 .\par \par [Need input from other Dylan implementors on how they would like to be included here!!!]\par \par }{\b\f16 Is Dylan related to the Newton PDA?}{\f16 \par \par Not at this time. If you are looking for more information on Newton development, you need to contact the Newton Developer Relations at }{\f22 NEWTON.DEVS@applelink.apple.com}{\f16 .\par \par }{\b\f16 Is Dylan a proprietary language? Why is the Dylan name trademarked?\par }{\f16 \par We want Dylan to be available on as many computers as possible. To this end, we are encouraging groups outside Apple to implement Dylan.\par \par It is our intention to license the Dylan trademark to any implementation which passes a standard test suite. The purpose of the trademark is to ensure quality and consistency among implementations.\par \par }{\b\f16 Is the Dylan language design frozen?\par }{\f16 \par With the exception of the macro system, the current language design is complete. At this time, we will only be making small tweaks, or changes necessary to resolve bugs or inconsistencies in the specification.\par \par }{\b\f16 Is there a group which promotes the use of object-oriented dynamic languages?\par }{\f16 \par Yes. There is an OODL special interest group of the Software Frameworks Association (formerly called MADA). SFA is a group which champions object-oriented programming on the Macintosh as well as other platforms.\par \par To subscribe to the OODL sig mailing list from AppleLink send mail to OODL.SIG. Internet subscriptions should be requested from }{\f22 oodl-sig-request@cambridge.apple.com}{\f16 .\par }\pard {\f16 \par }\pard {\f16 \par }{\b\f16\fs28 Questions about the Dylan Language Design\par }{\f16 \par }{\b\f16 \par What does the Dylan syntax look like?\par }{\f16 \par The first Dylan book used a parenthesized, lisp-like syntax. The current version uses an algol-like syntax, which will be very familiar to users of Pascal or C.}\par \par {\b\f16 Will Dylan have a standard macro system with the algebraic syntax?\par }{\f16 Yes.\par \par }\pard {\b\f16 Are there plans to specify a standard I/O package for Dylan? What about threads?\par }\pard {\b\f16 \par }\pard {\f16 Threads, I/O, and other language features may be provided as optional libraries in the future. They are not currently part of the language.\par }\pard {\f16 \par }\pard {\f16 Because of the great variety of computing platforms---from PDA to mainfraim---we do not want to standardize on these features too strictly.}{\b\f16 \par }{\f16 \par }{\b\f16 Why is make allowed to return a previously allocated instance, or an object which is an indirect instance of the class passed to make?\par }{\f16 \par We feel that this is a very important abstraction mechanism. A class should have flexibility in how it implements make, as long as the object returned fulfills the protocol of the class.\par \par For example, this allows a library to document a single abstract clas s which is supported by several undocumented implementation classes. The abstract class can choose which implementation class to instantiate based on the additional arguments to make. This allows optimizations which are transparent to the clients of the l ibrary.\par \par The default method for make of a user-defined class returns a fresh direct instance of the requested class.\par \par }{\b\f16 The Dylan manual doesn't require implementations to optimize tail-recursion Was this an intentional omission, or an editorial oversight?\par }{\f16 \par It was an editorial oversight. Dylan implementations will be required to be properly tail recursive.\par \par }{\b\f16 The Dylan manual doesn't say much about modules. Will this be specified in the future?\par }{\f16 \par The new language document includes a complete module specification.\par \par }{\b\f16 Can the 'method' special form be used to create closures?\par }{\f16 \par Yes.\par \par }{\b\f16 I don't understand how setter variables work. Is setter a special form?\par }{\f16 \par This has been clarified in the new language design.\par \par }{\b\f16 What kind of object is used to return multiple values?\par }{\f16 \par When a function returns multiple values, the return values are not stored in a wrapper object; they are returned directly. For example, if a function returns "the values 4 and 5", it returns two i ntegers. It does not return a data structure which contains two integers.\par \par Returning multiple values is similar to calling a function with more than one argument. When passing multiple objects as arguments to a function, the objects do not have to be stored in a single data structure before they are passed.\par \par }{\b\f16 Is the specification of sealing complete?\par }{\f16 \par Yes. The new language design document includes a complete specification of sealing.\par \par }{\b\f16 Will Dylan include }{\b\f22 eval}{\b\f16 ?\par }{\f16 \par Some implementations may choose to support eval, but we do not have plans to add it to the language standard. We feel that the delivery of applications which are space efficient requires the separation of development time activity from runtime activity. \par \par }{\b\f16 Will Dylan include an application framework?\par }{\f16 \par We recognize the value of applicat ion frameworks, especially cross-platform application frameworks. Unfortunately, because of the great variation in computing platforms, a single application framework will not be part of the Dylan language. On each platform, there should either be a Dyla n-specific application framework, or Dylan should be able to use application frameworks written in other languages.\par \par }{\b\f16 Will Dylan interface to other languages?\par }{\f16 \par We recognize that seamless integration with other languages, especially C and C++, is essential. We are working on addressing this issue. The solutions may not be part of the Dylan language proper.}\par } --========================_2982740==_--