Help Wanted!

The Unicon project is looking for help on the following topics as of 4/17/2010. Most of these topics are requests from the user community. Many of these would make excellent independent study or thesis topics. Net volunteers are also welcome. Anyone willing to pay for any of these projects should drop me a note, and I will hire appropriate students to do it at their bargain wage rates.

An asterisk (*) in the title indicates that Somebody is believed to be working on that topic, or has implemented a feature not yet adopted in the Unicon baseline.

Iconc, the optimizing compiler

The (Un)icon Virtual Machine and runtime system

Debugging Tools

Fonts

Additional OOP Features

Class Variables
Some additional syntax is needed to make it more convenient to declare variables who are shared among all instances of a class. Currently you can achieve this effect using globals and packages, and method static variables are shared among instances, but a more direct syntax would be handy.
Private and Read-Only-Publics
Unicon's predecessor Idol had private semantics and a public keyword. Private semantics were dropped because they added to complexity and space consumption without adding functionality. But arguably they have value and should be an option. While a distinction between private and protected does not seem very useful in Unicon, a scope that would be really useful would be a read-only public designation, to avoid the need for many accessor methods.

Patterns

The existing work on a pattern data type needs to be integrated better with string scanning.

Script support

Iconx needs to be extended to support directly executing .icn source files. Also, support for "one-liners" where the source code is supplied as a command line option. Icon recently added some support for this on UNIX; for Unicon we need a multiplatform solution if possible.

Programming Environment

Better programming tools are always in demand. An interactive interpreter, or an incremental compilation system, would make an excellent project. There are several ways to execute new unicon on the fly that was typed in interactively:
using system()
slow, doesn't pass non-string parameters easily
using load()
but load() does not "link" into the current program, and currently does not support calling procedures in another program directly, one would have to use a co-expression to change control to the other "program" and then call a desired procedure via some wrapper code. Also, load()'ing a lot may have garbage collection issues that haven't been discovered yet.
  • Undergrad-level project: develop a "library" model for Unicon modules, calling them through a co-expression interface using wrapper procedures
develop a new mechanism for linking and loading COMPILED Unicon code as a .so/.dll per loadfunc()
developing a pure interpreter
for strings or syntax trees constructed from a parse of the code.
As an experiment, I wrote a little program that reads lines from the user, and for each one, calls an eval(s) function that writes it to a file, compiles it, uses load(), and activates it. This is "slow", but runs in well under a second, it is not obvious that we have to discard unicon/icont and go with some pure interpreter in order to provide this type of service on modern machines. Handling stored procedures and globals in such an interpretive environment requires more thought, but still seems doable, and would be useful to experimenters and new users.

Easier C-calling interface

Udaykumar Batchu recently performed a project to simplify the calling of C functions from within the runtime system, improving on the traditional Icon loadfunc() dynamic loading utility. His work needs some refinement, and student Vincent Ho suggested an "inline C" capability that would fit in nicely. It would be interesting to add such a capability to the compiler and to the interpreter.

Embeddability; easier calling from C

It has been requested that we make the interpreter embeddable within C/C++ applications. Developing a standard mechanism for turning the Unicon VM into a callable C library would make an interesting project.

Two-way Pipes

Our ability to create two-way pipes needs to be extended to support external processes that think they are talking to a tty -- we need easy built-in capabilities similar to the popular expect(1) tool.

Printing Support; Report Generation

The graphics facilities would benefit from multiplatform printing support, including the generation of postscript or pdf. The database facilities would benefit from a report generator similar to crystal reports.

Messaging extensions

The messaging facilities done by Steve Lumos support popular protocols such as HTTP and POP. One thing we need to do is port these from UNIX to Win32. Another thing we need to do is add protocols. We would especially like to see SSL support added, using OpenSSL or some other free implementation of SSL. A critical extension for e-mail support is SMTP AUTH, the authenticated version of the SMTP protocol. We also need FTP, IMAP, NNTP, ...

Windows-native features

One of the most oft-requested Windows-specific features is COM support. The technical questions are: (a) is a platform independent interface possible (to support CORBA or javabeans as well, for example, and (b) how high-level can we make this API?

Porting iconx to be an Active Script Engine (see the "Visual Programmer" column from Microsoft Systems Journal online) would allow Icon to be an embedded scripting language for many Windows applications.

Google Protocol Buffers

Additional means of automating the transmission of structured or binary data would be valuable to Unicon -- Google's Protocol Buffers are an example.

Unicon for Small Systems

New platforms of particular interest are PDAs. David Price has performed a preliminary WinCE port including much of the 2D graphics facilities. It needs extensions in several areas, such as networking, and a strategy for adapting existing GUI windows to the small screen (scaling them, or adding automatic scrolling).

Improving reads()

reads(f,n) is often used to read large data in a contiguous chunk. If the amount is not known, it is tempting to use a very large n to get all available data, but asking for a number such as 1000000000 bytes attempts to physically allocate that many bytes, even if the actual data is much smaller. A smarter strategy should be implemented.

Compressed Archives

It would be neat if Unicon handled common archive and compressed archive formats such as .zip as easily as it does other file types.

Storing Structures to Disk

It would be interesting to add I/O modes in which arbitrary structure values (tables, objects, etc) could be written to and read from disk, making something like encode()/decode() a built-in.

Graphics

Parallel Computation Support

The rise of dual-core CPU's makes it inevitable that Unicon should be extended to support parallel computation. The interesting questions are whether it should support implicit or explicit parallelism or both.

Threads*

Icon and Unicon support a co-expression data type that is a synchronous thread. Work is currently underway on a pthreads-based concurrent VM.

DataParallel Operators*

Unicon should support (deep) structure-at-a-time operators, such as L1+L2 producing a list L3 with elements of L1 pairwise-summed with L2.

Persistent Structure Types

It would be neat if Unicon supported persistent structures, structures that survive across program executions. An approximation of this can be accomplished by storing xencoded structures in GDBM files, but it would be nice if it were easier and more direct.

Enhance error diagnostics

The error messages, particularly from the runtime system, can be enhanced to improve readability and help the programmer have a clue of how to fix the problem encountered. Long error tracebacks should be written to a file and a terser summary printed to standard error output. The default diagnostics style should be friendlier to new Unicon programmers. It might be possible to load/attach udb when a runtime error occurs.

Icont's parser needs to be modified to work with any YACC implementation. At present it fails on some 64-bit Linuxes if -O2 is turned on, apparently due an issue in the old AT&T YACC parser skeleton.

IDE - IVIB integration

The unicon IDE and IVIB need to to be joined together.

Benchmarks

Icon's benchmark suite from long ago is inadequate to compare performances usefully on modern systems. We need a new benchmark suite that (a) exercises the various features of the language, and (b) ideally would fit in with a portable benchmark suite used to compare performance across other very high level languages.