I played with Free Pascal + Lazarus a few years back. The RAD tools reminded me a lot of Borland C++ Builder which I suppose isn’t surprising since Grandaddy Delphi was also a Borland product, now both of them are owned by Embarcadero.
Also fun to check out is Racket, a Scheme + batteries focused on building new languages and making it easy to make small languages for specific purposes (DSLs). I highly recommend Matthew Butterick’s Beautiful Racket, and a good place to start is actually one of the Appendices “Why Racket? Why Lisp?”. The book is typeset with Pollen a DSL Butterick wrote himself because he was unsatisfied with other typesetting tools.
I’ve played around a bit with Chicken Scheme, and keep meaning to circle around to either Racket or GNU Guile at some point. Though fennel has caused me to glance it’s way too.
I like these shemey-lisps, but its also so different in some respects from what im used to, its slow going for me.
I’d been fascinated by lisps and schemes for a long time, but my real introduction to using a lisp on the regular was Emacs Lisp. Emacs really is a wonderful environment to learn to love lisp because if you’re already attached to the editor, writing Lisp not only lets you configure Emacs, it lets you write useful programs that you can actually use day to day, binding them to keys or creating modes for your work.
One recent use I had beyond configuration was writing some tools that could be used to supercharge what would normally be basic snippets from the YASnippet library
Examples:
a keyword mage-namespace that when tab-completed expanded into the the properly formatted PSR-4 namespace by recursing up the directory tree to <project root>/app/code and appending directory names below that as parts of the name space. So a new file at <project root>/app/code/TFAW/Sales/Plugin/ would get the namespace \TFAW\Sales\Plugin
a keyword mage-model-interface that when tab-completed prompted you for field names and types and used that list of fields to generate a model interface with type-annotated getters and setters.
mage-model-interface's brother mage-model-implementation which creates a model class extending the appropriate Magento base class and implementing a similarly named interface, with the fields you specified becoming type-annotating doc-blocks, a type-annotated constructor, and getters and setters. The cool bit was that it remembered the last field-list you entered for either mage-modelinterfaceormage-model-implementation` since doing one right after the other was such a common operation, so it would offer the previous list you typed as a default value to just accept by hitting RET and continuing the completion of the snippet
I wrote a few others but they all depended on similar ingredients to those three. Emacs Lisp has its funny corners and weird edges and abandoned dusty batteries, but it also has such useful debugging tools that I miss in my day to day work. Since the editor is also the program you’re modifying and also the compiler and also the debugger, the integration is so smooth that sometimes I accidentally spend too much time trying to debug minor annoyances for tasks that would only take a minute or two to do manually. Debugging is as easy as navigating to the problem function, evaluating the function with edebug-defun (which evaluates a function as eval-defun would but also adds debugging symbols), setting a breakpoint and finding the bug. Once the bug is found, you can edit the function, eval-defun (C-x C-e) and the problem is fixed. You never had to restart the editor or re-compile.