RSSAmplifier

Blog

TurtleWare

RSS feed ↗10 posts

Latest posts

Building an AmigaOS Development Environment in 2026

Table of Contents Prerequisites Toolchain Emulator Installation Running executables Remote debugging Summary Resources Apropos of nothing, I decided to set up an Amiga development environment. Since figuring things out wasn't straightforward, I wrote down instructions for Linux about how to compile the first program and run it in an emulator. Enjoy! Prerequisites In this post I'm assuming that the…

A brief note about slot access cost in Common Lisp

Common Lisp is renowned for its excellent object system CLOS. Its implementation is often accompanied by the Metaobject Protocol that, while it is not part of the standard, allows programmers to customize the system underpinnings in numerous interesting ways. This level of customization doesn't come without a cost – some CLOS code paths will be slower compared to open-coding equivalent solutions…

McCLIM and 7GUIs - Part 1: The Counter

Table of Contents Version 1: Using Gadgets and Layouts Version 2: Using the CLIM Command Loop Conclusion For the last two months I've been polishing the upcoming release of McCLIM . The most notable change is the rewriting of the input editing and accepting-values abstractions. As it happens, I got tired of it, so as a breather I've decided to tackle something I had in mind for some time to…

Common Lisp and WebAssembly

Table of Contents Building ECL Building WECL Building user programs Extending ASDF Funding Using Common Lisp in WASM enabled runtimes is a new frontier for the Common Lisp ecosystem. In the previous post Using Common Lisp from inside the Browser I've discussed how to embed Common Lisp scripts directly on the website, discussed the foreign function interface to JavaScript and SLIME port called LIME…

Using Common Lisp from inside the Browser

Table of Contents Scripting a website with Common Lisp JS-FFI – low level interface LIME/SLUG – interacting from Emacs Injecting CL runtime in arbitrary websites Current Caveats Funding Web Embeddable Common Lisp is a project that brings Common Lisp and the Web Browser environments together. In this post I'll outline the current progress of the project and provide some technical details, including…

Dynamic Vars - Return of the Jedi

Table of Contents The protocol Control operators Synchronized hash tables with weakness First-class dynamic variables STANDARD-DYNAMIC-VARIABLE SURROGATE-DYNAMIC-VARIABLE Thread-local variables The protocol The implementation Thread-local slots What can we use it for? In the previous two posts I've presented an implementation of first-class dynamic variables using PROGV and a surrogate…

Dynamic Vars - The Empire Strikes Back

Table of Contents Thread Local storage exhausted The layer of indirection I can fix her Let's write some tests! Summary Thread Local storage exhausted In the last post I've described a technique to use dynamic variables by value instead of the name by utilizing the operator PROGV . Apparently it works fine on all Common Lisp implementations I've tried except from SBCL , where the number of thread…

Dynamic Vars - A New Hope

Table of Contents Dynamic Bindings The problem The solution Dynamic slots The context Summary Dynamic Bindings Common Lisp has an important language feature called dynamic binding . It is possible to rebind a dynamic variable somewhere on the call stack and downstream functions will see that new value, and when the stack is unwound, the old value is brought back. While Common Lisp does not specify…

Writing an ad hoc GUI for Coleslaw

Table of Contents Preliminary steps Embracing the chaos Presentations Managing a blog collection Managing a blog instance Big ball of mud Closing thoughts Coleslaw is a "Flexible Lisp Blogware". It is a program that I'm using to manage my blogs and allows for an offline blog compilation. The functionality of the website may be extended with plugins and the visual appearance is defined by…

Proxy Generic Function

It is often hard to refactor software implementing an independent specification. There are already clients of the API so we can't remove operators, and newly added operators must play by the specified rules. There are a few possibilities: break the user contract and make pre-existing software obsolete, or abandon some improvements. There is also an option that software is written in Common Lisp,…