Holonforth
holonforth.com
holonforth.com
A hierarchical view of your programs, classes, functions, etc. on the left. The root node is where you started, so if you just open a class, you get the eveything that belongs to that class, but you can also open a whole namespace. On the right you can then edit the code.
https://help.sap.com/saphelp_gbt10/helpdata/EN/46/9d783e3a7d...
The syntax of ABAP may be not tho everyone's taste (modern ABAP looks better though), but the capabilities to write business software in a completely integrated system are magical.
The database is "just there". SQL to access the DB is a first class citizen of the language. Your datatypes are the same in the database and your programs. You can use the primitive datatypes to create rich datatypes with attached default values and validation logic. When you build a input field in the GUI and connect it to the database field everything just works.
That makes me really miss working with SAP.
(Of course there's lots of "business software" that doesn't need this kind of thing.)
It is the non-functional requirements that cause the most implementation problems.
Some other languages can exploit it too. And some clever web-based REPLs approximate decently to it.
I'd love to see this idea growing outside the Smalltalk world because is very valuable and influential to the DX (developer experience).
I vaguely remember seeing it in IBM's Visual Age for Java in the early 2000's.
Yes, it was pretty amazing.
Oh, if I'm recalling correctly, it had workspace for live scripting and it could inspect the objects returned by snippets as Smalltalk could?
Honestly, the problem is that people think they want faster horses. You see the usual banal comments here "what if the database crashes", "I just want to edit with Emacs", but no consideration (usually due to no exposure) of the upside of always having the program in a state that can be comprehended mechanically.
It's unfortunate, because it ties us to maintaining and building programs like it's the 70s. For a fresher take on what this could enable if the general programming population were a bit less reactionary, consider the (sadly moribund) http://mbeddr.com
The simplest way to handle this is by patching the old word to jump to the new definition. If it bothers you that that leaves junk around, you can write words that compact the dictionary.
Alternatively, if you have malloc/free, it’s easy to change the dictionary to be a list of pointers to malloced word definitions, and, when defining a word whose name matches that of an already existing word, to update that pointer to point to the new definition, and then cleanup the old definition by freeing its memory. That may fragment your heap, though, and may affect performance.
I'm just wondering how it works in Holonforth. I checked their guide as well.
Why not do the opposite -- have code live in files, index them and overlay a hierarchical browser on top?
You add the tools to the IDE.
As for database corruption - that is a well known issue databases have good resilience to crashes and power losses
Just having a built-in code editor (like the traditional "block editor" - or at least it was traditional in the last century) has some advantages - for instance if your editor commands are written in Forth you can use Forth as the scripting language for the editor, and create macros etc. on the spot just like you would with code editors such as Emacs or Vim.
It does have the disadvantages OP mentions.
You say, "you add the tools to the IDE"... Except some tools are too complex to code and test and you have too little time. In the end, you'll have to wait until someone else does it for you and if you are using niche software such as this one, you can wait a long time. Why wait for someone finally making a "diff" tool when it already exists for text files?
Database corruption is not something you can brush aside like this, because it can happen that a bug in your Forth system corrupts your database (or your image or your blockfile). When you make a critical change, you therefore have to make a backup of your system first. (As for AST, this is mostly irrelevant in Forth, which has almost no syntax).
These days I agree with OP. For better or worse, text files are the lowest common denominator, so text files have more advantages.
Generally speaking, this the same dilemma as with software that does a lot of things (for instance GitHub/Gitlab/Gitea, that are not just Git anymore). True, you benefit from the integration sometimes, but there's usually a couple of features that are weaker or done poorly. Functionality overlap with other software that go a bit overboard with feature integration. You can easily end up with two or three different wikis in each software. In the end, you either tell users to use just one of them, or you let them spread the information in the various wiki and let them blame each other because of the mess it creates.
The topic of "why are we still using flat files for source" is not exactly new. Code editors have evolved but clearly not in this direction - "language servers" were favored for instance. I think there is some kind of consensus that a language should not depend on an IDE. "Do one thing and do it well" is already hard enough.
Before that, there was a system on the Burroughs B20 series that had a similar design; browse on the left, edit on the right.
Yeah, I approve of non-linear code editors.
I think Smalltalk-72 did not have the browser.
.. yeah I have no idea. I barely glanced at this and I immediately thought of Content Management System and then had nightmare flashbacks to when I had to admin web servers running Wordpress and Whatever and ran away
There are lots of ways of organizing the world hierarchically, that you CAN do that does not mean it's helpful to do it, more `organized` does not imply better.
To save everyone a click: "The Holonforth programming systems combine browser, editor and umbilical target link. And in the DOS systems also: assembler, compiler, linker, debugger and interpreter."
I would literally rather have the title be "This programming system is going to change the world and put you out of a job if you don't learn it" rather than some random name.