summaryrefslogtreecommitdiff
path: root/doc/faq.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/faq.txt')
-rw-r--r--doc/faq.txt312
1 files changed, 164 insertions, 148 deletions
diff --git a/doc/faq.txt b/doc/faq.txt
index 91b4eb9..8538984 100644
--- a/doc/faq.txt
+++ b/doc/faq.txt
@@ -1,8 +1,7 @@
-
Frequently Asked Questions about the Icon programming language
www.cs.arizona.edu/icon/faq.htm
- Last updated November 14, 2005
+ Last updated April 12, 2010
Learning about Icon
A1. What is Icon?
@@ -23,7 +22,7 @@
C1. What is the Icon Project?
C2. How often is the on-line material updated?
C3. Where did Icon come from?
- C4. Where is Icon going?
+ C4. Where is Icon going?
Support
D1. Is there a users' group for Icon?
@@ -41,41 +40,43 @@ Learning about Icon
A1. What is Icon?
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.
+ 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.
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.
+ 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.
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.
+ 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.
- Several implementations of Icon have high-level graphics facilities with an
- easily programmed window interface.
+ Several implementations of Icon have high-level graphics facilities
+ with an easily programmed window interface.
- 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.
+ 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.
A2. What is Icon good for?
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.
+ 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.
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.
+ 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.
A3. What are Icon's distinguishing characteristics?
@@ -85,7 +86,8 @@ Learning about Icon
* Usually interpreted
* Evolved from programming languages (vs. scripting languages)
- * Procedural control flow plus generators and goal-directed evaluation
+ * Procedural control flow plus generators and goal-directed
+ evaluation
* Values have types; variables are typeless, accept any value
* Static scoping: global or (procedure) local
@@ -97,14 +99,17 @@ Learning about Icon
* Also has sets, tables, records (structs), reals (doubles), more
* No second-class "primitive types"
- * Not "object-oriented" (no classes, inheritance, or instance methods)
+ * Not "object-oriented" (no classes, inheritance, or instance
+ methods)
* No exception catching
- * No concurrency (no threads, monitors, semaphores, or synchronization)
+ * No concurrency (no threads, monitors, semaphores, or
+ synchronization)
* Has co-expressions (coroutines)
* Basic least-common-denominator system interface (a la ANSI C)
- * Procedural graphics (event-driven paradigm available but not mandated)
+ * Procedural graphics (event-driven paradigm available but not
+ mandated)
* Retained windows (programs are never called to repaint)
* Simple GUI builder that can re-edit its generated code
* Turtle graphics package
@@ -113,15 +118,17 @@ Learning about Icon
A4. What is the Icon program library?
- The library is a collection of programs and procedures written in Icon. User
- contributions are welcome and form a significant portion of the library.
+ The library is a collection of programs and procedures written in
+ Icon. User contributions form a significant portion of the library.
- 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.
+ 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. The core and graphics core modules are the most carefully
+ vetted.
- The programs in the library range from simple demonstrations to handy tools
- to complex graphical applications.
+ The programs in the library range from simple demonstrations to handy
+ tools to complex graphical applications.
The library is a resource for both new and experienced programmers. In
addition to their basic utility, its programs and procedures serve as
@@ -138,32 +145,37 @@ Learning about Icon
www.mitchellsoftwareengineering.com/icon
* John Shipman's tutorial: www.nmt.edu/tcc/help/lang/icon
+ For the graphics facilities:
+ * The Icon Project Overview:
+ www.cs.arizona.edu/icon/ftp/doc/ipd281.pdf
+
A6. Where are some simple examples?
- For some simple text-based programs, see any of those introductory documents
- in the preceding question. For some simple graphics programs, see
- www.cs.arizona.edu/icon/gb/progs/progs.htm.
+ For some simple text-based programs, see any of those introductory
+ documents in the preceding question. For some simple graphics
+ programs, see www.cs.arizona.edu/icon/gb/progs/progs.htm.
- Many more examples, typically larger, are found in the Icon program library;
- see the indexes of Basic Programs and Graphics Programs.
+ Many more examples, typically larger, are found in the Icon program
+ library; see the indexes of Basic Programs and Graphics Programs.
A7. How about comprehensive documentation?
- Two books define the Icon language. The core language is covered in The Icon
- Programming Language (third edition), by Griswold and Griswold. Graphics
- facilities are described in Graphics Programming in Icon by Griswold,
- Jeffery, and Townsend. These books contain both tutorial and reference
- material.
+ Two books define the Icon language. The core language is covered in
+ The Icon Programming Language (third edition), by Griswold and
+ Griswold. Graphics facilities are described in Graphics Programming in
+ Icon by Griswold, Jeffery, and Townsend. These books contain both
+ tutorial and reference material.
- Icon's internals are detailed in The Implementation of the Icon Programming
- Language 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, IPD112 and IPD239, describe
- subsequent changes.
+ Icon's internals are detailed in The Implementation of the Icon
+ Programming Language 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,
+ IPD112 and IPD239, describe subsequent changes.
- Printed copies of the Language and Graphics books are available from Jeffery
- Systems (www.zianet.com/jeffery/books). All three books can be downloaded at
- no charge from the Icon books page, www.cs.arizona.edu/icon/books.htm.
+ Printed copies of the Language and Graphics books are available from
+ Jeffery Systems (http://unicon.org/books/). All three books can be
+ downloaded at no charge from the Icon books page,
+ www.cs.arizona.edu/icon/books.htm.
The Icon Programming Language Handbook, by Thomas W. Christopher, is
available on the web at www.tools-of-computing.com/tc/CS/iconprog.pdf.
@@ -171,101 +183,107 @@ Learning about Icon
An on-line index to the Icon program library is found at
www.cs.arizona.edu/icon/library/ipl.htm.
- There is a large amount of additional information at the Icon web site,
- www.cs.arizona.edu/icon.
+ There is a large amount of additional information at the Icon web
+ site, www.cs.arizona.edu/icon, including complete sets of back issues
+ of the Icon Newsletter and Icon Analyst.
_________________________________________________________________
Implementations
B1. What platforms support Icon?
- 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 Cygwin environment under
- Windows. Older versions of Icon are available for some other systems. An
- alternative Java-based implementation for Unix, Jcon, is also available.
+ The current implementation of Icon is a Unix implementation. This
+ includes Linux, BSD, Solaris, Macintosh, and the Cygwin environment
+ under Windows. Version 9.5 of Icon has been tested on all these
+ platforms.
- B2. How do I get started with Icon?
+ Older versions are available for Windows and some other systems. An
+ alternative Java-based implementation for Unix, Jcon, is also
+ available.
- Version 9.4.3 of Icon for Unix can be downloaded from
- www.cs.arizona.edu/icon/v943. Source and binary packages are available, each
- with the complete Icon program library.
+ None of these environments includes a window-based development
+ environment. While Icon programs can open windows and use graphics,
+ programming is done using Unix editors and other tools from a command
+ shell.
+
+ B2. How do I get started with Icon?
- Version 9.3 of Icon for Windows is compatible at the source level with
- version 9.4.3. It can be downloaded from www.cs.arizona.edu/icon/v93w.htm.
- The Version 9.4.3 library can be obtained separately from
- www.cs.arizona.edu/icon/v943.
+ The current version of Icon for Unix can be downloaded from
+ www.cs.arizona.edu/icon/current. Source and binary packages are
+ available, each with the complete Icon program library.
- For older implementations, start at www.cs.arizona.edu/icon/implver.htm.
- Jcon is at www.cs.arizona.edu/icon/jcon.
+ For older implementations, start at
+ www.cs.arizona.edu/icon/implver.htm. Jcon is at
+ www.cs.arizona.edu/icon/jcon.
B3. Is there a Unicode version of Icon?
- 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.
+ 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.
B4. What happened to the compiler?
- 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.
+ For a while, Unix distributions included both an interpreter and a
+ compiler. The compiler was an interesting research project but it has
+ not been maintained and is no longer supported. The interpreter is
+ much easier to use and is generally quite fast enough, even for
+ production applications.
_________________________________________________________________
Administration
C1. What is the Icon Project?
- 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
- www.cs.arizona.edu/icon. A non-commercial organization, the project is
- supported by the Department of Computer Science at the University of
- Arizona.
+ 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 www.cs.arizona.edu/icon. A non-commercial organization,
+ the project is supported by the Department of Computer Science at the
+ University of Arizona.
C2. How often is the on-line material updated?
- 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.
+ The Icon implementation is now in maintenance mode, with new releases
+ produced only when necessary. This typically happens every few years
+ when a change in the Gnu tools cause the source to stop building.
C3. Where did Icon come from?
- 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.
-
- Icon implementations were developed by faculty, staff, and students at the
- University of Arizona, with significant contributions from volunteers around
- the world. An Icon history 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).
+ 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.
+
+ Icon implementations were developed by faculty, staff, and students at
+ the University of Arizona, with significant contributions from
+ volunteers around the world. An Icon history 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).
The name Icon is not an acronym, nor does it stand for anything in
- particular, although the word iconoclastic was mentioned when the name was
- chosen. The name predates the now common use of icon 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.
+ particular, although the word iconoclastic was mentioned when the name
+ was chosen. The name predates the now common use of icon 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.
C4. Where is Icon going?
- 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.
+ We continue to use Icon on a daily basis, but no significant changes
+ are planned. We expect to support the Unix version for the foreseeable
+ future, and to distribute ports to other systems as supplied by
+ volunteers.
- The Unicon project is developing an object-oriented language based on Icon.
- For more information, see unicon.sourceforge.net. An earlier object-oriented
- extension to Icon, Idol, can be found in the Icon program library.
+ The Unicon project is developing an object-oriented language based on
+ Icon. For more information, see unicon.sourceforge.net. An earlier
+ object-oriented extension to Icon, Idol, can be found in the Icon
+ program library.
_________________________________________________________________
Support
@@ -277,61 +295,59 @@ Support
D2. How do I get technical support?
- 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:
+ 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:
* For programming questions, submit a query to the Usenet newsgroup
comp.lang.icon.
* For porting assistance or Unix problems, contact
icon-project@cs.arizona.edu.
- * For problems with the Windows implementation, contact the implementor,
- jeffery@cs.nmsu.edu.
- * For general information and additional documentation, visit the Icon web
- site: www.cs.arizona.edu/icon.
+ * For general information and additional documentation, visit the
+ Icon web site: www.cs.arizona.edu/icon.
_________________________________________________________________
Programming
E1. Why doesn't read() work with every?
- every s := read() do {...} doesn't loop because read() produces a single
- value and then fails if resumed. Other "consumer" procedures such as get()
- and pop() work the same way. Use a while loop with these procedures, and
- save every for use with generators such as !x or key(T).
+ every s := read() do {...} doesn't loop because read() produces a
+ single value and then fails if resumed. Other "consumer" procedures
+ such as get() and pop() work the same way. Use a while loop with these
+ procedures, and save every for use with generators such as !x or
+ key(T).
E2. Why doesn't string invocation such as "foo"() work?
- 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 main() procedure. A simple reference suffices, as in
- refs := [foo, bar, baz]; it's not necessary to actually call it.
+ 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 main() procedure. A simple reference
+ suffices, as in refs := [foo, bar, baz]; it's not necessary to
+ actually call it.
- (Why does the linker remove unreferenced procedures? Because this can save
- huge amounts of memory for programs that use the library.)
+ (Why does the linker remove unreferenced procedures? To significantly
+ reduce the memory requirements of programs that use the library. There
+ was a time when this mattered.)
E3. How can I call a C function?
- 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 loadfunc(), 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 cfuncs and packs/loadfuncs 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 Calling C Functions from Icon,
- www.cs.arizona.edu/icon/docs/ipd240.htm.
+ You can't call an arbitrary C function, but you can load and call one
+ that is written to Icon's specifications. A tutorial appears in Icon
+ Analyst 36. Some examples can be found in the cfuncs and
+ packs/loadfuncs directories of the Icon program library.
The Jcon implementation allows Icon programs to call Java code that is
written to Jcon specifications.
E4. Can I open a bidirectional pipe?
- 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.
+ 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.
_________________________________________________________________
- This FAQ is edited by Gregg Townsend. It includes contributions from Ralph
- Griswold, Cliff Hathaway, Clint Jeffery, Bob Alexander, and Todd Proebsting.
+ This FAQ is edited by Gregg Townsend. It includes contributions from
+ Ralph Griswold, Cliff Hathaway, Clint Jeffery, Bob Alexander, and Todd
+ Proebsting.