Features of Unicon
Already Have
- System interface (Unicon-1)
- OOP (Unicon preprocessor, descended from Idol)
- delete(L, i) and insert(L, i) from middle of list
- delete, insert, and member handle multiple elements
- key(L) generates the indexes of L
- string(x,y,z) produces x||y||z if they are all convertible
- mouse motion events
- window system clipboard I/O (but there's design change for it)
- Ability to read URL's just like local files.
- min() and max() builtins
- to-by generalized to work with real # strides (Tenaglia)
- Get rid of $ syntax in Idol, use object.method() instead
Must-haves (in book, not finished yet)
- A portable subset of Unicon. Can we raise the language level of
any of the Unicon facilities? (Li Lin, Dec. 11 delivery on Windows port)
- UNIX version of Wi (S. Bird; Dec. 11 delivery?)
- Database interface (ODBC, DBM), persistent tables. Nick Kline has
made some suggestions of issues that will affect the design. Serious
work on this to begin Dec. 14 or so.
- Type conversion and defaulting syntax. Waiting on this until I get
Ray's lex and yacc for Icon and wire up Idol to use them.
- autolinking for stdicon libraries
- changes to system()
- changes to select() & reads()
Seriously Wants
- Variable initializers (doable at least for locals and statics).
Should be simple addition to Idol.
- Idol support in type(), image(), size, random, subscript and bang
- Idol support for o.superclass.method(x), and o.m ! L
- Elementwise Structure-at-a-time operations on lists and tables; L1 + L2
- Packages
- Bit vectors. Not for book, later.
- Icon debugger. Not for book, later.
Wishes
- List sections as l-values (Anders Holzberg, Steve Wampler)
- past(s), produce positions following string s, == find(s)+*s (MJEvans)
- Assertions (Kostas Oikonomou)
- object(x), a function to test if something is an object
- round(f), ceiling(f), and floor(f)
- Ability to write URL's just like local files. :-)
- Named arguments a la Ada (parameters in any order)
- Class variables
- type(object) should return the class name, not the mangled classname__...
- Implicit string concatenation
- Macro $define's should allow arguments, a la cpp.
- table literals: initialized Table constructor t := table(0, key, val, key2, val2) or custom syntax, e.g. t := [ "foo":3, "bar":5] or ?
- Idol needs to be able to autogenerate HTML class catalogs
- open() and open(,"w") for a file selector dialog (Paul Abrahams)
- Two-way pipes (do we have this already?)
- OS-independent file naming
- Overloading built-in operators to handle new types (Bob Alexander).
I will go so far as to say: sufficient if this is for classes only,
and invokes named methods on those classes.
- delete(T,x,mode) modes: 1:x===key, 2:all x such that x===value
- stdlib, a ucode file that is autolinked in by icont
- !i short for 1 to i
- Pervasive convertibility to/from structure types, as for strings, and
integers. Lists and records can trivially convert to tables.
- Argument currying/culling/partial invocation
- p!r record invocation a la list invocation
- x <<< y and x >>> y for sort-compatible comparison of arbitrary values
- s[x] a set membership test, succeeds and produces x if x is in set s
- member(cs, s) should test if all elements of s are in cs
- set equivalence, subset, and superset functions or operators
- "Irregular expressions", or perhaps a simple built-in regexp(1) interface
- =cs for tab(many(cs)), a la =s
- ~=s for tab(find(s)), a la =s
- ~=cs for tab(upto(cs)), a la =s
- move() defaults to 1
- tab() defaults to 0
- s1[s2] equivalent to s1[find(s2,s1) +: *s2]
- s^^n equivalent to repl(s,n)
- s[c] equivalent to upto(c,s)
- .:= field access augmented assignment
- In/Out/InOut or VAR parameters
- Exceptions
- OpenGL API
- A "with" statement for records
- A xor B
- CopyArea() should allow multiple areas to be copied in one call
Implementation stuff
- Fix field table compression
- Event monitoring #ifdef's on a per-event-type basis
- Event monitoring support for trapped variable assignment/dereference
- Icont should generate code for unrecognized fieldnames.
r.foo = r["foo"] if foo is unrecognized
- add serial numbers to regions, so you can say "collecting string region 3"
- VM instruction tuning
- add a "checksum" for rapid cset equality?
- better support for tiny tables
Proposed for Removal
- entab/detab - demote to IPL
- save - remove as unsupported on most platforms; probably could be
demoted to IPL as a loadfunc if any platform still supports it.
Considered and Rejected
- open() and open(,"w") for a file selector dialog. Instead, the user
can use an appropriate IPL dialog or Windows native function.