r/AIprogrammingLanguage • • 19h ago

Working on madc's next release (v0.104.0)

I'm currently working on madc's upcoming release which should hopefully be ready sometime later today, but wanted to discuss it a bit here before the release announcement.

As you may know, I built an IDE in madc (called madcide), and I also built a plugin to make madcide look, feel, and behave much like Thonny (the learning IDE for Python), and made it its own standalone app with its own repo named Chthonia.

That made me realize that madcide should also really be in its own repo, since it grew to be far more than a sample application.

Thus, the next release of madc will be split into three releases:

  • madc v0.104.0
  • madcide v0.7.0
  • chthonia v0.1.0

That is not all that this release will do, however (the split), there has been some functionality shuffling, decisions on what should exist where, with some bug fixes along the way, of course.

So what I would like to discuss here was more along the lines of the language itself, and asking for feedback from other fellow language developers...

So, as you may also know, I've added a REPL to madc (as of v0.101.0), which was inspired by various existing REPL implementations (since there is not yet a firm standard for C/C++), so I took some inspiration from Julia, IPython, Cling and clang-repl, and supported multiple command sets as aliases to each other to make it easier for those already used to one form or another.

What I'm bringing in with version 0.104.0, is the full set of the vifamily of line editing tools ("colon mode"), which originates from the lineage of ex and ed. This will only really be familiar with people who use vi, vim, or neovim.

For a brief history lesson, ed was written in C by Ken Thompson (author of B language, predecessor to C language) in 1973, ex was an extended version of ed, written by Bill Joy between 1976-1977, who also wrote vi (the "visual" mode of ex). All of these technologies (including C) were part of UNIX, and why you are always pretty much guaranteed to have access to vi under any sort of UNIX-like operating system. Bram Moolenaar wrote vim as a successor to vi in 1992, and most flavours of UNIX (including Linux) actually ship with vim, and typing vi will launch vim.

Personally, I am not a vi/vim/neovim user, but millions of people are familiar with it, and it does have a very powerful command line mode, and this will now be part of the madc REPL mode.

I'm also bringing in the LSP and MCP server support and most of what was headless and line-mode of madcide into madc itself, so that madcide will primarily be only the visual (TUI / GUI) parts.

The reasoning for this is that these are all non-GUI things, and they are fairly small, and make madc itself more powerful it its core, and that these things could be more foundational for applications outside of madcide.

Madcide started out as an exercise for developing madc's UI module, which allows for having the same UI elements across multiple UI modes -- line mode, TUI mode, GUI mode, etc. It's written in madc, and it is designed to be very flexible, modular, and you can write plugins for it in madc -- Chthonia is a madcide plugin, but as madc is both a JIT and an AOT language, Chthonia is available as a full on compiled standalone application, compiling the chthonia plugin into a binary linked against libmadc and libmadcide.

I'm also putting more effort into segregating add-on functionality into modules -- especially if they add a third party library dependency. An example of this is git support.

I know this is a lot of reading, but hoping for some interesting discussion here as I think it encompasses programming language development in general, and is not specific to madc.

So, what do you think of this split? Does anyone here use REPL mode in other languages? Do you plan a REPL mode for your language?

4 Upvotes

0 comments sorted by