Some things require client side development. It would be nice to have the same language available on the client side. See if doing something like what is done in Spil is possible here.
The source directory for Herd sources is hardcoded in the Files class. It should be moved into herd.properties file as herd.source.directory or similar.
The editor component uses Ace, which already has thid-party syntax hilighting support for Forth. That should be enabled for a nicer experience when editing.
Herd should already have most of the requirements in place for showing the constituent words of any word, and also recompiling that word when modified. Such ability would make it possible to live-edit a running program for fixing and debugging purposes.
ForthIDE still looks like it has been quickly hacked together. This appearance should be reduced by refactoring the whole class. Once refactored, all parts of the UI should be easily locatable in the source.
All words (built-in and defined) should be visible somewhere in the UI. Built-in words could be grouped by their WordSet and the description string could also be shown at least as a tooltip.
Defined words could also use some kind of additional documentation system. For example the stack effect diagram could be shown if available. Also some system for
defining a documentation string for each definition would be nice. That string could then
be shown along with the other information on that word.
Previously MySQL was used for the database backend. This should be replaced with hsqldb. Additionally all the stuff from the SQL class should be moved into the SQL wordset.
A production mode needs to be added. In this mode the IDE will not be available,
and instead a file to execute is specified and only the main panel is shown.
There are some word sets currently that simply wrap Java APIs. Those could by implemented in Herd if there was a simple API for interoperation with JVM code. Something like:
"com.vaadin.ui.Label" new "I am caption" .setValue
Let's add an interop wordset and special handling for the period. Same scheme as with Java dot notation from JScheme should be used, as that is used in Clojure as well and seems to be very effective.
Executing code and swithing between various views are good candidates for keyboard shortcuts. Reasonable shortcuts should be added for a quicker workflow.
The interpreter is currently in one large switch block. While this is the traditional way to implement Forth in a C-like language, it could be better to implement each word in its own class.
With an uniform interface for executing words it could be possible to compile defined words into series of method calls using the ASM tool.
As the JVM is a stack based VM, it may be possible to optimize things a bit by exploiting that. There are many limitations to fully using the JVM stack, but hopefully some gains in speed could be made.