diff options
Diffstat (limited to 'doc/faq.htm')
-rw-r--r-- | doc/faq.htm | 443 |
1 files changed, 443 insertions, 0 deletions
diff --git a/doc/faq.htm b/doc/faq.htm new file mode 100644 index 0000000..50175fc --- /dev/null +++ b/doc/faq.htm @@ -0,0 +1,443 @@ +<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> +<HEAD> + <TITLE>Icon Programming Language FAQ</TITLE> + <LINK REL="STYLESHEET" TYPE="text/css" HREF="istyle.css"> + <LINK REL="SHORTCUT ICON" HREF="shortcut.gif"> +</HEAD> +<BODY> +<!-- Archive-name: comp-lang-icon-faq--> +<P><IMG SRC="wwwcube.gif" WIDTH="128" HEIGHT="144" ALT="" ALIGN=RIGHT> +<H1>Frequently Asked Questions about the Icon programming language</H1> +<A HREF="http://www.cs.arizona.edu/icon/faq.htm"> +www.cs.arizona.edu/icon/faq.htm</A> +<BR>Last updated November 14, 2005<BR> +<!-- $Id: faq.htm,v 1.45 2005/11/14 16:24:44 gmt Exp $ --> + +<P><STRONG>Learning about Icon</STRONG><BR> +<A HREF="#whatsicon">A1. What is Icon?</A><BR> +<A HREF="#whatgood">A2. What is Icon good for?</A><BR> +<A HREF="#features">A3. What are Icon's distinguishing characteristics?</A><BR> +<A HREF="#library">A4. What is the Icon program library?</A><BR> +<A HREF="#intro">A5. Where can I learn more about Icon?</A><BR> +<A HREF="#examples">A6. Where are some simple examples?</A><BR> +<A HREF="#documentation">A7. How about comprehensive documentation?</A><BR> +<P><STRONG>Implementations</STRONG><BR> +<A HREF="#platforms">B1. What platforms support Icon?</A><BR> +<A HREF="#getstarted">B2. How do I get started with Icon?</A><BR> +<A HREF="#unicode">B3. Is there a Unicode version of Icon?</A><BR> +<A HREF="#iconc">B4. What happened to the compiler?</A><BR> +<P><STRONG>Administration</STRONG><BR> +<A HREF="#iconproject">C1. What is the Icon Project?</A><BR> +<A HREF="#updates">C2. How often is the on-line material updated?</A><BR> +<A HREF="#lineage">C3. Where did Icon come from?</A><BR> +<A HREF="#futures">C4. Where is Icon going? </A><BR> +<P><STRONG>Support</STRONG><BR> +<A HREF="#ugroup">D1. Is there a users' group for Icon?</A><BR> +<A HREF="#techsupport">D2. How do I get technical support?</A><BR> +<P><STRONG>Programming</STRONG><BR> +<A HREF="#evread">E1. Why doesn't <CODE>read()</CODE> work with <CODE>every</CODE>?</A><BR> +<A HREF="#strinv">E2. Why doesn't string invocation such as <CODE>"foo"()</CODE> work?</A><BR> +<A HREF="#callc">E3. How can I call a C function?</A><BR> +<A HREF="#rwpipe">E4. Can I open a bidirectional pipe?</A><BR> + +<P><HR><H2>Learning about Icon</H2> + +<H3><A NAME="whatsicon">A1.</A> What is Icon?</H3> +<P> +Icon is a very high level general-purpose programming language with +extensive features for processing strings (text) and data structures. +Icon is an imperative, procedural language with a syntax that is +reminiscent of C and Pascal, but with semantics at a much higher level. +<P> +Icon has a novel expression-evaluation mechanism that integrates +goal-directed evaluation and backtracking with conventional control structures. +It has a string scanning facility for pattern matching that avoids the tedious +details usually associated with analyzing strings. +Icon's built-in data structures include sets and tables with associative +lookup, lists that can be used as vectors or stacks and queues, and records. +<P> +Icon is a strongly, though not statically, typed language. +It provides transparent automatic type conversion: +For example, if an integer is used in an operation that requires a string, +the integer is automatically converted to a string. +<P> +Several implementations of Icon have high-level graphics facilities with +an easily programmed window interface. +<P> +Icon manages storage automatically. +Objects are created as needed during program execution and space is +reclaimed by garbage collection as needed. +The sizes of strings and data structures are limited only by the amount +of available memory. + +<H3><A NAME="whatgood">A2.</A> What is Icon good for?</H3> +<P> +As a general-purpose programming language with a large computational +repertoire, Icon can be used for most programming tasks. +It's especially strong at building software tools, for processing text, +and for experimental and research applications. +<P> +Icon is designed to make programming easy; +it emphasizes the value of programmer's +time and the importance of getting programs to work quickly. +Consequently, Icon is used both for short, one-shot tasks and for +very complex applications. + +<H3><A NAME="features">A3.</A> +What are Icon's distinguishing characteristics?</H3> +<P> +<UL> + <LI> A high-level, general-purpose programming language + <LI> Friendly line-oriented syntax (no semicolons needed) + <LI> Emphasis on programmer productivity + <LI> Usually interpreted +</UL><UL> + <LI> Evolved from programming languages (vs. scripting languages) + <LI> Procedural control flow plus generators and goal-directed evaluation +</UL><UL> + <LI> Values have types; variables are typeless, accept any value + <LI> Static scoping: global or (procedure) local + <LI> Automatic garbage collection +</UL><UL> + <LI> All integers have arbitrary precision + <LI> Uses strings (not chars) as basic text datatype + <LI> Has lists that function as arrays, queues, and stacks + <LI> Also has sets, tables, records (structs), reals (doubles), more + <LI> No second-class "primitive types" +</UL><UL> + <LI> Not "object-oriented" (no classes, inheritance, or instance methods) + <LI> No exception catching + <LI> No concurrency (no threads, monitors, semaphores, or synchronization) + <LI> Has co-expressions (coroutines) +</UL><UL> + <LI> Basic least-common-denominator system interface (a la ANSI C) +</UL><UL> + <LI> Procedural graphics (event-driven paradigm available but not mandated) + <LI> Retained windows (programs are never called to repaint) + <LI> Simple GUI builder that can re-edit its generated code + <LI> Turtle graphics package +</UL><UL> + <LI> Large library of contributed procedures and programs +</UL> + +<H3><A NAME="library">A4.</A> What is the Icon program library?</H3> +<P> +The library is a collection of programs and procedures written in Icon. +User contributions are welcome and form a significant portion of the library. +<P> +Library procedures effectively augment the built-in functions +available to an Icon program. +A wide variety of procedures currently exists, and most +graphically-based programs are built around library procedures. +<P> +The programs in the library range from simple demonstrations to +handy tools to complex graphical applications. +<P> +The library is a resource for both new and experienced programmers. +In addition to their basic utility, +its programs and procedures serve as examples of how things can be +written in Icon. +<P> +The library is indexed at +<A HREF="http://www.cs.arizona.edu/icon/library/ipl.htm"> +www.cs.arizona.edu/icon/library/ipl.htm</A>. + + +<H3><A NAME="intro">A5.</A> Where can I learn more about Icon?</H3> +<P> +Here are some good places to start. +<UL> +<LI> Ralph Griswold's overview: + <A HREF="http://www.cs.arizona.edu/icon/docs/ipd266.htm"> + www.cs.arizona.edu/icon/docs/ipd266.htm</A> +<LI> Dave Hanson's introduction: + <A HREF="http://www.cs.arizona.edu/icon/intro.htm"> + www.cs.arizona.edu/icon/intro.htm</A> +<LI> Bill Mitchell's introduction and slides: + <A HREF="http://www.mitchellsoftwareengineering.com/icon/"> + www.mitchellsoftwareengineering.com/icon</A> +<LI> John Shipman's tutorial: + <A HREF="http://www.nmt.edu/tcc/help/lang/icon/"> + www.nmt.edu/tcc/help/lang/icon</A> +</UL> + +<H3><A NAME="examples">A6.</A> Where are some simple examples?</H3> +<P> +For some simple text-based programs, see any of those +introductory documents in the preceding question. +For some simple graphics programs, see +<A HREF="http://www.cs.arizona.edu/icon/gb/progs/progs.htm"> +www.cs.arizona.edu/icon/gb/progs/progs.htm</A>. +<P> +Many more examples, typically larger, are found in the +Icon program library; see the indexes of +<A HREF="http://www.cs.arizona.edu/icon/library/cprogs.htm">Basic Programs</A> +and <A HREF="http://www.cs.arizona.edu/icon/library/cgprogs.htm"> +Graphics Programs</A>. + +<H3><A NAME="documentation">A7.</A> How about comprehensive documentation?</H3> +<P> +Two books define the Icon language. +The core language is covered in +<A HREF="http://www.cs.arizona.edu/icon/lb3.htm"> +<CITE>The Icon Programming Language (third edition)</CITE></A>, +by Griswold and Griswold. +Graphics facilities are described in +<A HREF="http://www.cs.arizona.edu/icon/gb/"> +<CITE>Graphics Programming in Icon</CITE></A> +by Griswold, Jeffery, and Townsend. +These books contain both tutorial and reference material. +<P> +Icon's internals are detailed in +<A HREF="http://www.cs.arizona.edu/icon/ibsale.htm"> +<CITE>The Implementation of the Icon Programming Language</CITE></A> +by Griswold and Griswold. +Although considerable changes have occurred since Version 6, +described in the book, the basic structure of Icon remains the same. +Two technical reports, +<A HREF="http://www.cs.arizona.edu/icon/docs/ipd112.htm">IPD112</A> and +<A HREF="http://www.cs.arizona.edu/icon/docs/ipd239.htm">IPD239</A>, +describe subsequent changes. +<P> +Printed copies of the +<CITE>Language</CITE> and <CITE>Graphics</CITE> books +are available from Jeffery Systems +(<A HREF="http://www.zianet.com/jeffery/books/">www.zianet.com/jeffery/books</A>). +All three books can be downloaded at no charge from the Icon books page, +<A HREF="http://www.cs.arizona.edu/icon/books.htm"> +www.cs.arizona.edu/icon/books.htm</A>. +<P> +The <CITE>Icon Programming Language Handbook</CITE>, +by Thomas W. Christopher, is available on the web at +<A HREF="http://www.tools-of-computing.com/tc/CS/iconprog.pdf"> +www.tools-of-computing.com/tc/CS/iconprog.pdf</A>. +<P> +An on-line index to the Icon program library is found at +<A HREF="http://www.cs.arizona.edu/icon/library/ipl.htm"> +www.cs.arizona.edu/icon/library/ipl.htm</A>. +<P> +There is a large amount of additional information at the +Icon web site, +<A HREF="http://www.cs.arizona.edu/icon/">www.cs.arizona.edu/icon</A>. + +<P><HR><H2>Implementations</H2> + +<H3><A NAME="platforms">B1.</A> What platforms support Icon?</H3> +<P> +Current implementations with graphics support +are available for Unix (including Linux) and Windows. +The Unix implementation also runs on Darwin, +the Macintosh development environment, or the +<A HREF="http://www.cygwin.com/">Cygwin</A> environment under Windows. +Older versions of Icon are available for some other systems. +An alternative Java-based implementation for Unix, +<A HREF="http://www.cs.arizona.edu/icon/jcon/">Jcon</A>, +is also available. + +<H3><A NAME="getstarted">B2.</A> How do I get started with Icon?</H3> +<P> +Version 9.4.3 of Icon for <STRONG>Unix</STRONG> can be downloaded from +<A HREF="http://www.cs.arizona.edu/icon/v943/"> +www.cs.arizona.edu/icon/v943</A>. +Source and binary packages are available, each with the +complete Icon program library. +<P> +Version 9.3 of Icon for <STRONG>Windows</STRONG> is compatible +at the source level with version 9.4.3. +It can be downloaded from +<A HREF="http://www.cs.arizona.edu/icon/v93w.htm"> +www.cs.arizona.edu/icon/v93w.htm</A>. +The Version 9.4.3 library can be obtained separately from +<A HREF="http://www.cs.arizona.edu/icon/v943/"> +www.cs.arizona.edu/icon/v943</A>. +<P> +For older implementations, start at +<A HREF="http://www.cs.arizona.edu/icon/implver.htm"> +www.cs.arizona.edu/icon/implver.htm</A>. +Jcon is at <A HREF="http://www.cs.arizona.edu/icon/jcon/"> +www.cs.arizona.edu/icon/jcon</A>. + +<H3><A NAME="unicode">B3.</A> Is there a Unicode version of Icon?</H3> +<P> +No. +Icon is defined in terms of 8-bit characters, and changing this presents +several design challenges that would likely break existing programs. +Also, modifying the C implementation is probably infeasible, +but a Unicode version of Jcon might be possible. + +<H3><A NAME="iconc">B4.</A> What happened to the compiler?</H3> +<P> +For a while, Unix distributions included both an interpreter and a compiler; +but the interpreter is is usually fast enough even for production work, and +most people found that using the compiler wasn't worth the extra compilation +time or the hassles involved. +We no longer advertise the compiler or produce binaries for it. +It is still part of the source code distribution, +and we have not deliberately broken it, +but we no longer support it and we cannot offer help if problems arise. + +<P><HR><H2>Administration</H2> + +<H3><A NAME="iconproject">C1.</A> What is the Icon Project?</H3> +<P> +The Icon Project is a name used by the group that +distributes and supports the Icon programming language. +The project maintains the Icon web site at +<A HREF="http://www.cs.arizona.edu/icon/">www.cs.arizona.edu/icon</A>. +A non-commercial organization, the project is supported by the +Department of Computer Science at the University of Arizona. + +<H3><A NAME="updates">C2.</A> How often is the on-line material updated?</H3> +<P> +New material is added when it's available. +Established implementations usually are updated only when there's a +new version. +This typically is every year or two. +The Icon program library is updated on a similar schedule. + +<H3><A NAME="lineage">C3.</A> Where did Icon come from?</H3> +<P> +Icon is the latest in a series of high-level programming languages designed +to facilitate programming tasks involving strings and structures. +The original language, SNOBOL, was developed at Bell Telephone Laboratories +in the early 1960s. +SNOBOL evolved into SNOBOL4, which is still in use. +Subsequent languages were developed at the University of +Arizona with support from the National Science Foundation. +Although it has similar objectives and many similar capabilities, +Icon bears little superficial resemblance to SNOBOL4. +<P> +Icon implementations were developed by faculty, staff, and students +at the University of Arizona, +with significant contributions from volunteers around the world. +An <A HREF="http://doi.acm.org/10.1145/155360.155363">Icon history</A> +by Ralph and Madge Griswold appears in the preprints +of the second History of Programming Languages Conference (HOPL-II), +ACM SIGPLAN Notices, March 1993 (Vol 28, No 3). +<P> +The name Icon is not an acronym, nor does it stand for anything in +particular, although the word <CITE>iconoclastic</CITE> was mentioned +when the name was chosen. +The name predates the now common use of <CITE>icon</CITE> +to refer to small images used in graphical user interfaces. +This sometimes misleads people into thinking +that Icon is designed to create or manipulate icons, +but there's no good solution to that problem. + +<H3><A NAME="futures">C4.</A> Where is Icon going? </H3> +<P> +We continue to use Icon on a daily basis, but no significant changes +are planned. +We expect to support the Unix version for the forseeable future, +and to distribute ports to other systems as supplied by volunteers. +<P> +The Unicon project is developing an object-oriented language based on Icon. +For more information, see +<A HREF="http://unicon.sourceforge.net/"> +unicon.sourceforge.net</A>. + + +An earlier object-oriented extension to Icon, Idol, +can be found in the Icon program library. + +<P><HR><H2>Support</H2> + +<H3><A NAME="ugroup">D1.</A> Is there a users' group for Icon?</H3> +<P> +There is no official Icon users' group, but the Usenet newsgroup +<A HREF="news:comp.lang.icon">comp.lang.icon</A> +is dedicated to issues relating to the Icon language. + +<H3><A NAME="techsupport">D2.</A> How do I get technical support?</H3> +<P> +The Icon Project is not a commercial organization, and its capacity for +providing technical support is limited. Please use the appropriate resource +when you need assistance: +<UL> +<LI> +For <STRONG>programming</STRONG> questions, +submit a query to the Usenet newsgroup +<A HREF="news:comp.lang.icon">comp.lang.icon</A>. +<LI> +For <STRONG>porting</STRONG> assistance +or <STRONG>Unix</STRONG> problems, contact +<A HREF="mailto:icon-project@cs.arizona.edu">icon-project@cs.arizona.edu</A>. +<LI> +For problems with the <STRONG>Windows</STRONG> implementation, +contact the implementor, +<A HREF="mailto:jeffery@cs.nmsu.edu">jeffery@cs.nmsu.edu</A>. +<LI> +For general information and additional documentation, visit the Icon web site: +<A HREF="http://www.cs.arizona.edu/icon/">www.cs.arizona.edu/icon</A>. +</UL> + +<P><HR><H2>Programming</H2> + +<H3><A NAME="evread">E1.</A> +Why doesn't <CODE>read()</CODE> work with <CODE>every</CODE>?</H3> +<P> +<CODE>every s := read() do {...}</CODE> +doesn't loop because <CODE>read()</CODE> produces a single value and +then fails if resumed. +Other "consumer" procedures such as <CODE>get()</CODE> and <CODE>pop()</CODE> +work the same way. +Use a <CODE>while</CODE> loop with these procedures, and save +<CODE>every</CODE> for use with generators such as <CODE>!x</CODE> +or <CODE>key(T)</CODE>. + +<H3><A NAME="strinv">E2.</A> +Why doesn't string invocation such as <CODE>"foo"()</CODE> work?</H3> +<P> +String invocation works if the procedure is present; +the catch is that the linker removes unreferenced procedures. +To ensure a procedure's presence, reference it in the +<CODE>main()</CODE> procedure. +A simple reference suffices, as in +<CODE>refs := [foo, bar, baz]</CODE>; +it's not necessary to actually call it. +<P> +(Why does the linker remove unreferenced procedures? +Because this can save <EM>huge</EM> amounts of memory for +programs that use the library.) + +<H3><A NAME="callc">E3.</A> How can I call a C function?</H3> +<P> +You can't call an arbitrary C function, +but if you're willing to write a function to Icon's specifications, +there are two approaches. +Under Unix, which provides <CODE>loadfunc()</CODE>, +you can load one or more functions from a shared library, +and then treat them as if they had been written in Icon. +Some examples can be found in the +<A HREF="http://www.cs.arizona.edu/icon/library/ccfuncs.htm"> +<CODE>cfuncs</CODE></A> and +<CODE>packs/loadfuncs</CODE> directories of the Icon program library. +The more cumbersome approach is to add code to the Icon interpreter +and rebuild it; some hooks are provided for this purpose. +Both approaches are discussed in <CITE>Calling C Functions from Icon</CITE>, +<A HREF="http://www.cs.arizona.edu/icon/docs/ipd240.htm"> +www.cs.arizona.edu/icon/docs/ipd240.htm</A>. +<P> +The <A HREF="http://www.cs.arizona.edu/icon/jcon/">Jcon</A> implementation +allows Icon programs to call Java code that is written to Jcon specifications. + +<H3><A NAME="rwpipe">E4.</A> Can I open a bidirectional pipe?</H3> +<P> +No, this is not possible. +Although the concept is simple — +write a line to a program via a pipe, then read that program's output +— it probably wouldn't work. +Most I/O libraries don't write anything to a pipe until +they've filled a buffer, and the most likely consequence would be +a deadlock, with each program waiting for the other to send more data. + +<P><HR> +<SMALL> +This FAQ is edited by Gregg Townsend. +It includes contributions from +Ralph Griswold, Cliff Hathaway, Clint Jeffery, Bob Alexander, +and Todd Proebsting. +</SMALL> +</BODY> +</HTML> |