<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: lispm</title><link>https://news.ycombinator.com/user?id=lispm</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 13 May 2026 06:23:31 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lispm" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lispm in "Why I Chose Common Lisp"]]></title><description><![CDATA[
<p>> However, the point of all this discussion is that Lisp doesn't provide good enough language servers for modern editors,<p>They use the "language server" model since a long time, before Microsoft's LSP existed. Thus the need isn't really there, unless one wants to develop with Microsoft products (or similar) and get the needed extensions for Lisp into those Microsoft driven standards. If there were a real need and a real benefit, there would be some better adoption on the Lisp side.</p>
]]></description><pubDate>Mon, 13 Jan 2025 11:56:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=42682537</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42682537</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42682537</guid></item><item><title><![CDATA[New comment by lispm in "Why I Chose Common Lisp"]]></title><description><![CDATA[
<p>> That's exactly what I get out of the IDEs I've used for decades. This whole argument is so weird, disingenuous, and full of vague strawmen. Just because I don't see the value in investing the time that you have doesn't mean that I'm for giving up control or whatever you were trying frame me as.<p>I used IDEs also all the time. Makes sense to me.<p>> Anyway, I'm done here. This site is full of toxic people who are offended that someone doesn't choose the same editor and habits that they do, and any dissent is to be punished.<p>Yeah, that's weird. You can use all kinds of editors you like. In the case of Lisp, there are arguments that good support for editing Lisp and for interaction with a Lisp runtime is useful (since Lisp is often used interactively). But several IDEs and editors can do that.<p>Just wanted to give you the impression that are others, who like IDEs and similar tools. ;-)</p>
]]></description><pubDate>Mon, 13 Jan 2025 08:12:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=42681219</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42681219</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42681219</guid></item><item><title><![CDATA[New comment by lispm in "Why I Chose Common Lisp"]]></title><description><![CDATA[
<p>Can't say what and Interlisp did, but the MIT Lisp Machine and here the commercial variant Genera.<p>Files are versioned. The Lisp machine file system has versions (same for DEC VMS and a few other file systems). Nowadays the file version is attached to the name&type. Thus editing a file and saving it creates a new file with the same name&type and an updated version number. I can edit/load/compile/open/... files by specifying its version number. If there is no version number specified, the newest file version is used.<p>A <i>site</i> shared a <i>namespace server</i> with <i>system registry</i> and several file servers.<p>Code, documentation, etc. is defined as a <i>system</i>, similar to what ASDF does. A <i>system</i> has major and minor version numbers and other attributes (like being <i>experimental</i> or being <i>released</i>). Each time one does a full compile on a <i>system</i>, its major version gets updated and it tracks which file versions it used for that compilation. Whenever one creates a <i>patch</i> (a change of the sources) to a <i>system</i>,  the minor version gets updated. After 12 full compiles and 30 patches to the latest version we have <i>system</i> FOOBAR 12.30. This data is recorded in the <i>system</i> directory, thus outside of an <i>image</i> (called a <i>World</i> in Genera) in the file system.<p>Now I can use that <i>system</i> FOOBAR in another Lisp and "Load System FOOBAR :version Newest" -> This will load <i>system</i> FOOBAR 12.30 into its runtime. Then new patches may appear in the <i>system</i>. I can then in a Lisp say "Load Patches FOOBAR" and it will look into the <i>system</i> directory for new patches to the current loaded major version and load those patches one by one. This changes the running Lisp. It then knows that it has loaded, say, FOOBAR 12.45, what files it has loaded and in which files the respective code (functions, ...) are located.<p>If I want to ship a <i>system</i> to the customer or someone else, I might tag it as released and create a <i>distribution</i> (with sources, documentation or not). The <i>distribution</i> is a file (also possibly a tape, a bunch of floppy disks, a CDROM, or similar). A <i>distribution</i> can contain one or more <i>systems</i> and its <i>files</i> (in several versions). On another Lisp I can later restore the <i>distribution</i> or parts of it. The restored <i>systems</i> then can be loaded for a specific version. For example I can load a <i>released</i> <i>system</i> version and then load <i>patches</i> for it.<p>A saved image knows which versions of what <i>systems</i> it includes. It also knows which functions sources are where. It may also have corresponding documentation versions loaded.<p>Later a source versioning system (called VC) was added, but I haven't used that.</p>
]]></description><pubDate>Sun, 12 Jan 2025 12:48:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42673198</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42673198</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42673198</guid></item><item><title><![CDATA[New comment by lispm in "Why I Chose Common Lisp"]]></title><description><![CDATA[
<p>That has been done in the past and was never widely supported. But the landscape is now slightly different. One approach might be to use ASDF (the most popular <i>systems</i> management tool), which then would need to be upgraded to use versions (and ideally have it integrated into a repository mechanism -> Git or similar... Also what are versions in a decentralized world?). ASDF operations then would need to be able deal with version numbers.<p>A Lisp image would then know/track which versions of what code it has loaded/compiled/... Version information would be stored with the other source files.</p>
]]></description><pubDate>Sun, 12 Jan 2025 12:17:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=42673034</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42673034</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42673034</guid></item><item><title><![CDATA[New comment by lispm in "Why I Chose Common Lisp"]]></title><description><![CDATA[
<p>There is already confusion. Things are different and the same words (executable, native, image, ...) mean slightly different things.<p>In the CL world it is usually relatively easy to create an executable. For example in SBCL I would just run SBCL and then save an image and say that it should be an executable. That's basically it. The resulting executable<p>* is already native compiled, since SBCL always compiles native -> all code is AOT compiled to machine code<p>* includes all code and data, thus there is nothing special to do, to change code for it -> the code runs without changes<p>* includes all the SBCL tools (compiler, repl, disassembler, code loader, ...) thus it can be used to develop with it -> the code can be still "dynamic" for further changes<p>* it starts fast<p>Thus I don't need a special VM or special tool to create an executable and/or AOT compiled code. It's built-in in SBCL.<p>The first drawback: the resulting executable is as large as the original SBCL was plus any additional code.<p>But for many use cases that's what we want: a fast starting Lisp, which includes everything precompiled.<p>Now it gets messy:<p>In the real world (TM) things might be more complicated:<p>* we want the executable to be smaller<p>* we want to get rid of debug information<p>* we need to include libraries written in other languages<p>* we want faster / more efficient execution at runtime<p>* we need to deliver the Lisp code&data as a shared library<p>* we need an executable with tuned garbage collector or without GC<p>* the delivery structure can be more complex (-> macOS application bundles for multiple architectures)<p>* we want to deliver for platforms which provide restrictions (-> iOS/Apple for example doesn't let us include a native code compiler in the executable, if we want to ship it via the Appstore)<p>* we want the code&data be delivered for an embedded application<p>That's in the CL world usually called <i>delivery</i> -> creating an <i>delivered</i> application that can be shipped to the customer (whoever that is).<p>This was (and is) typically where commercial CL implementations (nowadays Allegro CL and LispWorks) have extensive tooling for. A delivered LispWorks application may start at around 7MB size, depending on the platform. But there are also special capabilities of ECL (Embeddable Common Lisp). Additionally there were (and still are) specialized CL implementations, embedded in applications or which are used as a special purpose compiler. For example some of the PTC Creo CAD systems use their own CL implementation (based on a ancestor implementation of ECL), run several million lines of Lisp code and expose it to the user as an extension language.</p>
]]></description><pubDate>Sun, 12 Jan 2025 10:32:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=42672558</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42672558</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42672558</guid></item><item><title><![CDATA[New comment by lispm in "Why we built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> The way it's integrated with the host platform makes it better for most use cases IMHO.<p>That may be. ABCL is running on the host system and can reuse it, but it aims to be a full implementation of Common Lisp, not a blend of a subset of Lisp plus the host runtime. For example one would expect the full Common Lisp numerics.<p>One of its purposes is to be able to run portable Common Lisp code on the JVM. Like Maxima or like bootstrapping the SBCL system.<p>There is a bit more about the interop in the repository and in the manual:<p><a href="https://abcl.org/releases/1.9.2/abcl-1.9.2.pdf" rel="nofollow">https://abcl.org/releases/1.9.2/abcl-1.9.2.pdf</a></p>
]]></description><pubDate>Sat, 11 Jan 2025 15:02:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42666316</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42666316</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42666316</guid></item><item><title><![CDATA[New comment by lispm in "Why we built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> I didn't say "type declarations can lead to a messy middle ground in Common Lisp" - obviously they exist there for a reason, but, maybe they DON'T exist in Clojure, also for good reasons, no?<p>What were those reasons?<p>> ABCL does exist, sure,<p>Would that count as a hosted implementation?</p>
]]></description><pubDate>Sat, 11 Jan 2025 11:06:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=42665044</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42665044</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42665044</guid></item><item><title><![CDATA[New comment by lispm in "Why we built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> And yet UCSD Pascal was using a P-machine. So, the problem was the implementation and not the concept. Which was exactly my point.<p>My point is that implementations don't come from nothing. You can't just demand them to be there. They have to be invented/implemented/improved/... Companies at that time did not invest any money in micro implementations of Lisp. I also believe that there was a reason for that: it would have been mostly useless.<p>> Temporarily. But then it died when the big money went away and left Lisp all but dead. All the while all the people using languages on those "toys" kept right on going.<p>Lot's of toys and languages for them died.</p>
]]></description><pubDate>Sat, 11 Jan 2025 10:09:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=42664743</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42664743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42664743</guid></item><item><title><![CDATA[New comment by lispm in "Why we built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> not to include type declarations because they can lead to a messy middle ground?<p>What? Type declarations in CL (which came from prior Lisp dialects) were added, so that optimizing Lisp compilers can use those to create fast machine code on typical CPUs (various CISC and RISC processors). Several optimizing compilers have been written, taking advantage of that feature. The compiler of SBCL would be an example. SBCL (and CMUCL before that) also uses type declarations as assertions. So, both the SBCL runtime and the SBCL compiler use type declarations.<p>> why then it can't be 'hosted' like Clojure?<p>ABCL does not exist?<p><a href="https://abcl.org" rel="nofollow">https://abcl.org</a></p>
]]></description><pubDate>Sat, 11 Jan 2025 09:54:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42664665</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42664665</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42664665</guid></item><item><title><![CDATA[New comment by lispm in "Doing Hard Things While Living Life: Why We Built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> Lisp would have been really good relative to BASIC interpreters at the time<p>I see no evidence for that. Lisp was a pain on tiny machines with bad user interface.<p>> 64K is solid for a Lisp if you own the whole machine.<p>I had a Lisp on an Apple II. It was a useless toy. I was using UCSD Pascal and Modula 2 on it. Much better.<p>I had Cambridge Lisp on an Atari with 68k CPU. It was next to unusable due to frequent crashes on calling FFI functions.<p>The first good Lisp implementation I got was MacScheme on the Mac and then the breakthrough was Macintosh Common Lisp from Coral Software.<p>> Had one of the Lisperati evangelized Lisp on micros<p>There were articles for example in the Byte magazine. Lisp simply was a bad fit to tiny machines. Lisp wasn't very efficient for small memory. Maybe with lots of work implementing a tiny Lisp in assembler. But who would have paid for it? People need to eat. The tiny Lisp for the Apple II was not usable, due to the lack of useful programming environment.<p>> Alas, they were off charging a gazillion bucks to government contracts.<p>At least there were people willing to pay for it.</p>
]]></description><pubDate>Sat, 11 Jan 2025 01:27:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=42662445</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42662445</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42662445</guid></item><item><title><![CDATA[New comment by lispm in "Doing Hard Things While Living Life: Why We Built Vade Studio in Clojure"]]></title><description><![CDATA[
<p>> Lots of us hated doing assembly language programming but had no real alternative.<p>I kind of fail to see Lisp as an alternative to assembler on mid 80s micros.<p>Though, there were several cheap Lisps for PCs...</p>
]]></description><pubDate>Fri, 10 Jan 2025 23:58:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=42661817</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42661817</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42661817</guid></item><item><title><![CDATA[New comment by lispm in "Some programming language ideas"]]></title><description><![CDATA[
<p>> The OP has a good criticism of why this is a bad idea. It's an old idea, mostly from LISP land, where early systems saved the whole LISP environment state. Source control? What's that?<p>Symbolics Genera can save (incremental and complete) images (-> "Worlds"). The image tracks all the sources loaded into it. The sources/files/docs/... of the software is stored on a central (or local) file server.<p>I can for example start an initial world and load it with all the wanted software in the various versions I want. Maybe I save a new world from that.<p>I can also start an pre-loaded world and incrementally update the software: write patches, create new minor/major versions, load patches and updates from the central server, install updates from distributions, ... Maybe save new worlds.<p>The "System Construction Tool" tracks what code is loaded in what version from where.</p>
]]></description><pubDate>Fri, 10 Jan 2025 00:15:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=42651196</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42651196</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42651196</guid></item><item><title><![CDATA[New comment by lispm in "Some programming language ideas"]]></title><description><![CDATA[
<p>A bunch of things work in implementations, while but are not standard conforming.</p>
]]></description><pubDate>Thu, 09 Jan 2025 14:48:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=42646141</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42646141</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42646141</guid></item><item><title><![CDATA[New comment by lispm in "Some programming language ideas"]]></title><description><![CDATA[
<p>actually, according to the LOOP syntax, the REPEAT clause has to follow the FOR clause...</p>
]]></description><pubDate>Wed, 08 Jan 2025 23:27:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=42639676</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42639676</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42639676</guid></item><item><title><![CDATA[New comment by lispm in "The evolution of a structural code editor"]]></title><description><![CDATA[
<p>> So I can replace my #3 above to wrap something with quotes instead of parentheses.<p>That's M-" .</p>
]]></description><pubDate>Tue, 07 Jan 2025 21:57:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=42628120</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42628120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42628120</guid></item><item><title><![CDATA[New comment by lispm in "Zig's comptime is bonkers good"]]></title><description><![CDATA[
<p>> if he was using Clojure he wouldn't be having the problems with nconc that he talks about"<p>Yeah, one would write the implementation in Java.<p>Common Lisp (and Lisp in general) often aspires to be written in itself, efficiently. Thus it has all the operations, which a hosted language may get from the imperative/mutable/object-oriented language underneath. That's why CL implementations may have type declarations, type inference, various optimizations, stack allocation, TCO and other features - directly in the language implementation. See for example the SBCL manual. <a href="https://sbcl.org/manual/index.html" rel="nofollow">https://sbcl.org/manual/index.html</a><p>For example the SBCL implementation is largely written in itself, whereas Clojure runs on top of a virtual machine written in a few zillion lines of C/C++ and Java. Even the core compiler is written in 10KLOC of Java code. <a href="https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Compiler.java">https://github.com/clojure/clojure/blob/master/src/jvm/cloju...</a><p>Where the SBCL compiler is largely written Common Lisp, incl. the machine code backends for various platforms. <a href="https://github.com/sbcl/sbcl/tree/master/src/compiler">https://github.com/sbcl/sbcl/tree/master/src/compiler</a><p>The original Clojure developer made the conscious decision to inherit the JIT compiler from the JVM, write the Clojure compiler in Java and reuse the JVM in general -> this reuses a lot of technology maintained by others and makes integration into the Java ecosystem easier.<p>The language implementations differ: Lots of CL + C and Assembler compared to a much smaller amount of Clojure with lots of Java and C/C++.<p>CL has for a reason a lot of low-level, mutable and imperative features. It was designed for that, so that people code write efficient software largely in Lisp itself.</p>
]]></description><pubDate>Tue, 07 Jan 2025 21:12:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=42627539</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42627539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42627539</guid></item><item><title><![CDATA[New comment by lispm in "Nvidia's Project Digits is a 'personal AI supercomputer'"]]></title><description><![CDATA[
<p>upto 4tb storage</p>
]]></description><pubDate>Tue, 07 Jan 2025 07:34:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=42620232</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42620232</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42620232</guid></item><item><title><![CDATA[New comment by lispm in "Systems ideas that sound good but almost never work"]]></title><description><![CDATA[
<p>all four now use lexical scope. Scheme also supports dynamic scope.<p>1-lisp or 2-lisp is also a difference, though all support lexical closures and function objects.<p>Racket now has a variant without s-expressions. That's also a huge difference.</p>
]]></description><pubDate>Fri, 03 Jan 2025 13:35:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=42585510</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42585510</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42585510</guid></item><item><title><![CDATA[New comment by lispm in "Systems ideas that sound good but almost never work"]]></title><description><![CDATA[
<p>> common lisp, emacs lisp, racket and scheme are different languages with exact same syntax<p>Far from it. On the s-expression level there are already differences. On the actual language level, Common Lisp for example provides function definitions with named arguments, declarations, documention strings, etc.<p>For example the syntax for function parameter definition in CL is:<p><pre><code>    lambda-list::= (var* 
                    [&optional {var | (var [init-form [supplied-p-parameter]])}*] 
                    [&rest var] 
                    [&key {var |
                           ({var | (keyword-name var)} [init-form [supplied-p-parameter]])}*
                    [&allow-other-keys]] 
                    [&aux {var | (var [init-form])}*]) 

</code></pre>
Above is a syntax definition in an EBNF variant used by Common Lisp to describe the syntax of valid forms in the language. There are different operator types and built-in operators and macro operators have especially lots and sometimes complex syntax. See for example the extensive syntax of the LOOP operator in Common Lisp.</p>
]]></description><pubDate>Fri, 03 Jan 2025 11:06:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=42584573</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42584573</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42584573</guid></item><item><title><![CDATA[New comment by lispm in "Is Iceland getting ready to join the EU?"]]></title><description><![CDATA[
<p>yeah, what you say makes no sense, since it has nothing to do with reality.</p>
]]></description><pubDate>Thu, 02 Jan 2025 05:20:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=42571884</link><dc:creator>lispm</dc:creator><comments>https://news.ycombinator.com/item?id=42571884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42571884</guid></item></channel></rss>