# Lisp

Lisp is a programming language with S-expression syntax.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Emacs arbitrary code execution flaw

DevFeed: [Emacs arbitrary code execution flaw](<https://devfeed.tech/articles/emacs-arbitrary-code-execution-flaw-21541.md>)

Original publisher: [Read original article](<https://lwn.net/Articles/1094224/>)

Author: jzb

Published: 2026-09-14T15:20:00Z

Content type: news

Language: en

Sources: [LWN.net](<https://devfeed.tech/sources/lwn-net.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [Maintainers](<https://devfeed.tech/topics/maintainers.md>)

Tags: [cve](<https://devfeed.tech/tags/cve.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [maintainers](<https://devfeed.tech/tags/maintainers.md>), [release](<https://devfeed.tech/tags/release.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>)

### AI overview

An incomplete fix for the Emacs arbitrary code execution flaw CVE-2024-53920 has been identified. Viewing or editing untrusted files in modes other than Emacs's Lisp mode can also trigger arbitrary code execution. The issue affects Emacs 24 and newer, with a minimal fix queued for Emacs 31.2; upstream maintainers do not expect to backport it to older releases.

### Source excerpt

Sean Whitton has announced that the original fix for an arbitrary code execution flaw in Emacs (CVE-2024-53920) was incomplete. Bas Alberts discovered that viewing or editing untrusted files in modes other than Emacs's Lisp mode can also result in arbitrary code execution. This problem affects all Emacs versions affected by CVE-2024-53920. This means Emacs 24 and newer, and possibly also older versions. A minimal fix, attached, is queued up for release with Emacs 31.2. We (the Emacs upstream maintainers) don't expect to backport the fix to older Emacs releases ourselves. LWN covered the original vulnerability in December 2024.

## From RSS to Atom

DevFeed: [From RSS to Atom](<https://devfeed.tech/articles/from-rss-to-atom-37668.md>)

Original publisher: [Read original article](<https://susam.net/from-rss-to-atom.html>)

Published: 2026-05-04T00:00:00Z

Content type: opinion

Language: en

Sources: [Susam Pal](<https://devfeed.tech/sources/susam-pal.md>)

Topics: [Atom Feed](<https://devfeed.tech/topics/atom-feed.md>), [RSS Feed](<https://devfeed.tech/topics/rss-feed.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Git](<https://devfeed.tech/topics/git.md>), [XML](<https://devfeed.tech/topics/xml.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [git](<https://devfeed.tech/tags/git.md>), [git-commit](<https://devfeed.tech/tags/git-commit.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [rss](<https://devfeed.tech/tags/rss.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

The author describes switching a personal website from RSS feeds to Atom feeds in 2026. The change was implemented in Common Lisp, took about an hour, and included replacing RSS item identifiers with UUID-based Atom entry identifiers and updating feed templates.

### Source excerpt

Yesterday, I switched my website from RSS feeds to Atom feeds. In case you are wondering whether you have somehow landed on an ancient post from 2010, no, you have not. Yes, this is the year 2026, and I have finally switched from RSS feeds to Atom feeds. Yes, I am fifteen, or perhaps twenty, years too late. Contents Impulse Coding Atom Entries Temporary Workaround Does It Matter? References Impulse Coding I have always wanted to do this but could never make the time for it. Finally, it happened while I was giving my brain some rest from my ongoing algebraic graph theory studies. That's when I felt like spending a little time on my website and doing a little Lisp to change the feeds from RSS to Atom. I suppose this was impulse coding, a bit like impulse buying, except that I ended up with an Atom feed instead of a new book. I find it quite surprising that when I have plenty of time, it usually does not occur to me to do these things, but when I am too busy and really short of time, these little ideas possess me during the short breaks I take. My personal website is one of my passion projects. Common Lisp is one of my favourite programming languages. So any time spent on this passion project using my favourite programming language is a very relaxing experience for me. It serves as an ideal break between intense study sessions. It took about an hour to implement the changes needed to make the switch from RSS to Atom. In the end, I could go back to my studies reinvigorated. In case you are curious, here is the Git commit where I implemented the change from RSS to Atom: 596e1dd. As you might notice, a large portion of the change consists of replacing the key attribute in each post with the uuid attribute. The key attribute value was used as the value of the <guid> element in the RSS feeds. While an arbitrary short string could serve as the <guid> element for the items in an RSS feed, the <id> element of the entries in an Atom feed needs to be a URI. It turns out UUID URN

## RSC for LISP Developers

DevFeed: [RSC for LISP Developers](<https://devfeed.tech/articles/rsc-for-lisp-developers-36194.md>)

Original publisher: [Read original article](<https://overreacted.io/rsc-for-lisp-developers/>)

Published: 2025-06-01T00:00:00Z

Content type: tutorial

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [modules](<https://devfeed.tech/topics/modules.md>), [React](<https://devfeed.tech/topics/react.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [client](<https://devfeed.tech/topics/client.md>), [Back end](<https://devfeed.tech/topics/backend.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [client](<https://devfeed.tech/tags/client.md>), [code](<https://devfeed.tech/tags/code.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [modules](<https://devfeed.tech/tags/modules.md>), [react](<https://devfeed.tech/tags/react.md>)

### AI overview

This article explains React Server Components to LISP developers by comparing RSC's treatment of client modules as deferred code with LISP quoting, where code can be treated as data. It describes how bundling and client-side evaluation enable modular behavior across server and client stages.

### Source excerpt

Quoting for modules.

## Repost: State of Lisp Implementations (2024)

DevFeed: [Repost: State of Lisp Implementations (2024)](<https://devfeed.tech/articles/repost-state-of-lisp-implementations-2024-11010.md>)

Original publisher: [Read original article](<https://blog.ipspace.net/2024/05/repost-state-of-lisp-implementations/>)

Published: 2024-05-07T06:21:00Z

Content type: opinion

Language: en

Sources: [ipSpace.net blog](<https://devfeed.tech/sources/ipspace-net-blog.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [Cisco](<https://devfeed.tech/topics/cisco.md>), [Networks](<https://devfeed.tech/topics/networks.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [evpn](<https://devfeed.tech/topics/evpn.md>)

Tags: [cisco](<https://devfeed.tech/tags/cisco.md>), [design](<https://devfeed.tech/tags/design.md>), [development](<https://devfeed.tech/tags/development.md>), [evpn](<https://devfeed.tech/tags/evpn.md>), [ios](<https://devfeed.tech/tags/ios.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [mobility](<https://devfeed.tech/tags/mobility.md>), [network-design](<https://devfeed.tech/tags/network-design.md>), [networks](<https://devfeed.tech/tags/networks.md>), [routing](<https://devfeed.tech/tags/routing.md>), [software](<https://devfeed.tech/tags/software.md>)

### AI overview

This repost discusses the uncertain state of LISP support, including its removal from IOS XR and concerns about Cisco's future support. It describes the consequences for extreme-mobility and safety-critical networks, including possible parallel LISP and PMIPv6 backbones and the need for supplier and technology diversity.

### Source excerpt

You might remember Béla Várkonyi's use of LISP to build resilient ground-to-airplane networks from last week's repost. It seems he's not exactly happy with the current level of LISP support, at least based on what he wrote as a response to Jeff McLaughlin's claim that "I can tell you that our support for EVPN does not, in any way, indicate the retirement of LISP for SD-Access.": Nice to hear the Cisco intends to support LISP. However, it is removed from IOS XR already. So it is not that clear... If Cisco will stop supporting LISP, then we will be forced to create our own LISP routers, since we need it for extreme mobility environments. Read more ...

## Repost: The Real LISP Mobility Use Case

DevFeed: [Repost: The Real LISP Mobility Use Case](<https://devfeed.tech/articles/repost-the-real-lisp-mobility-use-case-10989.md>)

Original publisher: [Read original article](<https://blog.ipspace.net/2024/04/repost-lisp-mobility/>)

Published: 2024-04-30T05:59:00Z

Content type: article

Language: en

Sources: [ipSpace.net blog](<https://devfeed.tech/sources/ipspace-net-blog.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [BGP](<https://devfeed.tech/topics/bgp.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>)

Tags: [bgp](<https://devfeed.tech/tags/bgp.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [mobility](<https://devfeed.tech/tags/mobility.md>), [networks](<https://devfeed.tech/tags/networks.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [routing](<https://devfeed.tech/tags/routing.md>)

### AI overview

The article discusses using LISP with PUBSUB for multilink mobility in ground-to-airplane networks. It argues that LISP may handle frequent mobility events, scale, and safety-critical requirements better than BGP in this use case, while noting that several protocol extensions and standardized reliable transport are still needed.

### Source excerpt

Béla Várkonyi is working on an interesting challenge: building ground-to-airplane(s) networks providing multilink mobility. Due to its relative simplicity, he claims LISP works much better than BGP in that environment. In some newer routers BGP would not be such a big bottleneck, but you need a lot of knob turning in BGP to get it right, while in LISP it is quite simple. If you have many thousands concurrent airplanes with multi-link and max. 16 subnets with different routing policies on each, and the radio links are going up and down, then you have a large number of mobility events. Read more ...

## Difftastic: A Structural Diff Tool for Programming Languages

DevFeed: [Difftastic: A Structural Diff Tool for Programming Languages](<https://devfeed.tech/articles/difftastic-the-fantastic-diff-22024.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2022/09/06/difftastic-the-fantastic-diff/>)

Author: Wilfred Hughes

Published: 2022-09-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Parsing](<https://devfeed.tech/topics/parsing.md>), [Tree-sitter](<https://devfeed.tech/topics/tree-sitter.md>), [Parser](<https://devfeed.tech/topics/parser.md>), [Code](<https://devfeed.tech/topics/code.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [parsing](<https://devfeed.tech/tags/parsing.md>), [programming](<https://devfeed.tech/tags/programming.md>), [time](<https://devfeed.tech/tags/time.md>)

### AI overview

The article explains how difftastic implements structural diffs for programming languages. It describes parsing source code with tree-sitter, converting parse trees into a uniform s-expression representation, and calculating diffs as a shortest-path problem on a directed acyclic graph.

### Source excerpt

I've always wanted a structural diff tool, so I built difftastic. This has been the most fascinating, most frustrating, and most challenging program I've ever written. How Hard Could It Be? If you write Lisp code for a while, you start to see code like JSON. Everything is basically a list. json-diff example json-diff already exists, and it's pretty good. I wanted something similar for programming languages. After a huge amount of experimentation, I have something that works. In this post, I'll show you how it works. I won't show the many, many dead ends and failed designs along the way. We can pretend that I got it right first time. Parsing The Code If I want to compare two programs, I first need a parse tree for each program. I need an accurate lexer, a basic parser, and I need to preserve comments. tree-sitter was a great fit here. You define a grammar in JSON or JS, and it generates a C library that anyone can use. It's not 100% accurate (e.g. the C++ parser doesn't have preprocessor data) but it's more than good enough. list: ($) => seq("(", repeat($._sexp), ")"), vector: ($) => seq("[", repeat($._sexp), "]"), Here's an excerpt from my Emacs Lisp grammar. There's a ton of tree-sitter parsers available too. Difftastic now supports 44 different syntaxes, and adding new ones is so straightforward that my manual includes a worked example. Using difftastic with Emacs Lisp After parsing, difftastic converts the tree-sitter parse tree to an s-expression. Everything is a list or an atom. This uniform representation enables the diffing logic to work on any language that I can parse. For example, given a JavaScript program like this: foo(1, 2) tree-sitter parses it to this parse tree: expression_statement call_expression identifier "foo" arguments ( number "1" , number "2" ) difftastic then converts the tree to this s-expression representation: List { open_content: "", children: [ Atom "foo", List { open_content: "(", children: [ Atom "1", Atom ",", Atom "2", ], close_con

## Graydon Hoare: 21 compilers and 3 orders of magnitude in 60 minutes

DevFeed: [Graydon Hoare: 21 compilers and 3 orders of magnitude in 60 minutes](<https://devfeed.tech/articles/graydon-hoare-21-compilers-and-3-orders-of-magnitude-in-60-minutes-29487.md>)

Original publisher: [Read original article](<http://lambda-the-ultimate.org/node/5648>)

Published: 2022-02-27T14:47:26Z

Content type: opinion

Language: en

Sources: [Lambda the Ultimate](<https://devfeed.tech/sources/lambda-the-ultimate.md>)

Topics: [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Machine learning](<https://devfeed.tech/topics/machine-learning.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [ml](<https://devfeed.tech/tags/ml.md>), [pdf](<https://devfeed.tech/tags/pdf.md>), [presentation](<https://devfeed.tech/tags/presentation.md>), [talk](<https://devfeed.tech/tags/talk.md>), [theory](<https://devfeed.tech/tags/theory.md>)

### AI overview

The article discusses Graydon Hoare's 2019 undergraduate talk about compiler design, summarizing different approaches ranging from large traditional compilers to variants using selective optimization, compiler-friendly languages, theory-driven tools, intermediate representations, interpretation, partial evaluation, or hand-written implementations.

### Source excerpt

In 2019, Graydon Hoare gave a talk to undergraduates (PDF of slides) trying to communicate a sense of what compilers looked like from the perspective of people who did it for a living. I've been aware of this talk for over a year and meant to submit a story here, but was overcome by the sheer number of excellent observations. I'll just summarise the groups he uses: The giants: by which he means the big compilers that are built the old-fashioned way that throw massive resources at attaining efficiency The variants, which use tricks to avoid being so massive: Fewer optimisations: be traditional, but be selective and only the optimisations that really pay off Use compiler-friendly languages, by which he is really taking about languages that are good for implementing compilers, like Lisp and ML Theory-driven meta-languages, esp. how something like yacc allows a traditional Dragon-book style compiler to be written more easily Base compiler on a carefully designed IR that is either easy to compile or reasonable to bytecode-interpret Exercise discretion to have the object code be a mix of compiled and interpreted Use sophisticated partial evaluation Forget tradition and implement everything directly by hand I really recommend spending time working through these slides. While much of the material I was familiar with, enough was new, and I really appreciated the well-made points, shout-outs to projects that deserve more visibility, such as Nanopass compilers and CakeML, and the presentation of the Futamura projections, a famously tricky concept, at the undergraduate level.

## Why Small Programming Languages Can Encourage Implementations Instead of Use

DevFeed: [Why Small Programming Languages Can Encourage Implementations Instead of Use](<https://devfeed.tech/articles/the-siren-song-of-little-languages-22023.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2019/03/24/the-siren-song-of-little-languages/>)

Author: Wilfred Hughes

Published: 2019-03-24T00:00:00Z

Content type: opinion

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Esolang](<https://devfeed.tech/topics/esolang.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>), [Racket](<https://devfeed.tech/topics/racket.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [languages](<https://devfeed.tech/tags/languages.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-languages](<https://devfeed.tech/tags/programming-languages.md>)

### AI overview

This commentary examines how small, elegant programming-language specifications can encourage developers to build implementations rather than use the language. It discusses BF, Scheme, Shen, Forth, Clojure, and Racket, and argues that language designers should consider the risk while recognizing that multiple implementations can also indicate language health.

### Source excerpt

Some programming languages languish due to obscurity. They lack breathless blog posts exclaiming how much nicer they are to use. Other languages are too ambitious. They aspire to support so many features that the original implementers struggle to get a first version working. For example, the type system in Fortress required constraint solving which took exponential time. Sometimes a usable language struggles simply because it's too much fun to write your own. Developers end up building their own implementation rather than actually using the language. The most obvious implementation-focused language is BF. Despite having many implementations, BF programmers have to encourage the implementers to actually try using the language! Scheme is also susceptible to this. Wikipedia lists 31 different Scheme implementations, not to mention the many toy implementations. Writing a Scheme is a great introduction to interpreters, especially once you get beyond the minimal lisp featureset. I've certainly written more implementation code than Scheme code. The problem seems to be languages with a small, well written specification. Shen is a multiparadigm lisp defined in terms of an elegant base language with only 46 system functions. This has resulted in a remarkable 15 third-party implementations, but only a small number of libraries implemented in the language. This phenomenon is not limited to lisps. Forth is also a language that developers often prefer to implement rather than use. Jones Forth is both a Forth tutorial and a discussion of how to build a Forth compiler. There are even stories of people spending years working on implementations without learning much of the language. Designing a language with a straightforward implementation is not a bad thing. It's just a pitfall that language designers need to be aware of. Some crypto systems have this problem too. It seems that we need languages to be big enough that new users write hello world in the language, not write a tool for

## Nerd Sniped by BINFMT\_MISC

DevFeed: [Nerd Sniped by BINFMT\_MISC](<https://devfeed.tech/articles/nerd-sniped-by-binfmt-misc-35180.md>)

Original publisher: [Read original article](<https://blog.jessfraz.com/post/nerd-sniped-by-binfmt_misc/>)

Published: 2018-03-04T15:25:24Z

Content type: article

Language: en

Sources: [Jessie Frazelle](<https://devfeed.tech/sources/jessie-frazelle.md>)

Topics: [Containers](<https://devfeed.tech/topics/containers.md>), [Kernel](<https://devfeed.tech/topics/kernel.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Scripting](<https://devfeed.tech/topics/scripting.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>)

Tags: [containers](<https://devfeed.tech/tags/containers.md>), [go](<https://devfeed.tech/tags/go.md>), [kernel](<https://devfeed.tech/tags/kernel.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [scripting](<https://devfeed.tech/tags/scripting.md>)

### AI overview

The author explores using BINFMT_MISC to run scripts in different languages without installing their runtimes on the host. They combine it with binctr, a project that embeds a container image into a static executable, and demonstrate the approach with a Common Lisp container.

### Source excerpt

This is a story about how I got nerd sniped by a blog post from Cloudflare Engineering. The TLDR on their post is that you can script in Go if you use BINFMT_MISC in the kernel. BINFMT_MISC is really well documented and awesome. In the end, all they had to do to script in Go was to mount the filesystem: $ mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc Then, register the Go script binary format: $ echo ':golang:E::go::/usr/local/bin/gorun:OC' | sudo tee /proc/sys/fs/binfmt_misc/register :golang:E::go::/usr/local/bin/gorun:OC Then you can ./ any go file on your host: $ chmod u+x helloscript.go $ ./helloscript.go Hello, world! They go through all the extraordinary details of exit codes for the shell and blah blah blah. It's a great post you should really read it. Do it, go read it, then come back here and I will take it to 11. ... Okay, cool, you are back. That post was dope right? I kinda want to do this with all languages. Because I LOVE SCRIPTING. Have you seen my cloud native dotfiles? My bash scripts smell like roses. Right, so I want to do this with all languages... but what I also hate is installing shit on my host. Ew, we have containers for those silly things. Luckily, I know a thing or two about containers... A few years ago I made a project called binctr. It creates fully static, unprivileged, self-contained, containers as executable binaries. (Wow that was a lot of words, let's break it down.) What binctr does is embed an entire container image (aka rootfs) into a fully static binary and when you execute the binary it will unpack the image and run it as a container. So you get containers without a daemon or privileges and without even having the image for the rootfs of the container. You just need this one binary. (Huge thanks to @lordcyphar who got rootless containers into runc so I could actually archive my gross hack for binctr.) Kinda seems like the perfect match for trying to use all languages with BINFMT_MISC. So I tried it. (Preface: this post s

## Remacs II: New Rust Features, GNU Emacs Compatibility Updates, and Build Improvements

DevFeed: [Remacs II: New Rust Features, GNU Emacs Compatibility Updates, and Build Improvements](<https://devfeed.tech/articles/these-weeks-in-remacs-ii-22015.md>)

Original publisher: [Read original article](<http://www.wilfred.me.uk/blog/2017/07/15/these-weeks-in-remacs-ii/>)

Author: Wilfred Hughes

Published: 2017-07-15T00:00:00Z

Content type: release

Language: en

Sources: [Wilfred Hughes](<https://devfeed.tech/sources/wilfred-hughes.md>)

Topics: [Rust](<https://devfeed.tech/topics/rust.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Docker Compose](<https://devfeed.tech/topics/docker-compose.md>), [GitHub](<https://devfeed.tech/topics/github.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [Linux](<https://devfeed.tech/topics/linux.md>), [macOS](<https://devfeed.tech/topics/macos.md>)

Tags: [docker](<https://devfeed.tech/tags/docker.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [github](<https://devfeed.tech/tags/github.md>), [linux](<https://devfeed.tech/tags/linux.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [macos](<https://devfeed.tech/tags/macos.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [rust](<https://devfeed.tech/tags/rust.md>)

### AI overview

This Remacs project update describes new Elisp primitive functions, Rust support, GNU Emacs compatibility documentation, platform fixes, a restructured codebase, procedural macros, Rust crates, and Docker Compose support for building without a local development toolchain.

### Source excerpt

It's been six months since the last Remacs update, and many new features have landed! Community We now have a Gitter chat room! Do drop by if you have any questions or wish to discuss Remacs. There's a low traffic Remacs Subreddit too. We've added @jeandudey and @birkenfeld to the GitHub collaborators, bringing us to five fine people who can approve your pull requests. Elisp Features We're still tracking upstream GNU Emacs master, so new features there are landing in Remacs (1, 2). We've added a lot new elisp primitive functions: Strings: characterp, multibyte conversions (1, 2, 3), and comparisons Vectors: type definitions, functions Buffers: type definitions, functions Symbols: various functions A much requested feature, adding Rust support to find-function, has been added. This was an unusual PR as it includes some elisp changes in Remacs. We now have documentation on our compatibility with GNU Emacs. This covers all known implementation differences, platform support differences, and describes how to detect Remacs in elisp code. Cleanup Platforms: We've dropped MS-DOS support. The Remacs build has been fixed on 32-bit Linux and 32-bit macOS. The codebase has been split out: remacs-lib (Rust equivalents of gnulib) remacs-sys (type definitions of Emacs types and C functions) remacs-macros (procedural macros supporting elisp primitive functions in Rust) src (Rust implementation code of elisp) Signal name mapping is pure Rust code. We now run rustfmt on every PR. If you fancy building Remacs without installing a dev toolchain (compilers, C libraries etc), there's now a docker-compose.yml to make your life easy. Macros It wouldn't be a proper lisp project without some macro magic. After several PRs and discussions, Remacs now includes a procedural macro to simplify defining elisp functions in Rust. For example, here's vectorp: /// Return t if OBJECT is a vector. #[lisp_fn] fn vectorp(object: LispObject) -> LispObject { LispObject::from_bool(object.is_vector()) } Lever

## Find The Missing Integer

DevFeed: [Find The Missing Integer](<https://devfeed.tech/articles/find-the-missing-integer-34556.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2017/05/find-the-missing-integer/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2017-05-30T17:56:54Z

Content type: article

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [math](<https://devfeed.tech/topics/math.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Computer science](<https://devfeed.tech/topics/computer-science.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Python](<https://devfeed.tech/topics/python.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [data-structure](<https://devfeed.tech/tags/data-structure.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [math](<https://devfeed.tech/tags/math.md>), [python](<https://devfeed.tech/tags/python.md>), [set](<https://devfeed.tech/tags/set.md>), [sorting](<https://devfeed.tech/tags/sorting.md>)

### AI overview

The article examines ways to find missing elements in a list. It contrasts sorting and the Gauss-sum method for one missing integer with set difference, which can handle multiple missing entries and arbitrary data types in Common Lisp and Python.

### Source excerpt

A recent interview question that I had to review was spelled like this: Find missing int element into array 1..100 Of course at first read I got it wrong, you have only one integer to look for into the array. So while the obvious idea was to apply classic sorting techniques and minimize array traversal to handle complexity (time and space), it turns out there's a much simpler way to do it if you remember your math lessons from younger. But is it that much simpler?

## SICP in Clojure - Chapter 5

DevFeed: [SICP in Clojure - Chapter 5](<https://devfeed.tech/articles/sicp-in-clojure-chapter-5-22368.md>)

Original publisher: [Read original article](<http://www.afronski.pl/sicp-in-clojure/2015/10/19/sicp-in-clojure-chapter-5.html>)

Author: Wojtek Gawroński (afronski)

Published: 2015-10-19T14:00:00Z

Content type: tutorial

Language: en

Sources: [Wojtek Gawroński](<https://devfeed.tech/sources/wojtek-gawronski.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>)

Tags: [blog-post](<https://devfeed.tech/tags/blog-post.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [css](<https://devfeed.tech/tags/css.md>), [css3](<https://devfeed.tech/tags/css3.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [gc](<https://devfeed.tech/tags/gc.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [html](<https://devfeed.tech/tags/html.md>), [html5](<https://devfeed.tech/tags/html5.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [languages](<https://devfeed.tech/tags/languages.md>), [mono](<https://devfeed.tech/tags/mono.md>), [net](<https://devfeed.tech/tags/net.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [sicp](<https://devfeed.tech/tags/sicp.md>), [vagrant](<https://devfeed.tech/tags/vagrant.md>), [webgl](<https://devfeed.tech/tags/webgl.md>)

### AI overview

This blog post discusses Chapter 5 of Structure and Interpretation of Computer Programs through Clojure. It explains register machines, their data paths and controllers, and the relationship between hardware, Lisp-like languages, and compiler construction.

### Source excerpt

SICP in Clojure - Chapter 5 In one of the previous blog posts I have announced that I would like to start a new series of posts. It is a persistent journal from my journey through aforementioned book. I hope that you will enjoy it and find it useful - the main goal is to make this series a place where we can return in future, recall ideas and thoughts that accompanied reading process. Introduction We are heading to the end of the book. It is the last chapter, and in the previous blog post I have already mentioned that last two chapters are really specific. And that is true, especially in terms of 5th chapter's content. High-level Convenience Using high-level languages have many benefits. In terms of Clojure and other Lisp-like languages I would start with an automatic memory management and GC, various data structures or various optimizations, like tail-recursion etc. We do not think very often about how it is implemented, especially at the lowest level - in the hardware. Can you imagine how the hardware should look like, to be capable of running code written in programming language from Lisp family? This is the main topic of the last chapter. Authors are starting with basic theory related to register machines and ending with the recipe for building a compiler. This blog post will be mostly theoretical, and instead of code examples, and exercises related with a topic "How to build a Clojure compiler", we will take a peek under the hood, directly into the language implementation. But first, let's bring some definitions to the table. What is a register machine? Register machine is a type of a computer, which sequentially executes instructions. Those instructions are operating and modifying a set of a memory elements called registers. A typical operation will take operation arguments from registers, and it will push the result of that instruction to another register. When it comes to the designing of such machines, at first you need to create its data paths - which the

## SICP in Clojure - Chapter 4

DevFeed: [SICP in Clojure - Chapter 4](<https://devfeed.tech/articles/sicp-in-clojure-chapter-4-22367.md>)

Original publisher: [Read original article](<http://www.afronski.pl/sicp-in-clojure/2015/10/05/sicp-in-clojure-chapter-4.html>)

Author: Wojtek Gawroński (afronski)

Published: 2015-10-05T14:00:00Z

Content type: tutorial

Language: en

Sources: [Wojtek Gawroński](<https://devfeed.tech/sources/wojtek-gawronski.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Code](<https://devfeed.tech/topics/code.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>)

Tags: [abstraction](<https://devfeed.tech/tags/abstraction.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [css](<https://devfeed.tech/tags/css.md>), [css3](<https://devfeed.tech/tags/css3.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [functional](<https://devfeed.tech/tags/functional.md>), [html](<https://devfeed.tech/tags/html.md>), [html5](<https://devfeed.tech/tags/html5.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [mono](<https://devfeed.tech/tags/mono.md>), [net](<https://devfeed.tech/tags/net.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [sicp](<https://devfeed.tech/tags/sicp.md>), [structure](<https://devfeed.tech/tags/structure.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [vagrant](<https://devfeed.tech/tags/vagrant.md>), [webgl](<https://devfeed.tech/tags/webgl.md>)

### AI overview

This chapter in a series on SICP in Clojure explains Lisp concepts including homoiconicity, metalinguistic abstraction, and metacircular evaluators. It describes how homoiconic languages represent program structure as data and introduces evaluators written in the language they interpret.

### Source excerpt

SICP in Clojure - Chapter 4 In one of the previous blog posts I have announced that I would like to start a new series of posts. It is a persistent journal from my journey through aforementioned book. I hope that you will enjoy it and find it useful - the main goal is to make this series a place where we can return in future, recall ideas and thoughts that accompanied reading process. Introduction By finishing the previous chapter we learned more about functional programming, designing and dealing with stateful computation and a little bit about laziness. It was pretty much a general purpose programming book till now. Last two chapters of the book are really ... Lispy. :wink: Chapter which will be discussed today is focused on Lisp core values built around universal evaluator, homoiconicity and linguistic abstractions. What is homoiconicity? Very concise, I would say a mathematical, definition will explain it as a isomorphic relation between language AST (Abstract Syntax Tree) and its syntax. In more human friendly words - it is a property of a programming language in which the program structure is similar to its syntax. If such language is homoiconic, it allows all code in the language to be accessed and transformed as data, using the same representation - because AST is exactly the same as the language itself. All languages from Lisp family have this property, also languages like Io, Julia or Prolog also have this ability (to a certain degree of course). Keep in mind that it does not mean that having a macros system in the language makes it homoiconic. Metalinguistic abstraction Title of this section sounds like a difficult concept, where the core idea is really simple. Aforementioned abstraction is an ability to create new languages. We have done that previously (e.g. by creating various Domain Specific Languages when solving exercises). By the creation, authors also mean ability to evaluate (or interpret) constructs written in that newly created dialect, by calcul

## SICP in Clojure - Chapter 3

DevFeed: [SICP in Clojure - Chapter 3](<https://devfeed.tech/articles/sicp-in-clojure-chapter-3-22366.md>)

Original publisher: [Read original article](<http://www.afronski.pl/sicp-in-clojure/2015/09/18/sicp-in-clojure-chapter-3.html>)

Author: Wojtek Gawroński (afronski)

Published: 2015-09-18T14:00:00Z

Content type: article

Language: en

Sources: [Wojtek Gawroński](<https://devfeed.tech/sources/wojtek-gawronski.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Functional programming](<https://devfeed.tech/topics/functional-programming.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [beginners](<https://devfeed.tech/tags/beginners.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [css](<https://devfeed.tech/tags/css.md>), [css3](<https://devfeed.tech/tags/css3.md>), [data-structures](<https://devfeed.tech/tags/data-structures.md>), [design](<https://devfeed.tech/tags/design.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [functional](<https://devfeed.tech/tags/functional.md>), [functional-programming](<https://devfeed.tech/tags/functional-programming.md>), [html](<https://devfeed.tech/tags/html.md>), [html5](<https://devfeed.tech/tags/html5.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [learning](<https://devfeed.tech/tags/learning.md>), [mono](<https://devfeed.tech/tags/mono.md>), [net](<https://devfeed.tech/tags/net.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [programming](<https://devfeed.tech/tags/programming.md>), [sicp](<https://devfeed.tech/tags/sicp.md>), [software-design](<https://devfeed.tech/tags/software-design.md>), [vagrant](<https://devfeed.tech/tags/vagrant.md>), [webgl](<https://devfeed.tech/tags/webgl.md>)

### AI overview

A journal-style discussion of studying SICP through Clojure, explaining how the book's treatment of software design, functional programming, modularity, and data structures can complement learning a Lisp-like language while requiring care with Scheme-specific concepts.

### Source excerpt

SICP in Clojure - Chapter 3 In one of the previous blog posts I have announced that I would like to start a new series of posts. It is a persistent journal from my journey through aforementioned book. I hope that you will enjoy it and find it useful - the main goal is to make this series a place where we can return in future, recall ideas and thoughts that accompanied reading process. Introduction In the previous blog post (which had surprisingly good reception on the Hacker News) we have analyzed second chapter of the book. We did not know, that around the corner there is a ground breaking "twist" prepared by the authors in the 3rd chapter. We will face it today. I should also mention that recently SICP Distilled went publicly, which is also a very good tour on the book, with a different approach. Nevertheless, I am still going my way through the book and I have got couple of interesting observations from the aforementioned chapter. But first, I would like to address one question which was posted on the Hacker News thread. Clojure is not a Scheme and SICP will not help you to learn Clojure Even if the first part is not debatable at all (how come one language could be identical to another one, even if they have common roots), then the second one is definitely dependent on the point of view. Mine is really obvious - Clojure is my first contact with a Lisp-like language. And book has much more to offer than a simple language course. I would say that a language course and SICP can be complementary. How? Basically (from my observations) aforementioned book is about good software design and how to approach functional programming and functional design in a dynamicly typed language. It attacks various problems like modularity, data structures, and many more. It provides a good foundation for beginners, and I strongly believe that it can be beneficial for more advanced programmers. By taking that book and completely new language, I am treating this book more like a referenc

## Quicklisp and debian

DevFeed: [Quicklisp and debian](<https://devfeed.tech/articles/quicklisp-and-debian-34553.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2015/05/quicklisp-and-debian/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2015-05-02T14:06:00Z

Content type: tutorial

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Debian](<https://devfeed.tech/topics/debian.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Software](<https://devfeed.tech/topics/software.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [releases](<https://devfeed.tech/topics/releases.md>)

Tags: [automate](<https://devfeed.tech/tags/automate.md>), [automated](<https://devfeed.tech/tags/automated.md>), [debian](<https://devfeed.tech/tags/debian.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [library](<https://devfeed.tech/tags/library.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [releases](<https://devfeed.tech/tags/releases.md>)

### AI overview

The article describes using Quicklisp as an upstream source for packaging Common Lisp libraries for Debian. It explains how the ql-to-deb software reads Quicklisp metadata, compares releases with managed Debian packages, automates updates, and supports testing and signing packages before upload.

### Source excerpt

Common Lisp users are very happy to use Quicklisp when it comes to downloading and maintaining dependencies between their own code and the librairies it is using.

## Make a Lisp in Nim

DevFeed: [Make a Lisp in Nim](<https://devfeed.tech/articles/make-a-lisp-in-nim-30824.md>)

Original publisher: [Read original article](<https://hookrace.net/blog/make-a-lisp-in-nim/>)

Published: 2015-03-03T23:00:00Z

Content type: tutorial

Language: en

Sources: [Dennis Felsing](<https://devfeed.tech/sources/dennis-felsing.md>)

Topics: [Nim](<https://devfeed.tech/topics/nim.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Code](<https://devfeed.tech/topics/code.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [make](<https://devfeed.tech/topics/make.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [nim](<https://devfeed.tech/tags/nim.md>), [programming](<https://devfeed.tech/tags/programming.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

The article describes implementing a Lisp interpreter in Nim by following the Make a Lisp guide. It explains how to build, run, and test the implementation, and reports rough benchmark results comparing Nim with several other languages. The author notes that the measurements are not optimized or definitive.

### Source excerpt

I spent the last weekend working through the amazing guide for Make a Lisp, writing a Lisp interpreter in Nim. The final result just made it into the repository. Running the Nim version is pretty simple. You need the Nim compiler from the devel branch and nre which can be installed through nimble. After installing those you can build and run the MAL interpreter: $ cd nim $ make # OR $ nimble build $ ./stepA_mal Mal [nim] user> 12 12 user> (+ 2 3) 5 Running the tests: $ cd .. $ make "test^nim^step1" # A single test $ make "test^nim" # All tests $ make "perf^nim" # All benchmarks There is a nice presentation in MAL about MAL you can read: $ cd nim $ ./stepA_mal ../examples/clojurewest2014.mal And you can run MAL implented in MAL itself using the Nim interpreter: $ ./stepA_mal ../mal/stepA_mal.mal Mal [nim-mal] mal-user> The benchmark results from Joel Martin, the author of MAL, don't look bad for Nim. Edit: Note that these are just rough measurements to see that the Nim implementation is doing fine. Don't judge the other languages for their numbers, which may not have ideal implementations performance-wise. In the short benchmarks Nim is the fastest, in the long benchmark only the JVM can beat it. I didn't really try to optimize and oriented mostly on the Python implementation, which is quite a lot slower as you can see. So it's pretty nice to see idiomatic Nim performing well: perf1 perf2 perf3 macros math macros ms ms iters/sec java 6 24 17969 scala 47 87 15963 nim 1 1 11121 ocaml 1 3 7063 cs 10 11 5414 vb 12 13 4523 rust 2 5 4084 c 1 4 3649 go 1 6 3048 racket 3 10 2461 coffee 5 11 2326 js 6 14 1726 ruby 4 15 1255 haskell 4 14 1163 clojure 11 23 1174 forth 9 29 563 php 13 51 331 python 14 51 304 bash 1673 9000 276 perl 18 69 215 ps 41 332 48 R 116 490 28 miniMAL 779 3448 4 matlab 1688 5844 2 make 3427 28453 0 I also didn't really aim for a low amount of code but rather good readability, but it may still be interesting to look at. I guess Nim's size being so close to

## Why Clojure's Simplicity Can Make It Accessible and Practical

DevFeed: [Why Clojure's Simplicity Can Make It Accessible and Practical](<https://devfeed.tech/articles/clojure-is-still-not-for-geniuses-32104.md>)

Original publisher: [Read original article](<https://adambard.com/blog/clojure-is-not-even-for-clever-people/>)

Published: 2014-11-24T00:00:00Z

Content type: opinion

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [essay](<https://devfeed.tech/tags/essay.md>), [language](<https://devfeed.tech/tags/language.md>), [languages](<https://devfeed.tech/tags/languages.md>), [practical](<https://devfeed.tech/tags/practical.md>), [simplicity](<https://devfeed.tech/tags/simplicity.md>)

### AI overview

This essay argues that Clojure's regular syntax and emphasis on simplicity can make the language easier to read, write, and understand. It focuses on accessibility and practical use rather than advanced Lisp concepts, and includes a brief syntax primer.

### Source excerpt

The inspiration for the article I wrote last week entitled Clojure is not for geniuses was inspired by Tommy Hall's talk at Euroclojure 2014, wherein he made an offhand joke about preferring Clojure for its minimal syntax, as he possesses a small brain (both his blog and his head suggest this assertion is false). I had intended to bring this up with the original article, but got sidetracked talking about immutable things and never got back around to it. Here I'd like to address that, along with some discussion that arose in various forums after the first article.

## My Top Clojure Articles

DevFeed: [My Top Clojure Articles](<https://devfeed.tech/articles/my-top-clojure-articles-32129.md>)

Original publisher: [Read original article](<https://adambard.com/blog/greatest-clojure-hits/>)

Published: 2014-07-07T00:00:00Z

Content type: article

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [coding](<https://devfeed.tech/topics/coding.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [beginner](<https://devfeed.tech/tags/beginner.md>), [clojure](<https://devfeed.tech/tags/clojure.md>), [coding](<https://devfeed.tech/tags/coding.md>), [functional](<https://devfeed.tech/tags/functional.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [repl](<https://devfeed.tech/tags/repl.md>), [stream-processing](<https://devfeed.tech/tags/stream-processing.md>), [techniques](<https://devfeed.tech/tags/techniques.md>)

### AI overview

A curated collection of the author's beginner-to-intermediate Clojure articles, ordered by difficulty. It introduces Clojure's practical features, functional programming practices, error handling, web applications, macros, protocols, reducers, concurrency, and libraries.

### Source excerpt

For the past few years, most of my posts have been beginner-intermediate essays on various clojure features and coding techniques. Since a lot of people have told me that they like my blog as a genre piece, I decided to pull some of my favorites into one place, and order them by difficulty, from Clojure beginner on up so that folks don't have to root around.

## 7th European Lisp Symposium

DevFeed: [7th European Lisp Symposium](<https://devfeed.tech/articles/7th-european-lisp-symposium-34624.md>)

Original publisher: [Read original article](<https://tapoueh.org/conf/7th-european-lisp-symposium/>)

Published: 2014-05-04T22:00:00Z

Content type: opinion

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Python](<https://devfeed.tech/topics/python.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [language](<https://devfeed.tech/tags/language.md>), [lightning](<https://devfeed.tech/tags/lightning.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [modern](<https://devfeed.tech/tags/modern.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>), [rewrite](<https://devfeed.tech/tags/rewrite.md>), [switching](<https://devfeed.tech/tags/switching.md>), [talk](<https://devfeed.tech/tags/talk.md>)

### AI overview

A lightning talk at the 7th European Lisp Symposium discusses rewriting pgloader from Python in Common Lisp. The stated motivation was wanting a modern programming language.

### Source excerpt

A lightning talk about pgloader and why I chose to rewrite it enterily, switching from Python to Common Lisp. TL;DR -- I wanted a Modern Programming Language.

## Homoiconicity: Code as Data in Lisp Macros

DevFeed: [Homoiconicity: Code as Data in Lisp Macros](<https://devfeed.tech/articles/just-what-does-code-as-data-mean-anyway-32173.md>)

Original publisher: [Read original article](<https://adambard.com/blog/what-is-homoiconicity/>)

Published: 2014-01-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>)

Tags: [lisp](<https://devfeed.tech/tags/lisp.md>), [macros](<https://devfeed.tech/tags/macros.md>), [metaprogramming](<https://devfeed.tech/tags/metaprogramming.md>)

### AI overview

An introductory explanation of homoiconicity in Lisp-family languages. It contrasts Lisp macros, which manipulate abstract syntax trees as values, with C-style string substitution and uses a macro example to show how code can generate code.

### Source excerpt

Recently, I've seen popular articles on macros and metaprogramming in Nimrod and Elixir. Both of these are wonderful metaprogramming systems, to be sure, but I couldn't help but imagine some in the audience smirking inwardly - and occasionally less inwardly. What odd syntax! How out-of-place they are! If only there existed a homiconic language, they think sarcastically, that could eliminate the need for awkward and forced syntax. Of course, these smug bastards are users of any of the LISP family of languages.

## Live development with Light Table for JavaScript, Python, and Clojure

DevFeed: [Live development with Light Table for JavaScript, Python, and Clojure](<https://devfeed.tech/articles/live-development-is-the-way-of-the-future-32122.md>)

Original publisher: [Read original article](<https://adambard.com/blog/fireplace-dot-vim-clojures-secret-weapon/>)

Published: 2013-07-10T00:00:00Z

Content type: article

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [coding](<https://devfeed.tech/topics/coding.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [like](<https://devfeed.tech/topics/like.md>), [Python](<https://devfeed.tech/topics/python.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Erlang](<https://devfeed.tech/topics/erlang.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [coding](<https://devfeed.tech/tags/coding.md>), [development](<https://devfeed.tech/tags/development.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [languages](<https://devfeed.tech/tags/languages.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

The article explains live development as sending code from an editor or tool to a REPL for evaluation. It discusses exploratory programming and reviews Light Table's support for JavaScript, Python, and Clojure, including its inline evaluation workflow.

### Source excerpt

Live development is nothing new; it's been well-explored in Lisps and in other languages like Smalltalk and Erlang since more or less the dawn of man. Emacs was for a long time - and by many still is - considered the only way to develop for Lisp, thanks to SLIME. But I with projects such as Light Table, and a growing popularity of functional and dynamic languages in general, I think we'll see live coding become seriously popular as capable mainstream tools collide with capable mainstream languages.

## Emacs Muse meets Common Lisp

DevFeed: [Emacs Muse meets Common Lisp](<https://devfeed.tech/articles/emacs-muse-meets-common-lisp-34507.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2013/07/emacs-muse-meets-common-lisp/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2013-07-08T11:34:00Z

Content type: article

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [Common Lisp](<https://devfeed.tech/topics/common-lisp.md>), [Publishing](<https://devfeed.tech/topics/publishing.md>), [HTML](<https://devfeed.tech/topics/html.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [emacs](<https://devfeed.tech/tags/emacs.md>), [git](<https://devfeed.tech/tags/git.md>), [hooks](<https://devfeed.tech/tags/hooks.md>), [html](<https://devfeed.tech/tags/html.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [muse](<https://devfeed.tech/tags/muse.md>), [static](<https://devfeed.tech/tags/static.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

The article describes using Emacs Muse to write and publish a blog, including support for inline images and static website generation. It then explains replacing the Emacs Lisp-based setup with a Common Lisp project that parses Muse files, generates HTML, and dynamically adds site sections through server-side includes.

### Source excerpt

This blog of mine is written in the very good Emacs Muse format, that I find much more friendly to writing articles than both org-mode and markdown-mode that I both use in a regular basis too. The main think that I like in Muse that those two others lack is the support for displaying images inline. *Here's what it looks like to edit with Emacs Muse* The Muse publishing system The idea is that you edit .muse files in Emacs then use a command to publish your file to some format like HTML. You can also publish a whole project, and then enjoy a fully static website that you can deploy on some URL.

## Emacs Lisp: Font Lock for Clojure's Partial

DevFeed: [Emacs Lisp: Font Lock for Clojure's Partial](<https://devfeed.tech/articles/emacs-lisp-font-lock-for-clojure-s-partial-31900.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2013/05/emacs-lisp-font-lock-for-clojures.html>)

Author: Jay (noreply@blogger.com)

Published: 2013-05-15T12:00:00Z

Content type: tutorial

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [Clojure](<https://devfeed.tech/topics/clojure.md>), [Emacs](<https://devfeed.tech/topics/emacs.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>), [function](<https://devfeed.tech/topics/function.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [code](<https://devfeed.tech/tags/code.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [emacs-lisp](<https://devfeed.tech/tags/emacs-lisp.md>), [emacs-live](<https://devfeed.tech/tags/emacs-live.md>), [function](<https://devfeed.tech/tags/function.md>), [lisp](<https://devfeed.tech/tags/lisp.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>)

### AI overview

The article explains how to use Clojure mode font locking in Emacs to display the standard Clojure partial function in a single character space while retaining the familiar partial function in the code.

### Source excerpt

I love using partial, but I dislike the length of the function name. There's a simple solution, define another function with a shorter name that simply calls (or is) partial. This is exactly what I did in the jry library. I liked the use of % due to partial feeling similar to creating a function using #(), and % having a special meaning inside #(). I thought they tied well together. Unfortunately, there's an obvious problem, things would be very broken if you tried to use the '%' function in an anonymous function defined with #(). Somewhere along the way this issue caused me to stop using jry/%. Using partial is great: it's part of the standard lib, and I don't need to explain it to anyone who joins my team or any future maintainers of the code I write. Still, I want something shorter, and I've always had a background thread looking for another shorter-than-partial solution. While recently contributing to emacs-live I found the solution I was looking for: clojure-mode font lock. The following code can now be found in my emacs configuration. This solution feels like the best of both worlds. My code still uses the function from the standard library, my colleagues still see a function they already know, and 'partial' only takes up one character space in my buffer. The image below is what you'll see if you put the above emacs-lisp in your config. © Jay Fields - www.jayfields.com

## Emacs Lisp: Toggle Between a Clojure String and Keyword

DevFeed: [Emacs Lisp: Toggle Between a Clojure String and Keyword](<https://devfeed.tech/articles/emacs-lisp-toggle-between-a-clojure-string-and-keyword-31901.md>)

Original publisher: [Read original article](<http://blog.jayfields.com/2013/05/emacs-lisp-toggle-between-clojure.html>)

Author: Jay (noreply@blogger.com)

Published: 2013-05-02T14:41:00Z

Content type: tutorial

Language: en

Sources: [Jay Fields](<https://devfeed.tech/sources/jay-fields.md>)

Topics: [Emacs](<https://devfeed.tech/topics/emacs.md>), [ClojureScript](<https://devfeed.tech/topics/clojurescript.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Lisp](<https://devfeed.tech/topics/lisp.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [conversion](<https://devfeed.tech/tags/conversion.md>), [emacs](<https://devfeed.tech/tags/emacs.md>), [emacs-lisp](<https://devfeed.tech/tags/emacs-lisp.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [string](<https://devfeed.tech/tags/string.md>)

### AI overview

This article presents an Emacs Lisp solution for toggling between Clojure strings and keywords, motivated by a refactoring task that required converting multiple Clojure keywords to strings. It also references a video demonstrating the behavior.

### Source excerpt

When I was doing a fair bit of Ruby I often used the TextMate's shortcut (Ctrl+:) to convert a Ruby String to a Symbol or a Ruby Symbol to a String. It's something I've periodically missed while doing Clojure, and yesterday I found myself in the middle of a refactoring that was going to force the conversion of 5+ Clojure Keywords to Strings. The following emacs lisp is my solution for toggling between Clojure Strings and Keywords. The standard disclaimers apply - it works on my machine, and I've never claimed to know emacs lisp well. A quick video of the behavior: © Jay Fields - www.jayfields.com

[Next page](<https://devfeed.tech/topics/lisp.md?cursor=WyIyMDEzLTA1LTAyVDE0OjQxOjAwKzAwOjAwIiwgImVlMTk2Njg5LWY3OWQtNGY0Mi04NjYwLTg4YjJkNzI4MmE2NiJd>)