Clint Jeffery To-Do List
TODAY
- When clicking "run program" with no file loaded, Unicon will prompt you to select a file. What I didn't notice was that it's a save prompt, not a "select file to compile and run" prompt. When I selected my source file, it overwrote it with a completely blank file.
- Look into ConfigureNotify events that make the window larger than
requested on startup
- Place Unicon book at Amazon/Kindle Direct Publishing and IngramSpark
- Try changing MaxStrLen to a larger number than 31-bits on 64-bit machines;
Jafar says it coredumps for him
- Add command line option to print out linker behavior: IPATH +
for each link requested, what .u is found.
- Update src/runtime/rlocal.r/internal_cmds and/or make it dependent
on specific Windows versions.
This Week
Steps to Make Uflex Production Grade
- Re-read the code.
- Cleanup the representation, e.g. the linked lists
- Debug the bug found by gigi
- Investigate: is it an NFA? If so, implement NFA2DFA conversion.
- Get it to where a unilex.l will work for the Unicon compiler.
- Validate on lexers for mainstream languages
For the City
- look for adjacent empty cells in the grid, report how many,
merge when possible.
- figure out # of overlaps in current layout; if none, shrink scale
- fix the user arrow visible on the unicon map; determine hardwired
semantics and parameters needed to support beyond NMSU maps.
- fix warnings on cve client link
- fix class browser navigation/jump to set the right tabitem first,
so that you don't get bogus nonexistent line number errors jumping in
the wrong file
- think about how to fix fast movement across grid boundaries
- think about how to incorporate new programs into an existing city
- add a menu item for launching an execution
- add calls to
EvGet()
into the null handler in cve
- write a standalone monitor that monitors class instance construction
and member variable references.
- some directories contain unrelated/unordered collections of code,
while others contain members of a single system. How should this be
reflected in visualization? Maybe: directories of unrelated programs
are suburbs with separation/yards, while a directory that is one big
program is a big building or row houses, no yards?
- use last-modified-time to tweak a building texture to reflect
is-it-maintained status
- think about merging src/model/TiledWall.icn into Wall.icn
Other stuff:
- reads(f, -1) doesn't work on popen'ed files.
- implement new keyword &config. table or record?
- Add appendix to UTR on threads, to document compiler subset.
- Look into whether delete old /tmp/uni* files?
- look at Phillip's nest4.icn program
- modify Unicon to auto replace upto('x') or upto("x") with find("x")
- create a way to escape double quotes in Windows Unicon command line args
- investigate using regular record constructors in rposix.r rec_structor
and the comparable facility in 3d
- build FTGL on mingw
- create an alternative to FTGL on mingw
Recent Stuff
- look into Lu Song's backward compatibility issue with old sesrit code.
- consider whether built-in record types ought to be auto-generated by
the linker
- make sure attribute "selection" is documented
- check attribute "selection" to be sure it doesn't leak memory
- extend attribute selection to take HTML input if available
(add attribute selectionmode??)
- modify Unicon 3D windows to accept also 2D HUD drawing. (Gigi)
- fix reported bug in "make dep" (Couldn't parse addressdb.icn)
- modify drawstring3d to only load a font first time it is used
- modify drawstring3d to not need C++ any more, only use <ftgl.h> not
legacy header files.
- fix ulex, or implement Unicon uflex
- lack of redeclaration errors on repeated global declarations!
- initially inheritance bug: initially is inherited but if it
takes explicit parameters they don't happen.
- Modify CVE server to include new FPS commands (fire, take damage)
- implement a JSON schema checker?
Proposed New Case Expression Implementation 2/2018
- analyze case expressions and assign them one of three categories:
(a) special case uses integer labels, (b) special case uses string labels,
or (c) not special enough, better stick with current implementation
- devise a working/workable integer label optimization
- devise a string label optimization using hash numbers and the integer
optimization
New Stuff Suggested by Phillip 1/2018
- Concurrent programming Documentation needs better samples
- Need Documentation: on designing for concurrency
- Need Documentation: on rewriting existing code to be thread safe
- Patterns Examples
- UDB: How to find source code in other directories
- Finish implementation book
- Concurrent programming seems still to be too low level
- We need higher
level parallel programming capability, like a parallel switch statement?
- Analyze whether it (say, every call) can be parallelized for free or not
- Analyze how much memory threads will need.
Current Stuff
- Add table union, difference, intersection operators
- implement E_Region and E_Size events
- Modify Wampler's codebase to use Connectable.
- implement &parent & &child - generators not lists
- change instanceOf() to accept either :: or __
- consider extending syntax to support thread { expr1, ..., exprN } ??
- add the ability to set default thread parameters e.g. string and blocksize
- When an assignment in a pattern match is made to a file, performing
output, it doesn't print out on the pattern step where it seems to
occur, it prints out like on the next pattern step. Even after we
added the flush. How come?
- Port pSieve.icn to use system thread package
- predicat.icn : look for duplicates
- addressgui -> convert to v2
- LoginDialog -> convert to v2, merge w/ CVE login(?), move into stddlg.icn
- move UniLib/Samples/*.icn into uni/progs
- move UniLib/Samples/UniDoc into uni/unidoc
- Figure out primary string leak in reverse-complement
- Plug all the easy leaks, get the fixes committed. 11 OK, 4 cosmetic,
3 serious leaks remain
- reverse-complement.icn - 260M strings
- thread-ring.icn - 152M blocks
- binary-trees.icn - 92MB
- regex-dna.icn - 8.6M strings, 840K blocks
- chameneos-redux.icn - 3MB
- mandelbrot.icn - 200K strings, 900K blocks
- k-nucleotide.icn, sequential - 750K strings
- concord.icn, deal.icn, ipxref.icn, queens.icn, rsg.icn, fannkuch.icn,
fasta.icn,
meteor-contest.icn, n-body.icn, spectral-norm.icn, pidigits.icn - OK
- pool.icn
- Figure out how to fix the thread leaks.
- Consider [: expr1 , ... , exprN :] as syntactic sugar for
[: expr1 :] ||| ... ||| [: exprN :]
- check if qualsize changed after G.C. event and if so, report an event.
- Migrate from jvoiplib to emiplib
- Get VOIP reliably working on all major platforms
- Fix tests/posix/system.icn to
- check whether first argument works as a list or a string
- check whether command name can be from path or relative to cwd
- check whether arguments 2-4 redirect stdin/stdout/stderr OK
- check whether arg 5 (mode) handles properly on integer or string arg
- Consider "fixing" critical region return/fail/break/next to unlock,
or issue a compiler warning or error on known-bad.
- add tests for trylock and for condition variables
- consider thread-safety options for library modules/procedures (copy(p)?)
For example should we
- do away with self-modifying globals/statics?
- add a base-pointer for statics into procedure blocks?
- &config - come up with a plan
- Review MaxCvtLen uses to ask if they'd be better with a larger buffer.
- Review MessageBox() vs. Notice(). Add MessageBox() goodness into Notice()
and then delete the duplication.
Misc Recent
- Think about eliminating Op_Areal if DescriptorDouble. It would require
that the linker be changed.
- Need to see if 1.8GB fread error occurs on many/all machines.
- Extend RTT to support declaration
statements in the middle of statement sequences.
- Windows: solutions for pasting from different character sets.
CF_OEMTEXT, CF_LOCALE?, CF_UNICODETEXT
- Statically identify suspends that never resume, and generate
faster code that doesn't recurse into interp()
- Add monitoring events to report hash table details: expansion,
lookup chain lengths
- installer - standard UNIX, get the man page in place,
add unicon.sh in /etc/profile.d etc.
- how to write a find() replacement - C calling example
- co-expression tutorial, and/or pull all co-expression material into one
place. concrete complete-program examples, step by step.
- review large list allocations in init.r, ralc.r, rmswin.ri, ropengl.ri
to see if they can be lazier, or faster with threading or SSE or by
initializing only the dwords.
- prevent linker optimization for globals whose names appear in
string literals (icont fix)
A topic so big, it deserves its own page.
Ivib Bugs
- When user enters a name of a method in a textbox, if they gave "()"
on the end of their method name, Ivib should not repeat it.
- Ivib event handler code should be extended to allow individual
key bindings, instead of just broad event categories.
Modify IVIB and/or GUI classes to allow Events for individual keystrokes,
such as "\r" or "q" or whatever.
- How to improve default "X" button behavior. Suggestion: removing the "X"
by default, at least for subdialogs. Making "non-fatality" the default.
- Mouse scroll doesn't work on all the scrollbars,
or doesn't work as it should, maybe especially on Linux
- Irreproducibles: resizing Ivib occasionally goes into terminal flickery
resizey hell. In some little toy dialog, every single event (including
mouse motion, activated the actual button click methods.
- Ivib custom component should have default classname of Component (?)
Graphics Facilities
- Texture() should turn texture=on
- Fg() should turn texture=off
- consider whether to support Texture(s, 0,1,0,0,1,0,1,1), i.e.
texture coordinates and texture image in same call
- rediscover standard texture names, get them finished/working
- mix color and texture via texture modes
- improve window-as-texture capability, verify that it can re-pull window
contents every refresh, possibly "unless window hasn't changed"
- Add a "texmode=rgb" in which texture coordinates are interpreted as
RGB triples and color gradients are interpolated.
- 3D Font support (Xft substitute?) on Windows.
Maybe look into technique used in http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/ which might eliminate need for Xft?
- consider adding a language feature for environment maps
Misc Stuff
- make a richer editabletextlist that can do background color
- Have we looked for and removed duplicated inherited methods in
buffertextlist.icn ?
- Consider automatic close() on EOF for files that were opened for reading.
- Write a optional library downloader that uses wget/uget to download
"canonical" jpeg/png/libz into unicon/src/lib/ if it is missing,
if the user asks for it.
- Add a j=4 or j=-j4 option for the "make Unicon" step
Unicon language extensions
- Add warnings for C-style #if or #ifdef, etc.
- Add warnings for semi-colon-insertion-induced surprises like ||| being
three repeated alternation operators at the beginning of a line.
- Add warnings for "known bad" combinations of calls, such as
move(many()) and suspend tab(), every-should-be-while and vice versa
- Add warnings or optimize things like many("x")
- Size of a file, *f, for number of characters remaining.
If a file is newly opened, this is equal to
stat(f).st_size
- Size of a network connection == # of characters previously processed?
Or # of characters available to read.
- Size of a window, *w, as an alias for *Pending(w). But we also like
it as an alias for WAttrib(w, "size")
- Should !w mean anything? Does it already? Should !net meaning anything?
Does it already? Probably they read text lines from w or net.
- "const" attributes
# Python L = (1, 2, 3) is a tuple
L := `[1, 2, 3] # get confused with csets?
record foo(a, b)
r := `foo("hello", 3.2)
- implement an efficient case expression for strings, so that
naive programmers don't have to recode them with tables of procedures.
- Think about adding '^abc' as an alias for &cset--'abc'.
What about a unary ^ operator, so it is just ^'abc' ?
Look into whether to support ranges, e.g. 'a-l'
- define new events for region allocation.
- go through Icon 9.5 and look for any other obvious improvements that we
should back in.
- co-expressions support in uprof
- Add to iconc the same "discarded file/procedure" info that icont -v3 gives
- ODBC - review/update code for modern ODBC standards, what is it with the recurring warnings?
- cleanup dead platforms? -- config directories
- cleanup dead platforms? -- #ifdefs
- Reduce # of libraries required to build Unicon.
- review CGI - claim that some character conversions are more general and should
be promoted. boilerplate head is not customizable, or isn't easy enough to customize.
- debug toxline-dedup program, preferably three-thread version
- More examples on how to use concurrency; thread pools etc.
- Much more thorough unicon -C testing and validation.
- Standard tests should test unicon -C as a matter of course
- IPL libraries -- some obsolete, maybe retire and/or remove from Unicon book if platform dead
-- consider hexadecimal to decimal conversion program, prints chart on screen with dead controls.
Utilities
- Make a Unicon pretty printer
- Make a Unicon call graph and dead code detector
- Make lists use array internally if constructing list-of-numbers
- Unicon book updates regarding arrays (maybe done)
- Debug and/or document better, the expanding memory regions semantics
- Better instrumentation and/or accounting for regions upon failure
- Remove temporary files left around in /tmp, e.g. /tmp/uni91018483-iconc
Earlier items; may need some updates and/or removals.
- write test suites for recently added Unicon features and tools
- extend the Unicon configuration tool to handle Concurrent/HAVE_PTHREADS/Patterns
- add diagnostic messages (to the Unicon configuration tool) about what
is necessary and missing to enable optional Unicon features such as
sound and graphics.
- expand the Unicon documentation on co-expressions to include one or more
complete program examples
- clarify Unicon documentation regarding the distinction between the
while
and every
keywords
- clarify Unicon documentation regarding the use and scope of
object-oriented variables and initializers (!)
- Propagate default "make" rules for Unicon config/build
- Update UB so OOP examples are complete programs and explain public-ness of fields properly
- eliminate duplication between parser/ and unicon/, check duplication in ide/
- test heavily the JPG and PNG support on windows
- extend syntax coloring editable textlist to do font attributes (bold, italics, underline)
- port Audio code to Windows
- Merge MSDOS and NT symbols down to MS
Clint and Phillip's To-Do List, November 2009
Portability
- make it easier to move iconx's to different machines
- Lazy loading of libraries.
- OpenGL seems to pose extra difficulties
Database Chapter of Unicon Book
- add example on creating a mysql database and table
Clint's Old To-Do List from May 2007
- Develop background printing
- Add attributes for viewport/perspective adjustment to 3D facilities
- Performance tune 3D facilities: use fewer slices for
spheres/cylinders/disks as they get further away, proportional to their
size
- Drop obviously
non-rendered primitives such as objects that are behind the camera
- Add a Canvas subclass of Panel that knows the full built-in Unicon
2D graphics repertoire.
- write an ilink.icn
- ability to load icont programs from an iconc program
- investigate why linker optimization on a large link (core.icn) does
not give back all the bytes and be equivalent to not linking it, if
you aren't using anything in it.