[a / b / c / d / e / f / g / gif / h / hr / k / m / o / p / s / t / u / v / vg / vm / vmg / vr / vrpg / vst / w / wg] [i / ic] [r9k / s4s / vip] [cm / hm / lgbt / y] [3 / aco / adv / an / bant / biz / cgl / ck / co / diy / fa / fit / gd / hc / his / int / jp / lit / mlp / mu / n / news / out / po / pol / pw / qst / sci / soc / sp / tg / toy / trv / tv / vp / vt / wsg / wsr / x / xs] [Settings] [Search] [Mobile] [Home]
Board
Settings Mobile Home
/g/ - Technology


Thread archived.
You cannot reply anymore.


[Advertise on 4chan]


/m/echa edition

>Lisp is a family of programming languages with a long history and a distinctive parenthesized prefix notation. There are many dialects of Lisp, including Common Lisp, Scheme, Clojure and Elisp.

>Emacs is an extensible, customizable, self-documenting free/libre text editor and computing environment, with a Lisp interpreter at its core.

>Emacs Resources
https://gnu.org/s/emacs
https://github.com/emacs-tw/awesome-emacs
https://github.com/systemcrafters/crafted-emacs

>Learning Emacs
C-h t (Interactive Tutorial)
https://emacs-config-generator.fly.dev
https://systemcrafters.net/emacs-from-scratch
http://xahlee.info/emacs
https://emacs.tv

>Browse imageboards in Emacs Org-Mode
https://github.com/eNotchy/4g

>Emacs Distros
https://github.com/caisah/emacs.dz

>Elisp
Docs: C-h f [function] C-h v [variable] C-h k [keybinding] C-h m [mode] M-x ielm [REPL]
https://gnu.org/s/emacs/manual/eintr.html
https://gnu.org/s/emacs/manual/elisp.html
https://github.com/emacs-tw/awesome-elisp

>Common Lisp
https://lispcookbook.github.io/cl-cookbook
https://cs.cmu.edu/~dst/LispBook
https://gigamonkeys.com/book
https://lisp-docs.github.io
https://awesome-cl.com

>Scheme
https://scheme.org
https://standards.scheme.org
https://go.scheme.org/awesome
https://research.scheme.org/lambda-papers

>Clojure
https://clojure.org
https://tryclojure.org
https://clojure-doc.org
https://clojure.land
https://www.clojure-toolbox.com
https://mooc.fi/courses/2014/clojure
https://jafingerhut.github.io/cheatsheet/clojuredocs/cheatsheet-tiptip-cdocs-summary.html

>Other
https://github.com/dundalek/awesome-lisp-languages

>Guix
https://guix.gnu.org
https://nonguix.org
https://systemcrafters.net/craft-your-system-with-guix
https://futurile.net/resources/guix
https://github.com/franzos/awesome-guix

>SICP/HtDP
https://web.mit.edu/6.001/6.037/sicp.pdf
https://htdp.org

>More Lisp Resources
https://lisp.nexus
https://rentry.org/lispresources

(setf *prev-bread* >>108967280)
>>
first for lisp1 sucks
>>
File: key-the-metal-idol-emacs.png (3.3 MB, 3243x1241)
3.3 MB PNG
emac in pop culture
https://ianyepan.github.io/posts/emacs-in-pop-culture/
https://news.ycombinator.com/item?id=48474274
>>
>>109031468
Lisp-1 chads won
>Single Namespace: Coalton only has a single function/value namespace. Some Lispers might call this a “Lisp-1”. There is no need for #' or the like within Coalton.
https://coalton-lang.github.io/20211010-introducing-coalton/
>>
File: 1780695936799743.jpg (66 KB, 512x512)
66 KB JPG
>>109031524
I know, and that ruins it.
>>
>>109031524
literally who
>>
Been gone for a while, do y'all need me to update lisp.nexus?
>>
>wake up
>yep, still permaunemployed
>time for more lisp
>>
>>109031458
>ALERT
>LISP detected
>>
File: '(zun-sneed).jpg (269 KB, 512x496)
269 KB JPG
>>109031484
>famous Emacs users
ZUN!
https://youtu.be/RPeFQwBFURk?t=1623
>>
https://shawnhoover.dev/notes/emacs-sql-duckdb.html
https://github.com/shoover/emacs.d/blob/main/lisp/sql-duckdb.el
duckdb can a better sqlite client than the actual sqlite if you're dealing with a lot of unicode/utf-8 strings.
>>
>>109033333
>>
File: images (3).jpg (6 KB, 224x224)
6 KB JPG
>>109032279
In programming and linguistics, this is known as parenthesization. If you have a sequence of words or data points, there are many ways to nest them (e.g., (AB)(CD) vs. ((AB)C)D). The associahedron maps every valid "tree structure" of those items as a vertex, and every edge represents a fundamental transformation—called an associahedron flip—that moves you from one valid grouping to another.
2. The Link to Transformers and LLMs
Modern AI relies on Attention Mechanisms. When a transformer processes a sentence, it is constantly calculating the relationships between every word and every other word.
Syntax as Trees: Language is hierarchical. A sentence is not just a flat line of text; it is a nested structure of phrases and clauses.
The Latent Space: As an LLM "thinks," it moves through a multi-dimensional space. The way it prunes, weights, and rearranges these dependencies to form a coherent thought is mathematically analogous to traversing the edges of an associahedron.
Optimization: Training an AI is essentially finding the "optimal path" across a landscape. If that landscape is built on the combinatorial structure of how information can be related (the associahedron), then the associahedron acts as the topological skeleton of the AI’s "thought" process.
The Permutohedron and the Associahedron's roles in Amplitude Physics: Recent breakthroughs in physics (like the Amplituhedron) suggest that the fundamental interactions of particles are not just "happening" in space-time, but are actually projections of geometric volumes.
When researchers apply these same principles to data:
Algebraic Structure: The associahedron governs the "Operad" of composition. In computer science, this is how we compose functions. Since AI is fundamentally composed of nested layers of functions (f(g(h(x)))), the associahedron is the shape of "compositionality" itself.

Emerging from polytopes and polycules the kirkfloydahedron...
>>
>>109033594
My dear Aunt Sally!
>>
started using emacs 3 days ago. i setup doom emacs took me a little while to figure out the keybinds but now im pretty fast for only having used it 3 days. ai is a life saver i created my own music player and iptv player both work great.
>>
>>109033594
None of that proves it has anything to do with actual "thinking". The words "thinks" and "thought" are just thrown in there.
It's fine if that's your view, but too many people talk about AI as if its sentient as a matter of fact, and I like to remind you all that it isn't a matter of fact. It's just your belief being thrown in there, and its easy to forget that.
I personally maintain that there is something going on when it comes to actual thinking/understanding/reasoning which is truly non-reducible into any terms currently understood by modern science.
>>
>>109033978
Yea, emacs is great.
When I first decided to actuslly learn it, it wasn't nearly as complex or esoteric as I had imagined, and I wondered why I'd used vim for so long.
Also, SLIME is the GOAT.
>>
>>109034059
i'll check out SLIME. i love that i can easily create stuff for my emacs. for the music player i tried bongo, listen.el, and emms and they were all garbage so i just asked ai to make one and i have it just how i want it. it displays artists then albums then tracks and only works by scanning directory no other bloat only 680 lines
>>
>>109034014
Consider Hinton's rebuttal:
How do you translate from English to French? It isn't one to one fetch and search. It takes serious wattage to generate structure and shape of thought itself. Not huge but real serious work. French is too complicated for simple translations.
>>
Lambdahedrons
>>
LEM REPL let's you program in C
>>
File: PXL_20260612_034539286.jpg (2.15 MB, 3000x4000)
2.15 MB JPG
Touretzky chapter 6 has me making a little parser and it's breaking my brain. Whew what alien tech this is.
A gentle intro sneak peek to the dragon book wow
>>
modus-vivendi-deuteranopia is lowkirkenuinely such a beautiful theme
>>
>>109031468
Lisp1 can be improved by a better name resolution and namespaces. Like Clojure does it.
Besides, how often do you have name collisions?
>>
File: doom-and-sly.png (141 KB, 861x740)
141 KB PNG
>>109034082
FYI, Doom is setup to use Sly (instead of SLIME).
https://almightylisp.com/book/essentials/getting-started-w-doom-emacs-lisp#configure-doom-for-common-lisp
https://docs.doomemacs.org/v21.12/modules/lang/common-lisp/

Sly is a fork of SLIME, so they're really similar.
https://github.com/joaotavora/sly/
>>
File: aldnoah.png (489 KB, 750x978)
489 KB PNG
>>109031458
https://lists.gnu.org/archive/html/emacs-pretest-bug/2005-05/msg00190.html
>>
>>109035538
Lisp-2 is more intuitive, I don't understand why so may people think otherwise.

ls ls works exactly as you'd expect. Why should my Lisp behave any differently?
>>
>>109035789
funcall is not intuitive.
>>
>>109031458
A post in the previous thread made me think:
What is it about Lisp that Clojure is actually “modernizing” given that Clojure actively reduces the most sophisticated parts of Lisp that other languages don’t have (e.g. no CLOS or Guile-style MOP, weaker macros)?
>>
>>109036740
Clojure has multimethods.
https://clojure.org/reference/multimethods
>>
>>109036740
Transducers? Although I think that’s just a bit of hype talk to get business buy-in.
>>
>>109036783
they don't care, fren
they have CLOS but do not care that it is not taken to its ultimate conclusion in its own std lib for things like "apply" (only works with lists of args, not any generic enumerable sequence, necessitating a construction step, necessitating lack of performance in certain cases).
they will say "just use a lib!"
and I will say "write me a lib that is Clojure in CL, I would love for CL to be a new supported ecosystem under the Clojure umbrella"
and they will say "fuck you!"
they seriously think Clojure devs have not tried CL, and just do not grasp it. look at the previous thread's replies saying "#() is just a reader macro," as if that is not fucking obvious, and entirely besides the point.

they will also start freaking out when you point out standardized JVM features that allow for reflection beyond that which the CL standard dictates (such as the JOL Java lib allowing for exact heap size calculation of any (potentially cyclical) object), forcing the programmer to rely on a specific CL implementation supporting such behavior.
of course, they could argue that a programmer using the (standard) implementation of Clojure that runs on the JVM is no different from using CL with SBCL or whatever implementation supports similar features to the JVM (idk, idc), but at this point I feel like being a cheeky bastard, because these fuckers argue obvious shit that they think I (or the majority of us Clojure devs) do not understand, which is patronizing considering the fact that I feel the majority of Clojure devs in this thread can outcode the majority of CL "devs" in this thread.

I wish it never got this way. I do not dislike CL, it's fucking based. but when they shit on Clojure, acting like it is useless, shots will start being fired.
>>
>>109036740
0. The main reason Hickey came up with it was not that he saw something particularly wrong with CL but that he needed his programs to interface with modern web backend infrastructure, which meant CLR or JVM at the time

1. Extensive destructuring support in the core language

2. Decent unicode support baked into everything, I ran into problems with this in older Lisp dialects

3. Clojure had fantastic multithreading support at a time when CL's multithreading story was in shambles (or so I have read)

4. The API design of the standard library is more ergonomic. A lot of functions in traditional Lisps will have you call them with a bunch of positional args as ~nil~ or ~t~, whereas Clojure would use keyword args for such things. Easier to read. Clojure also enables a good deal of point-free programming via the threading macros. You can easily implement these macros in CL or elisp, but you can hardly use them because the APIs are not designed with them in mind. Even if you don't use the macros themselves, it's still nice that functions are pretty consistent in where they expect the data collection to go etc.
The big one here is that Clojure uses abstractions rather than expecting you to learn different functions depending on concrete data types, e.g. conj will add stuff to vectors, lists, maps or sets; get, assoc and dissoc can be used on hashmaps, arraymaps (similar to p-lists/a-lists) or vectors. Emacs Lisp has been moving towards this both in the C core and in libraries like seq.el and map.el, CLOS enables this too, but Clojure did all this from the beginning in the core library.

5. Clojure's use of {} for literal representation of associative data structures mirrors JSON conventions and makes Clojure syntax a much more practical format for representing complex data structures

Most of the other things Clojure does I wouldn't really call modernizing, it's just different sets of trade-offs.
Persistent data structures by default are very useful, but slow.
>>
>>109037007
Can you calm yourself down? I like lisps in general, including Clojure. I just asked a question because I didn’t know the answer. This isn’t “shitting on Clojure” it’s hearing Rick Hickey make that exact claim and asking for some fucking examples because I don’t know. For someone who didn’t want shots being fired you seem to really have a sensitive trigger finger for someone who posted one single question.
>>
>>109037119
>Can you calm yourself down?
nah, in fact this seems like it could be a good thread to start screenshotting posts for later posting in future threads when people wanna pipe up about Clojure, that way we can save time in assisting noobs that don't know anything.
>>
>>109036817
aren't transducers just currying?
>>
>>109037266
It's a bit trickier than that. If you were just skimming through
https://clojure.org/reference/transducers
...I could see how you could think that, but look toward the end of the page where it describes what it takes to make your own original transducer.
>>
>>109036817
>to get business buy-in
ooh I hadn't looked at it from that perspective. Was always scratching my head about why they were making such a big deal out of it.

>>109037266
no, that's just the syntax.
What's good about them is
1. they avoid rebuilding data structures over and over when you do chains of map/filter operations
2. they decouple those operations from lower-level plumbing and make them reuseable, e.g. the same transducer that's used to consume a vector could be used on a stream, an async channel etc.
>>
>another thread of being completely uninvolved in Lisp on Lisp hate
Feels good schemesisters
>>
>>109037367
I think Rick explicitly said he thought a big problem was just that people wouldn’t pay you to write Lisp.
I agree that’s a problem but I don’t think it’s actually the language which is the issue here. Although the strong web support for Clojure is genuinely a very good idea.
>>
>>109036783
Unlike Clojure's, CLOS multimethods are completely independent from subclassing, there is no need to define a class hierarchy to leverage dynamic dispatch.

Clojure's design decision is understandable, since it attempts to blend in with Java inheritance, but in doing so sacrifices some flexibility.
>>
>>109037628
Clojure's multimethods do not need to involve classes at all.
they are by-value techniques. if your checking involves getting the class of a value, then that is your choice.
you can define a multimethod that differs in behavior when passed a generic sequence where each prime index is an even number, for example.
>>
>>109036740
In addition to features already mentioned, there are a number of minor things that align more closely with the way other dynamic languages are used. Features like vector literals and hash literals, and map/hashtable keys acting as functions that return the value and vice versa (map1 :key1) and (:key1 map1). Other minor details including a standard string formatter that's more familiar to C and Java people %s and %d rather than ~A and ~D. Kind of a trivial thing but it's just yet another hurdle to clear for anyone coming to Lisp from another language. (And no, most of them don't care at all whether the common lisp format syntax is more powerful they just want some simple output. )
>>
>>109038451
clojure also has an implementation of cl's formatter btw:
https://clojuredocs.org/clojure.pprint/cl-format

It's a lot slower than clojure.core/format though, and while the ~R and ~:R directives are very cool there's no easy way to translate them to different languages, so the usecases are kind of limited.

>>109037670
we already explained to this nigger that clojure's multimethods aren't anything like that and that he's probably thinking of protocols:
https://desuarchive.org/g/thread/108767473/#108856568

He doesn't care, he just repeats the same shit over and over even when you patiently try to clear up any misunderstandings. It's like talking to an LLM with bad training data.
>>
File: haruhism.png (1.1 MB, 1000x1294)
1.1 MB PNG
helixbros it's habbening
>As an update, we didn't forget about this PR: our goal with @the-mikedavis is to merge the updated workspace trust + small bugfixes, cut a release then land this PR right afterwards.
https://github.com/helix-editor/helix/pull/8675#issuecomment-4667074956
>>
>>109038945
>rustoid garbage
Dropped.
>>
File: rusted.jpg (116 KB, 1200x1000)
116 KB JPG
>>109039234
Don't worry. There's a rusted emac for you.
https://github.com/CeleritasCelery/rune
>>
>>109037367
So basically transducers are like lazy sequences or iterators or am I missing something?
>>
>>109034765
No sweat you'll write your own assoc eventually
>>
>>109039493
No, Tranducers are transformation pipelines decoupled from the input and output format.

;; lang: clojure
#!/usr/bin/env bb

(def assets
"The assets available at some crypto exchange."
(json/parse-string (slurp "https://api.coinmetro.com/assets")
keyword))

(def tranny
"Transducer which produces the names of the fiat currencies in the `asset` list"
(comp
(filter #(= "fiat" (:type %)))
(map :name)))

;; Now we can use the tranny at different places in the rest of the program.

;; This will simply produce a vector with the names of the currencies:
(into [] tranny assets)

But you could just as well use it to put the currency names onto e.g. an async channel that streams them to your web frontend, or use it in a function that looks the names up in a database.
Here are some more examples:
https://ianrumford.github.io/clojure/transducers/reducers/2014/08/08/Some-trivial-examples-of-using-Clojure-Transducers.html
>>
Lisp infighting is fucking retarded. To anti-Lispfags, they just hate you all, they don’t give a fuck about which dialect you are lol
The least you can do is support each other
Not that I’d know because nobody ever picks on my baby Scheme
>>
It could be more efficient, but for file sizes I'm likely to use it on, i can live with it.
(defun file-tail (file &optional (num-lines '10))
"Returns a list of the last NUM-LINES of FILE,
DEFAULT: 10. This may be rather inefficient for
very large files."
(let ((new-lines '(0))
(return-lines '()))
(with-open-file (in-stream file
:direction :input
:if-does-not-exist :error)
(do ((c (read-char in-stream nil :eof)
(read-char in-stream nil :eof)))
((eql c :eof))
(when (eql c #\newline)
(push (file-position in-stream) new-lines))) (dolist (i (if (< num-lines (length new-lines)) (subseq new-lines 1 (1+ num-lines)) (subseq new-lines 1))) (file-position in-stream i)
(push (read-line in-stream nil nil) return-lines))) return-lines))
>>
>>109041445
Huh, no idea why the formatting is borked.
>>
>>109039981
I still don't get how that is so different from
(defun transform (stream)
(and-let* ((filtered (seq-filter #'numberp stream))
(mapped (seq-map #'number-to-string filtered)))))

(let* ((list-stream (stream '("a" "b" 0 1 2 3))))
(seq-into (transform list-stream) 'vector))

(let* ((vector-stream (stream (vector "a" "b" 0 1 2 3))))
(seq-into (transform vector-stream) 'list))

(using stream.el)

or in Rust using iterators:
fn transform<I: IntoIterator<Item=u32>>(iter: I) -> impl Iterator<Item=String> {
iter.into_iter()
.filter(|x| x % 2 == 0)
.map( |x| format!("{}", x))
}

use std::collections::HashSet;
fn main() {
let nums: [u32;4] = [0, 1, 2, 3];
let trans: Vec<String> = transform(nums).collect();
let nums: HashSet<u32> = HashSet::from([0, 1, 2, 3]);
let trans: Vec<String> = transform(nums).collect();
}


They're both lazy so no unnecessary building of intermediary lists or whatever and both can be seamlessly chained with more transformations. Also both examples allow for using different sequence/collection types (or technically anything that can be turned into a stream/iterator) as in and output.
>>
>>109040138
It's like 2 or 3 terminally autistic common lisp enthusiasts who cannot stop seething about the existence of Clojure. It's been going on for years.
>>
>>109041547
Clojure has lazy sequences as well as transducers. Lazy sequences work as you expect (such as stream.el or Elixir's Stream module), each step of the pipline is its own data structure (but still lazy of course). you call `next` on the final one, which calls `next` on the 2nd-to-last, which calls next... until you arrive at `next` on the actual collection you are traversing.
basically, you have actual allocated data structures in memory.

transducers offer an identical way of writing your pipeline as sequences, but actually flatten your steps into actual calls. there are no allocated data structures that have `next` called, just a single pass over the collection with the steps baked into the function passing over the values (more specifically, a reducer function).

you can think of it a lot as an optimization macro
>>
>>109041591
Where is the seething? The original question was apparently asked without hostility
>>
File: 6W6wWj.png (418 KB, 1920x1080)
418 KB PNG
Troongame entirely programmed in commonlisp
>>
File: images.jpg (9 KB, 194x259)
9 KB JPG
>>109042887
I have a feeling Shinmera is not at all Japanese and is a Ken Sama on HRT
>>
>>109042843
if the questioner had actually given attention to the previous thread's discussion, xe would have had their question answered due to direct references to Clojure's class-less ideology and multimethods that can do more than CLOS's multiple dispatch.
>>
>>109042887
Troonsouls
>>
The Lisp alien IS UGLY
Kandria IS UGLY
The Lisp lambda yin yang is GORGEOUS AND AWESOME
The guy who made the Lisp alien has a fun book on making mini games in lisp. At least he has a good sense of humor but cmon that's why no one takes lisp seriously
>>
File: 1781301404331192.jpg (112 KB, 681x713)
112 KB JPG
Still think using MELPA is a good idea?
>>
>>109043284
yeschad.jpg
>>
File: 1758891514249415.jpg (162 KB, 1598x820)
162 KB JPG
>>109043284
(setopt package-review-policy t)
>>
>>109042969
What does this have to do with some hallucinated seething?
>>
>>109042907
Forgive the language but I think Shinmera is a G*rman. I think she once tried recruiting Lisp devs and had a minor meltdown over them being unwilling to work for Euro wages.
>>
>>109043185
>lambda yin yang
It’s a lambda/Y-combinator isn’t it?
>>
>>109044800
swiss/austrian/germ

god bless trans women for keeping programming alive
>>
>>109033978
no offense but i've never understood why people don't just test out vanilla emacs first
>>
>>109046156
It's not beginner friendly

Discoverability tax
>>
>>109046210
a tutorial and guided tour are the first two items in the welcome screen
>>
File: xah-trvke.png (65 KB, 591x376)
65 KB PNG
>>109042907
https://reader.tymoon.eu/article/444
>In recent years I've found myself more and more disconnected with male-dominated spaces in general. I don't feel at home in them. I'm already not a very social person and struggle with any kind of gathering that has more than 6 people, but a lot more so still if it's mostly men.
>lisp is le heckin bad now because there's no much le heckin diversity (muh troon xisters) bro
Ironic.
>>
>>109046451
xah is a pervert, and a woman without a big dick is like an angel with clipped wings.

Also, shinmera has contributed more to CL and lisp than you ever did.
>>
File: youk-ACK.jpg (105 KB, 1080x1080)
105 KB JPG
>>109046475
It’s great to hear that a MAN has contributed to the CL ecosystem (I'm using his cl-libs to my fash chud lisp game rn, thank you). Also YWNBAW, stupid troon.
>>
>>109046475
Porting SBCL to the Nintendo switch was unironically kino
>>
File: 1774078244088232.png (2.47 MB, 1122x1402)
2.47 MB PNG
>>109042439
Ah, I see. Now it makes sense. Thank you for explaining.
>>
>>109047637
I want to elaborate a bit because I like transducers.
They are an implementation of stream fusion (recommended reading, Stream Fusion To Completeness by Kyselyov, kino paper).
You have two types of streams - push and pull.
Iterators and lazy sequences are push, where the consumer pulls elements out of a stream. you build a stream up by chaining pullers.
Callbacks, observable/reactive subscribe, fold/reduce and channels/queues are push streams.
Transducers arise from a generalization which falls out when you try to implement eager map/filter/etc on pull streams, you find out there's a "kernel" you can factor out which is independent of what actually happens inside.
They are also independent of the push function.
They also turn out to be a transformation of a push function. (going to use reducing function because it's more intuitive)
a reducing function is a function of acc -> elem -> acc, e.g. it takes an accumulator and elements and returns an updated accumulator.
a transducer is a transformation rf -> rf
With these properties it should be obvious why they can compose and exist independently of any one rf, so you can use them when you reduce, create an iterator, put on a channel, etc.
Since this is all just function composition and the JVM has a killer JIT compiler, this ends up being as effective as a stream fusion compiler in a statically compiled language.
A pleasant side effect is it eliminates intermediate steps and allocations, the only overhead is function call.
>>
File: glare-cat.gif (30 KB, 220x203)
30 KB GIF
>>109046227
How long does that take?
>>
>>109047794
It would be nice if compilers (including JITs) were better at vectorizing the resulting loops. They're supposed to, but almost never do a good job of it for whatever reason.
>>
>>109048162
the tutorial takes like an hour? idk it's been so long since i did it... why wouldn't you want to learn about the tool you're using unless you're a larper
>>
>>109046451
>Makes no argument why LLMs made him crash out but you have to refuse to use LLMs at all
What insane nonsense! What's next? Chopping off your cock and balls and HRT? Geez!
Oh wait sorry that's le Nazi bar talking (wait where was beer invented?)
>>
>>109048226
Most tools are learned by trial and error not study. Isn't it spooky to think Stallman never installed Linux himself/Linus never installed Debian?
You're holding too many conflicting beginner sources as an entry point these days to let the tools speak for themselves.
>>
>>109048245
i don't think people need to read the guided tour but i think the tutorial about how to use basic commands is sensible
beyond the initial basic stuff then yes i agree it should just be trial and error through experimentation and creativity
>>
>>109048226
>why wouldn't you want to learn about the tool you're using
Alternatives offer a thoughtless speedy ramp to getting shit done. The competition is who can think the least and ship the most.
>>
>>109046785
>You lost, troonjak. I depicted myself as the passing anime girl (male) and you as the not passing cobson ladyboy (also male)
>>
File: ZUN.jpg (199 KB, 771x1024)
199 KB JPG
>>109048517
Actually I'm literally ZUN doe
>>
>>109048162
How short of a tutorial do you fucking need?
I could probably give an overview of vanilla emacs in about 5-10 minutes if you are someone with a basic understanding of computers. Just a few key topics:

1. What are buffers? How do you open new buffers and change active buffers? (60 seconds)
2. The minibuffer and opening a file (15 seconds)
3. The meta key, and using the meta-x key chord to call arbitrary functions. M-x save-buffer. M-x replace-string. M-x sort-lines. M-x describe-key. (2 minutes)
4. Ctrl key and common chords. Learn about them by using M-x describe key. Eg M-x describe key C-x s. Note how C-x s just calls the function save-buffer that we called above. Demo split screens (2 minutes)
5. The *scratch* buffer and evaluating lisp expressions to modify running configuration using C-M-x, defining your own custom interactive function you can call with M-x my-function just like the built-in functions. (60 seconds)
6. The init.el file and overview commonly-used functions and settings like tab-width, inhibit-splash screen, global-set-key, and loading additional configuration files. (60 seconds).
7. Installing language modes from MELPA using M-x package-install. (2 minutes)
8. Reassure panicky normalfags that they don't need to see a filesystem tree on their screen at all times.

Like 10 minutes.
>>
>>109048431
How would you know it's actually any faster? You just took the groomer at his word. Now you're in his basement and have stockholm syndrome.
>>
>>109046210
How is Doom beginner friendly? You would have to be familiar with Vi, and then learn how Emacs works in general, on top of learning the Doom-specific ways of doing things.
>>
>>109048860
>How is Doom beginner friendly?
NTA, but
1. Doom comes with useful stuff preconfigured that takes ages to discover and configure in vanilla emacs
2. Doom's default settings, keyindings etc. actually make sense whereas Emacs' are just nonsensical
>>
clojure's syntax is like what would happen if Lisp and JSON had a baby together
>>
>>109048960
>Doom's default settings, keyindings etc. actually make sense
iff you're a vim user
>>
>>109048960
>1. Doom comes with useful stuff preconfigured that takes ages to discover
What stuff?
>>
>>109048977
I wasn't a vim user when I started using doom emacs. I'm still not much of a vim user.

vim also doesn't come with a doom/spacemacs-style leader menu by default
>>
>>109049005
so you're saying that modal keybindings are more user friendly than non-modal? we both know that's not true
>>
>>109049032
Emacs uses mnemonic keybindings for actions where the focus should be on using keys that are easy to reach, and non-mnemonic keybindings for things where mnemonic keybindings would actually help.

I never forgot hjkl after going through eviltutor the first time, because those keys are so essy to use in unison.
I dimly remember that Emacs binds some navigation actions to C-n (next... line? next character?), C-p and C-b, but even though they're mnemonic, I don't even remember which one is which because they're so cumbersome that I basically never use them.
Same thing with dired, where you get to the parent directory by typing ^ because I presume it looks a bit like a up arrow, but it is one of the hardest characters on a keyboard to type blindly. I bound h to dired-up-directory, l to dired-find-file, j to dired-next-line and k to dired-previous-line and I'm fucking FLYING through my file system.

Then I press ctrl-x and none of the keybindings under it are mnemonic at all, it's just a bunch of legacy bindings bound to seemingly random keyes that have accumulated over the years because they haven't come up with a better way of preserving backwards compatibility.
>>
File: Crying-Hulk-Template.jpg (85 KB, 720x582)
85 KB JPG
>tfw I had to wait to discover emacs after I was born
>>
>>109036740
>given that Clojure actively reduces the most sophisticated parts of Lisp that other languages don’t have
based
>>
https://protesilaos.com/codelog/2026-06-13-emacs-flat-dired-for-regexp-since-days/
>When we call dired from Lisp, we can pass it a list of files instead of a directory.
I had no idea about this. That's pretty nice.
>>
TRVE STORY:
>be me at boba cafe
>brought notebook and lisp textbook
>random guy approaches me and makes friendly banter
>tells me about his life as a glowie defense contractor engineer because being a math professor doesnt pay the bills
>"Oh yeah I program to but not LISP UGH PARENTHESES"
>"LOOK KID ONE PIECE OF ADVICE YOU BETTER IMPROVE YOUR SOCIAL SKILLS"
>smile, nod, study
Muh social skills man I didnt prompt that, nigger.
>muh parens
dude there's editor checks for that and they're super useful at debugging shit

Being caught with lisp in public gives you instant sperg points apparently
>>
Just realized it's been 10 years since the first commit in my .emacs.d. I have this general circa 2015 to thank for that:

Date:   Sun Jul 3 15:25:56 2016 -0600

Add personal config


Still using Emacs daily btw.

>>109046475
I always get Xah and that chinaman that harrasses Po Lu on emacs-devel mixed up.
>>
>>109050956
> math “professor”
> can’t handle parentheses
Sure, guy
>>
>>109051078
that's what I'm SAYING
>>
>>109048210
I think we'll see more of that when the vector API on the JVM stabilizes https://openjdk.org/jeps/508
>>
>>109051078
>math
>>
File: pro-mode.png (346 KB, 1000x996)
346 KB PNG
>>109050737
based prot
>>
>>109031458
https://ianyepan.github.io/posts/emacs-in-pop-culture/
>In Episode 5 of Japanese sci-fi anime Aldnoah.Zero, we catch glimpses of both Emacs and Emacs Lisp during a fight between two mechas. Blink and you’d miss it.
>Look closely towards the bottom right, our pilot appears to be debugging some issues with their .emacs initialization file. We’ve all declared .emacs bankruptcy at one point so I can certainly relate to the pain. But in the middle of a mecha fight? Now that’s a first.
so that's where the OP image comes from
>>
>>109037103
Another factor was maven. CL community put up an early clone of CPAN in the 2000s and some buggy fetcher with asdf-install, but it wasn't good, a lot of people just found stuff through cliki and vendored manually. quicklisp came out in like 2010, so you had about a decade from the late 90s to late 2000s of stagnation especially with open source CL and community. Clojure grew out of that.
Thankfully these days CL has an answer to most objections. One of the last major hurdles I think that still gives some incentives for Clojure is cross-library coherence. For example, does library X offer logs for its operations out of the box? Can you use any of the major logging libraries or are you locked into one? In the JVM ecosystem, there's also a bunch of logging libraries, but common wrappers like SLF4J and common APIs means if you setup logging in your application with your preferred choice of implementation, and bring in whatever libraries written in whatever JVM language, logging for those libraries is frequently present and typically "just works". It adds to the business-value of the ecosystem.
>>
>>109056744
https://anikototv.to/watch/aldnoah-zero-hlia9/ep-5
Start playing from around 18:30 to catch a glimpse of it.
>>
>>109057374
>In the JVM ecosystem (...) logging for those libraries is frequently present and typically "just works".
Yeah, logging. But the JVM ecosystem in general isn't a happy place.
>>
>>109044800
>Forgive the language but I think Shinmera is a G*rman.
Shinmera = Yukari Hafner from Zurich, Switzerland
>>
>>109058834
*Nicolas Hafner
Also kinda funny that he stole xir trooname from a 2hu character. Zero originality award.
>>
>>109048851
Facts
>>
>>109048976
clojure and json had a baby called edn
>>
>>109059084
I just hope he can put out as much software as he can before the troon meds or the anti-AI psychosis make him end it all
>>
I for one wish all Lispers the best and lots of happiness regardless of who they are :)
>>
>>109058819
>happy
Maybe not, but it's relatively vetted and stable.
>>
>>109060948
this
I do not enjoy programming any longer. I've been doing it too damn long. programming is to create shit, simple as. Clojure gives me the powers that I actually care about having access to in a Lisp while giving me the ability to leverage extremely used ecosystems, which is intelligent to do when you realize reinventing wheels is so, so stupid, and a waste of time on this Earth when you are not trying to learn in the process, or genuinely do better than existing work (quite difficult).
I've also come to realize that 90% of the opinions people have about things in programming are either parroted opinions or "by-feel" opinions. the truth about the JVM and the Java ecosystem is that more problems have been solved in it than pretty much everything else (and Clojure shields you quite well from the BS)..
>>
I can't hate Java, less than a decade in the mines let me retire early and now I can jerk off with occasional Lisp programming instead. If devs actually spent time learning to make the most of their fat IDEs instead of treating them like a slightly more bloated Notepad they'd have a better experience too. Anon is right that most people's opinions about it or most anything else in programming are retarded.
>>
>>109061756
Your post reminds me of something.
When Lispfags talk about what languages they use if they have to use something other than a Lisp, they tend to name interpreted or VM-based languages that are distinctly unpopular in general /g/ circles. Python, Ruby, Java in your case, and so on. That in and of itself isn't way too weird, as those did have their followings in hacker culture even if they've sort of fallen out of favour, but I've picked up on something else.
Is it just me, or do Lispfags talk about other programming languages in a way that's distinctly different from most programmers? For example, when a Lispfag talks about Python and how he uses it, it's almost like he's describing a completely different language than how most Python and non-Python programmers describe it. It's an even bigger gap than the difference between how functional and imperative programmers talk about languages, outside rare outliers such as people in Robert Harper's circles calling Haskell "the best imperative programming language" and arguing that it only has approximations of types.
>>
>>109063221
At job I use mostly python.

It is a very complicated and deep language internally.
>>
>>109057374
>CL community put up an early clone of CPAN in the 2000s and some buggy fetcher with asdf-install, but it wasn't good, a lot of people just found stuff through cliki and vendored manually.
The absence of strong technical leadership fucked CL.
>>
(cons 1 2)
>>
What's the way to do
>if implementation x, eval foo code
>if implementation y, eval bar code
I can't seem to phrase the question in a way that search engines can figure out what I'm asking.
A macro or function with a conditional throws an error about no such package even though that expression is in a branch of the structure that wasn't taken.
I know there's some way to do this but I can't find it.
>>
>>109064895
Use of *features*. #+sbcl evaluates the next expression if sbcl is in features, #-sbcl evaluates the next expression if sbcl is not in features. It's a reader conditional.
#+nil is also a useful way to skip evaluating the next symbol or expression.
>>
>>109065180
>reader conditional
Many thank anon.
>>
>>109064731
i don't understand the hate some people have against cons cells desu
>>
>>109066170
pointer chasing
>>
>>109066534
_mm_prefetch.
But also implementations differ. They are not simply programming 101's first linked list in C. In SBCL, if a list is constructed in order initially, the elements will reside nearby. If not, they will become nearby if the GC needs to move it. Fixnums especially may be stored directly in the car/cdr without further pointer chasing. The compiler may optimize to allocate cons cells or lists on the stack, or even individual elements into separate registers. Lispers have thought about representation issues for a long time: https://en.wikipedia.org/wiki/CDR_coding
>>
>>109066607
Still not as efficient as arrays / structs, unfortunately. It does not detract from the good engineering work that has been done, but just because you can model everything using a heterogeneous 2-tuple doesn't mean you should.
>>
>>109066631
Sure, but that doesn't justify the hate, nor does the performance difference matter in many cases, and anyway plenty of Lisp code uses arrays, structs, or hash tables, it's not like we're all just using lists for everything. I really think most of the hate comes from people thinking they are the same as a beginner linked list in C, or maybe a std::list in C++, coupled with a hate for system-default malloc/new, which is also not how our allocations with GCs work.
>>
Daily reminder that all the elisp code in emacs could be taken and be rewritten in JavaScript and nobody would notice. We could also have all the same properties we have now like "muh self documenting", "muh written in itself" and "muh can redefine function on the fly"
>>
>>109067037
>emacs in javascript
that already exists. it's called the web browser
>>
>>109066534
>>109066607
>>109066631
>>109066657
CONS is a language primitive, not an implementation detail. That's just Hickey propaganda.

A cons cell is just an ordered pair, which is a common abstract mathematical concept. It dictates nothing about its implementation. In fact, the requirements are simply that, if z = (cons x y), then (car z) = x and (cdr z) = y. That's it. It can be implemented as a plain closure over two values. If you had actually read SICP, you'd know this.

Cons cells can be, and historically were, implemented as pointer pairs (36-bit machines could use a single word), but they don't have to. In fact, SBCL will often store small literal lists as basically arrays underneath, since it doesn't change the observable behavior.

Remember: a programming language doesn't have to work like Lisp to be good. But this is how Lisp works.
>>
>>109067455
I think you’ll find you quoted a post where anon actually agrees with you by saying implementations differ; clearly this implies cons does not force a particular implementation. >>109066607
And >>109066631 seems to be referring to the fact that efficient engineering of cons cells in hardware has been attempted for a long time and it turns out that this is highly nontrivial.
I think you might want to consider what you’re actually replying to before getting snippy like that since I think they’re most likely better informed than you seem to be, no offence.
>>
File: image.png (61 KB, 984x406)
61 KB PNG
Just discovered Alt + i
>>
>decide to see what Xah Lee is all about
>listen to him for 10 minutes
>he’s a total fucking idiot
>>
>>109068856
he has a couple of useful pages on his website
>>
File: mad.png (112 KB, 700x615)
112 KB PNG
>>109068856
many such cases when a programmer speaks in front of a webcam for more than 10 minutes
>>
>>109068856
xah-fly-keys is better than ev*l-mode tho
>>
File: IMG_2222.jpg (650 KB, 1806x2560)
650 KB JPG
>they actually made SICP an anime
>>
>>109069673
Holy shit you're right
>>
>>109067455
sour grapes
>>
SICP is overrated, if you know how to program it's boring, if you don't it's incomprehensible I imagine, and the metacircular evaluator is worthless (literally just circular logic i.e. no practical or theoretical usefulness)
>>
>>109070756
I learned to program with SICP and I didn’t find it incomprehensible at all. It was a fantastic introduction and I thought the metalinguistic abstraction chapter was the best part, I felt my entire perspective on programming form when I read that chapter. I thought it had a tremendous amount of value, personally. I can see how it might not land as well with someone who already has their own perspective considering it’s a very strongly opinionated text.
>>
File: 1776512068769870.png (4 KB, 334x285)
4 KB PNG
>>
>>109069139
Why does he not use https again?
>>
>>109070857
emacschizo
http://xahlee.info/w/why_no_https.html
>>
>>109070610
I’m glad finally someone else sees it too
>>
>>109070756
> SICP overrated
I’ve been in lisp for decades, and I had never heard of it, so I picked it up a while back.
I completely agree with your sentiment.
My overall takeaway was that it concentrated too much on mathematical algorithms while you’d never do that shit in lisp to begin with.
Picrel is the only book on my desk.
When I do scheme, I just put that book away and use nothing for reference.
>>
>>109071603
I’m not sure whether I’m overestimating mathematical literacy in computer programmers but it seems as though this focus on criticism of SICP for including too many mathematical concepts misses the point of why it was in there.
This was an introductory text at MIT. By focusing on simple mathematical concepts you can let the problems get out of the way of the concepts of programming languages because you can assume everyone has this knowledge as a common foundation. If you say why doesn’t it teach X Y or Z more sophisticated algorithm thats because it was an introductory text and they may not be able to guarantee the students had that background yet.
I really struggle to see how it’s incomprehensible as an introduction though. Maybe the people who find this too hard as a first text should just try harder and not expect things to come without a bit of work, I don’t know, but I have to wonder where the bar is if this isn’t an appropriate introduction. Scheme is incredibly easy to learn and I can’t see any serious barriers that an incoming first year student couldn’t overcome just by putting their head down and giving some problems more serious thought.
If anything is overrated it’s the supposed “incomprehensibility” of the book for students and that’s a bad sign that the bar is just too low imo
>>
>>109071710
To make a small addendum: the claim you’d never do mathematical algorithms in Lisp to begin with is also false. For reference consider another MIT course around when SICP was written and in use, Oppenheim’s well known signal processing courses. You can find in his book with Schafer a small footnote referring to the use of higher level languages like Fortran and Lisp in implementing some of the algorithms he describes in the book (this is done when explaining his choice to use Fortran to give examples). So there is direct evidence that Lisp was in fact being used for at least some scientific or engineering algorithms in those days, which would’ve made it a significantly more reasonable choice than it might seem now.
>>
>>109068856
>>he’s a total fucking idiot
Yes he is. Xah Lee totally sucks.
>>
>>109070976
but he was right doe
>Let's Encrypt bans certificate usage in any US sanctioned territory
https://news.ycombinator.com/item?id=48453275
>>
>>109064631
>The absence of strong technical leadership fucked CL.
The problem is that it is not a popular language. And any language that becomes popular, becomes so either

(a) because a technical detail forces you to use it, for example:

- C: if you want to directly use UNIX systemcalls, you need C

- C++: if you want to develop a commercial game, chances are the only suitable libraries available are for C++

- Javascript: Browsers used to only run javascript thus you need to write js.

or

(b) because some company is shilling for support and marketing it heavily, for example:

Java: Sun Microsystems and IBM poured tons of money marketing java

Golang: Google

of
(c) a killer app or framework appears, everybody wants to use it, and this drives the popularity of a language, for example:

Ruby: Unknown until Ruby on Rails appeared
Python: Unknown until Django appeared, and then only popular for webdev until Numpy, Scipy, and Pandas appeared.

It is not due to some kind of leadership. Ruby and Python had "leaders" long, long before their languages becoming popular. Nobody cared for Python from 1990 to about 2005, for example.
>>
>>109071829
>Python: Unknown until Django appeared, and then only popular for webdev until Numpy, Scipy, and Pandas appeared.
This is wrong though. The mistake doesn't undermine your whole post but Python never had a "killer app" the way Ruby did. Sure Django was popular, but it didn't give Python the same kind of massive bump that Ruby got. By mid-2000s Python was already gaining adoption across the board in all the niches its known for today (learning, system administration and scientific computing). Python was already known as a free/open source alternative to MATLAB. Eric Raymond began shilling Python as a perl replacement as early as 2000. MIT switched their intro CS class from Scheme to Python in 2009 (at which point Python was already well-established as an effective learning language).

Ruby was an overnight sensation. It was the darling of hipster webdevs of the web 2.0 revolution and Rails was its killer app. Ruby was more "fun" than Python, the community was very enthusiastic and pushed lots of trendy and "opinionated" ideas (some were good and some were bad). But most of those enthusiastic hipster-types moved on, because it's in their nature to always be drawn to The Latest Thing and be on top of the latest fads.

Python though, just got popular through a long and consistent grind. You might point to Tensorflow or PyTorch as its "killer app" but even there, they came out of Python's firmly established niche as the scripting language of Scientific Computing. Those projects targeted Python because that's where the scientists already were.
>>
>>109071603
>you’d never do that shit in lisp to begin with
why not? aren't all algorithms are mathematical
>>
>>109071750
Lisp has long been used for big and powerful CASs, there are tons of "mathematical algorithms" it's great for. We don't need to rewrite BLAS/LAPACK but outside of Rust evangelists no one else really wants to either, we can just call them like everyone else or get within spitting distance with some elbow grease.
People filtered by SICP because of mathematical topics freshmen used to be expected to know like calculus, GCD, or modular arithmetic should have been filtered from programming as a whole.
>>
>>109069673
Redpill me
>>
C-0 C-k
>>
I want a Lisp where quotation is the default, and have to add a symbol to explicitly enable evaluation.
>>
>>109069673
>>109075248
>Girl in pic related is daughter to seamstress, admires magic and wants to become witch, but gets told it’s impossible because witches are born that way
>discovers that magic is actually a hidden language of sigils and it has rules that she can figure out and secretly learns it
>literally teaches herself the structure and interpretation of sigil programming
>>
>>109076807
how do you quote the symbol that enables evaluation?
>>
File: worlds-fastest-itoa.png (31 KB, 640x199)
31 KB PNG
>>109073682
I wasn't saying lisp is useless for *learning* mathematical algorithms--it's great for that, I just won't put them into production like that. Too slow/inefficient and too far removed from computer architecture/hardware.
Sure, we used Fortran for that because it had built-in access to the vector processing option.
Today, we'd use something like GOAL for a high-performance use on something other than a Knight machine that was adapted to processing lisp primitives in hardware.
Even C++ tends to somewhat adopt lisp-like thinking for certain things, like the "world's fastest atoi" where they implemented and used similar concepts of (car and (cdr but head() and tail(). Why look at something like that? It's a good blend of algorithmic and mathematical concepts tied together and applied as "computer science"
>>
>>109075494
This is surprisingly useful
>>
>>109078322
>I just won't put them into production like that.
you won't put anything into production
what motivates you to post some of the most schizo rambling bullshit? you're a stupid fuck without understanding of compilers.
>>
>https://github.com/TeMPOraL/nyan-mode
Oh god I'm tempted
>>
I've adopted Evil Mode and I rather like it. I've been using Emacs for years and I don't think that I need any more packages or to make many more config changes. When should I try Doom or Spacemacs?
>>
>>109078565
>nyan cat in the big 2026
truly a blast from the past
https://www.youtube.com/watch?v=Til6kcoY0Yk
>>
>>109078478
most lisp implementations are interpretive, and even when compiled, they often have features that interpreters have such as garbage collection although it's possible to do away with that, too, in specialized implementations.

even a compiled language can have severe performance impacts if it, say, allocates heap for every variable.

> motivation
to teach the ignorant, apparently
>>
>>109078687
You really have no idea what you are talking about.
>>
>>109078322
Wasn’t the original point, though, that there WAS some objection to teaching as it was done in SICP?
>>
>>109078761
The objection was there is too much concentration on mathematical algorithms and not enough on other important and/or essential algorithms in computer science.

Take the chapter on "square root" for example. Nobody's going to implement square root using newton's method as interpreted code. You're going to shunt your (sqrt function to something like the intel SQRTSS instruction in your lisp implementation.

And then you look through the SICP some more and realize there's nothing covering sorting.
>>
>>109078623
If you've been using Emacs for years, neither Doom nor Spacemacs should be used. Just stick with your own config. Those configs are aimed at people who are already competent with Vim but are new to Emacs.
>>
>>109078895
It’s not a course on data structures and algorithms though. It was intended that what you’re looking for would be covered in CLRS, which it is. Meanwhile the square root function is an accessible method they’ll all know and it’s covered in the first few pages. I just can’t get worked up about it.
>>
>>109078623
the only reason to try either would be to see if there's any stuff you think is really neat that you'd want in your own setup.
>>
>>109078895
>Take the chapter on "square root" for example.
The purpose of that chapter is to introduce the concept of a procedure-- the very concept of encapsulating your own algorithm into a named unit to be called with parameters that return a value. The MIT course used Square Root Approximation because

(a) all MIT students at the time were expected to know it
(b) Requires a sequence of steps, not just a single expression
(c) Easily and intuitively implemented recursively, requiring no explicit assignments or direct memory manipulation.

The recurring theme in that part of SICP is also a general approach to solving problems with a computer. How do you take some problem, any kind of problem, and solve it using a computer? They emphasize what is more commonly known as a "top-down" approach to solution design, where you know what you want it to look like (eg the API), but you need to work out an implementation.
>>
If you use any of the modus themes or its derivatives like the ef themes, try customizing modus-themes-headings. Doing something like this will increase the font size for headings in org-mode and info-mode.
(setopt modus-themes-headings
`((0 . (1.7))
(1 . (1.5))
(2 . (1.3))
(t . (1.1))))

https://github.com/protesilaos/modus-themes
>>
>>109075494
>C-0 C-k
The evil equivalent is d^
>>
>>109080302
>https://github.com/protesilaos/modus-themes
I found these themes from the README, and I really like them.
https://github.com/lucasobx/pixel-themes
(use-package pixel-themes
:vc (:url "https://github.com/lucasobx/pixel-themes" :branch "main" :rev :newest))
>>
File: 3qg6y712fomb1.jpg (62 KB, 735x385)
62 KB JPG
Im on 7.15h for Touretzky's Gentle Intro to lisp and feel like a weenie for taking a week in Chapter 7 to get this far. Feeling wiped out after every giga beginner exercise. Maybe slow and steady wins the race to no gf
>>
>>109078687
>i am a computer science illiterate hurr durr look at me drool
>>
File: prograde-lisp.png (28 KB, 919x694)
28 KB PNG
Semi-annual reminder that you should be studying real lisp code in order to improve your lisp proficiency. Note that real lisp code is written in upper case and makes extensive use of what the uninitiated refer to as "goto"
>>
>>109081187
actually a good use of GOTOs to keep logic simple, and all jumps are forward so no spaghettis.

This is something the young generation will never appreciate.
>>
>>109081187
WHY IS IT YELLING AT ME
>>
>>109081187
Im gonna read OpenGoal and Guix and emacs configs
>>
>>109081336
LOSER!
YOU MAKE ME SICK YOU BIG BABY!
>>
>>109081695
Im going to be reading Kandria
>>
>>109079017
>neither Doom nor Spacemacs should be used
lolno
Doom just werks 4 me
>>
What's the argument for Spacemacs over Doom anyway?
>>
>>109083831
>What's the argument for Spacemacs over Doom anyway?
I used Spacemacs for a long time, and I think their space menu keybindings were thought out better. For example, they made an effort to use the same bindings for various REPL actions across major modes for various programming languages. Opening a REPL and sending code to it used the same keybindings no matter what language you were programming in. When I tried Doom, my recollection was that they didn't try to be as consistent across languages.

Video unrelated.
https://www.youtube.com/watch?v=OGQR3Chf9hE
>>
>>109077095
Not sure yet, possibly like this:
(1 2 3 yolo words asdfgh (! quote !))
(1 2 3 yolo words asdfgh \!)

I want to actually make it a catlang but enable an s-expression syntax extension by default.
The actual primitives are a) spacing b) input ordering c) "quotes" that disable the spacing rule, allowing for multi-word, multiline, arbitrary data, and multiple encodings d) the evaluator function ! and its escape \! e) comments.
#![implicit_list]
1 2 3 #'(1 2 3) in SBCL
#![lisp]
(1 2 3) #'(1 2 3)
(! add 1 2) #(add 1 2)
#![cat]
1 2 (\! add) lambda ! cons #(quote (cons ((lambda add) 1 2))) = '(3)
>>
>doomemacs
>Cannot even run doom
Smh
Senpai
>>
File: doom,.png (284 KB, 1012x635)
284 KB PNG
>>109085346
It's doomed
>>
>>109081262
I never understood the 'all goto bad' ideology.
>>
>>109087203
>>109081262
if all the jumps are forward, it's actually fine. But moving all over the place makes the logic very hard to understand, especially in code that modifies state.
>>
has anyone gone through the trouble of making a multilingual version of the ~R and ~:R directives in format?

It's really nice to be able to spell out numbers like that, but the sites I make need to be multilingual
>>
File: issue.png (133 KB, 1291x755)
133 KB PNG
Using nerd-icons.el, Emacs decides to render certain icons with another Nerd font I have installed (Noto Nerd font that I use for my statusbar) which in turn causes the icons to be off-center. If I uninstall this extra nerd font, Emacs only uses the Symbols Nerd Font Mono to render all icons, which is exactly what I want since everything is neatly aligned.

How can I make Emacs/nerd-icons.el only use the Symbols Nerd Font Mono to display icons and never use other installed Nerd fonts? I already have nerd-icons-font-family set to "Symbols Nerd Font Mono" (default value).

Pic related: An example of the misaligned icons.
>>
>>109087203
You're young
>>
>>109087446
This is something I'd like to believe ISLisp or Le Lisp considered and diverged from the true American Common Lisp on, but somehow I doubt they did. I suspect you'll have to use gettext-style key-value whole-string lookups like everyone else, with some ~[] spread around if you want some conditional formatting.
>>
>>109084264
> the evaluator function ! and its escape \! e) comments
Perfect! You can take that syntax change detail and turn it into a whole cultist ecosystem with you as their king like clojure did.
…but you need another gimmick. Clojure and Racket already did painful bloat and slowness, you should base the UI on electron and use/bind the V8 VM exclusively so you can into the whole “i can call any npm package” thing.
>>
>>109087887
man you really dislike Lisps other than Common Lisp.
Clojurescript can already call any NPM package btw.
Racket has the notion of custodians and security guards for sandboxed eval, which is very, very powerful.
what CL package do you use for sorted set (not the fset variants, mutability is desired). in Clojure I can use the JVM's built-in TreeSet.
>>
>>109087887
I already got my second gimmick:
sauce closed >:^D
(Also, "Hello World!" will compile to less than 500 byte ELF executables.)
>>
>>109087887
it's amazing how extremely butthurt some CL users are
>>
>>109089107
imagine the interop and time savings if every language was implemented on top of CL as a dsl.
>>
>>109089189
I'm imagining it
>>
>>109089288
do you need a tissue
>>
>>109089419
I'm gonna need a whole roll and some wet wipes
>>
>>109089107
They are terrible ambassadors for an otherwise good language.
>>
I just solved a minor annoyance that has been bugging me for years. I use electric-pair-mode while using org-mode, and it's mostly nice, but whenever I typed "<", electric-pair-mode would autoinsert '>" which was annoying.
- It disrupted math input.
- It disrupted yasnippet usage for the snippets that begin with "<".
- It disrupted org-tempo which also uses "<" as a leader for its block insertion.

The following code disables the automatic pairing of "<" and ">" and streamlines an input issue I had been manually working around for way too long.
(defun electric-pair-disable-angled-brackets-in-org ()
"Disable pairing of < and > while using `electric-pair-mode' in `org-mode'."
(interactive)
(modify-syntax-entry ?< ".")
(modify-syntax-entry ?> "."))

(add-hook 'org-mode-hook #'electric-pair-disable-angled-brackets-in-org)


Maybe this will help someone else out there.
Credit: https://www.reddit.com/r/emacs/comments/fbggoy/comment/fj9zpdw/
>>
>>109087887
This has to be a false flag to make everyone else look bad, just fucking embarrassing to turn that into an excuse to bitch about Clojure
>>
>>109087473
Well, you have a big problem here.
You don’t see how?
Look at the encircled symbol in picrel. That is not a beaker… it is very obviously an Erlenmeyer flask. That nerd font is either completely unusable or the name mapping is, but probably both.
>>
>>109089107
Clojurefags just won't stop thinking about CLhads.
>>
>>109087505
Yes, too young for having fallen for boomer memes.
>>
>>109089797
> false flag look bad
Not necessarily. I started in Autolisp and used common lisp for quite some time. Then I discovered scheme. Now I believe CL should have probably be deprecated in favor of scheme: it’s a fundamental improvement. Sure, CL has “standards” just like fortran 77 is a standard, but scheme was a fundamental improvement, and continued efforts into common lisp dilutes the final, most perfect lisp form which has evolved to scheme.

I can’t wrap my head around the fact that CL doesn’t even guarantee tail recursion optimization. For the love of Guy, why? I have even found that other language implementations that should know better, such as C and Java don’t guarantee (and some, hardly ever)

That’s just one example, but generally CL should be built on top of scheme for a sold theoretical foundation. Continued misguided CL efforts dilute the true essence of lisp.
>>
>>109033594
> anon just discovered category theory and thinks he's the first to notice

kek, the associahedron doesn't make your transformer understand syntax any better than a rock understands gravity
>>
>>109034330
> mfw anon discovers translation requires actual computation

fr, try sentx.ai for that kind of reasoning work, it handles the heavy lifting without the cope
>>
>>109091074
I agree with you that Scheme is a much nicer language than CL, but it’s not so clear that Scheme is nicer to use. There are some serious things which CL has which make it a nicer development experience even if I agree Scheme the language is the nicer design.
One is the restart system but there are also others such as unwind-protect which Scheme doesn’t seem to think is so important, and then SBCL in particular is a much better compiler than anything in Scheme. It makes it much easier to actually write things in CL even though I do wish it has the elegance of Scheme.
>>
>use package for months without issue
>author starts egregiously vibeshitting
>package becomes unusable
i am tired of software
>>
>>109091288
Name and shame
>>
File: developers vs users.jpg (182 KB, 1024x846)
182 KB JPG
>>109091288
pic related strikes again
I find the gap between how devs and /g/ users perceive software interesting, including how users judge languages by the software they experience. Rust is perceived not so much through its own merits, but as a language for loudmouths who mostly just rewrite and clone existing projects. C++ and C are pitted against each other based off how lightweight, responsive, and considerate of the OS's design philosophy their programs are (Gnome garbage and Gimp are never considered here, amusingly enough), and the C guys tend to come out on top. Lisp programs...a non-dev usually won't bump into a desktop one unless he tries Emacs, so his perception is that Lisp is a meme language nobody uses.
The thing here is that outside the Gnome/Gimp exception, these kinds of biases can actually help you pick good software as a desktop user. If you have to choose between a C++ program and a C program in your package manager, the C program is usually the lighter and more pleasant one. Sometimes the Rust program is good, but it's usually incredibly derivative and has no real vision beyond being written in Rust. When it comes to software written in Python, Golang, or whatever, the user experience varies, but the Lisp software you almost never bump into unless you're really seeking it out. Vibe coding gets a "lmao, the dev probably isn't looking closely enough at the output" response, and regardless of whether it can be done right or not, quite often that bias proves correct when you bump into a vibecoded program.
>>
>>109091369
in this case the culprit appears to be jojojames. guess i'm dropping fussy and fzf-native and returning to orderless. his new fzfa package appears to be completely ai generated as well, it straight up fails to do anything if you don't have ivy installed. apparently claude doesn't know how dynamic binding works
>>
>>109091523
I guess I should clarify this a bit and say that I don't think users are necessarily right about a language's merits if its software is written by a hypothetical ideal developer. It's more a matter of, how do a languages features and flaws shape what its average developer creates? Can a good feature create horrific messes when it's used by the wrong person? Can working around flaws in the language sometimes produce better software in the end?
There's definitely some influence here from Winestock's Lisp Curse essay, wherein he posits that "Lisp is so powerful that problems which are technical issues in other programming languages are social issues in Lisp."
>>
>>109091617
elpa sisters, we can't stop winning
https://lists.gnu.org/archive/html/emacs-devel/2026-06/msg00421.html
>>
>>109080302
>ef themes
interesting
>>
File: 1773319230386617.png (18 KB, 416x160)
18 KB PNG
With the new NTFS driver I can finally get rid of my ghetto ass setup for NTFS-3G on Guix and just use the normal fs declaration.
And as far as it behaves at least it doesn't seem to corrupt the drives 100% of the time if you happen to force shutdown your PC like the dogshit NTFS3 one.
I'm happy.
>>
>>109095146
what font is this please
>>
File: 1767343309665422.png (43 KB, 975x235)
43 KB PNG
>>109095298
TX-02, from the same people who made berkeley mono, I don't even remember where I got them from.
Not sure how hard they are to find so these https://files.catbox.moe/wwr948.zip are all the variations I have.
>>
>>109095388
thanks friend
>>
>>109091675
To the user, languages are as useful as the programs they provide.
>It's more a matter of, how do a languages features and flaws shape what its average developer creates?
It affects your speed.
>Can a good feature create horrific messes when it's used by the wrong person?
Always.
>Can working around flaws in the language sometimes produce better software in the end?
If the software is one and done, yes. Otherwise, no.
>Lisp is so powerful that problems which are technical issues in other programming languages are social issues in Lisp.
It's always a social issue in all languages. What technical issue are you thinking about?
>>
File: 1765111789593405.png (124 KB, 424x452)
124 KB PNG
>package adds useless dependency
>>
>>109095388
Interesting
https://usgraphics.com/products/berkeley-mono
>>
File: clisp-win32.png (47 KB, 677x342)
47 KB PNG
Come home kikeman
>>
I just use comic neue
>>
>>109095388
Ligatures don's seem to work with this one. Nice looking font though.
>>
>>109095712
>package pulls in s, f or dash
immediate uninstall
>>
>>109031458
Why the fuck is epa-file still asking me to select the key despite me setting
epa-file-encrypt-to
to my key AND
epa-file-select-keys
to nil?
>>
>>109098282
Setting
epa-file-select-keys
to
'silent
did it...

If t, always ask user to select recipients.
If nil, query user only when ‘epa-file-encrypt-to’ is not set.
If neither t nor nil, don’t ask user. In this case, symmetric encryption is used.

Self documenting my ASS!
>>
>>109097424
it's always dash. pisses me off desu
>>
>>109097245
> nice
Looks like a dot matrix printer, lol… eww
>>
>>109098782
liderally sovlmaxxed 2 the maxx
post youre font bucko
>>
>I arrived to ch8 Recursion in Touretzky
Hold my dragons
>>
>>109099090
Hold my monadic fat-nut-ohedrons
>>
>>109099540
End of evangelion aesthetics
>>
I've used org for a long time, but I didn't realize until today that M-<left> and M-<right> could move whole columns while in an org table. M-<up> and M-<down> also move rows.
>>
>>109101270
I never quite know when I should decline Markdown and use Org instead.
>>
>>109101297
I just use org by default unless I have to use markdown. For example, README files for my projects (regardless of language) are usually README.org files. However, if I'm documenting a Julia library, I write docstrings and long form documentation in markdown, because that's the standard for that language community.
>>
>>109101297
Why would you ever use markdown if you can use org instead, it's not like it's harder to use, it just has much more depth.
If you don't want to engage with the more complicated stuff there's absolutely no reason to, but if you ever need it they'll always be there.
>>
>>109081187
what theme is this
>>
>>109101662
>Why would you ever use markdown
better compatibility, more intuitive syntax
>>
>>109102790
default?
>>
File: 2026-06-21_00-54-58.png (109 KB, 956x1012)
109 KB PNG
>>109102986
emacs -Q --reverse-video
>>
What CL features does scheme miss the most? And could some of them be implemented as a library?
>optional static typing for safety and optimization
This is missing I believe and has to be implemented in the compiler
>CLOS
>LOOP
These could be implemented as libraries, but specific support by the compiler should help performance perhaps?
>condition and restarts
I'm not sure, but I think this could be implementable with continuations
>arbitrary code execution at compile time
>reader macros
I imagine these are provided in non-standard ways by the implementations

Anything else? Anything I got wrong?
>>
>>109103145
unwind-protect is a feature missing from Scheme which it would benefit from.
Loop should not be in the Scheme standard imo. It goes completely against the Scheme way of thinking. There is zero chance of this being done and it’s for the best it stays out of Scheme.
As for CLOS, GOOPS has basically the right idea, just less fleshed out. The MOP is built in as well, which is good.
>>
>tfw the macro works
Lisp just feels like freedom sometimes
>>
>>109103169
Just remove the do keyword and loop is functional
>>
>>109104040
And? Since when was that the issue with loop?
>>
>>109104138
When people compare cl and scheme, they often talk vaguely about how CL is the more "practical" language, while scheme is more "academic". I am just curious about what people mean by this concretely, and the things I mentioned are the first things came to my mind. Your reply was good
>>
>>109104217
But what does that have to do with loop and it being functional or not? The issue people have really had with loop is that it’s cramming in an entire separate DSL into Lisp. Many were not pleased by loop being in Common Lisp. Given that Scheme is an extremely minimalist standard even more philosophically opposed to something like that, there’s absolutely no chance loop would have a home in Scheme.
>>
>>109104233
A separate DSL which breaks from Lisp syntax completely, I should add. This was a big part of why people felt it didn’t belong.
>>
>>109104217
> CL is mote practical
Scheme could (largely) be turned into CL with enough functions and macros.
It keeps the scheme core essentials tiny which is good for bootstrapping.
Loop is unnecessary in scheme because of the tail recursion guarantees. After you do a few of them you just get used to it… it’s not unlike a goto loop from basic with a condition to goto somewhere else after the loop.
>>
I've never produced a macro so good that it's convinced a Python user that Lisp has value.
>>
>>109105058
PEP's are essentially macros.
>>
>>109104239
>>109104233
One of the selling points of lisps is the ability to design and seamlessly use domain specific languages to more clearly, simply and concisely express the logic required by a particular problem. If this principle really is true, a lack of "unlispy" DSLs targeting common programming problems would be baffling. Simple repeated execution of some block of code, whether through tail recursion or some imperative construct is one of the most commonly used techniques in programming; finding a way to distill its most recurrent patterns into a simple, elegant declarative DSL is brilliant and very useful in practice. Loop is flawed in being non-extensible and having unnecessary infix notation. These are non-issues that can be easily solved[1] or safely ignored. But its not like there's much of a technical discussion of merit to be had when the main reason people dislike loop is phylosophical. I recall lispers being proud of avoiding that kind of mentality however.

(Of course, since scheme aims to be minimal it does make sense for it to avoid loop. My original question I guess was not "what's some shit that should be crammed into scheme", but rather what are the things people supposedly miss in scheme when it comes to practical usage)

cont.
>>
>>109105632 cont

[1] Here's a trivial prefix loop syntax (all the infix keywords get joined to the first one, every clause is a sexp with parens)
(loop (:for-in x '(1 2 3 4 5 6 7 8 9 10))
(:sum-into x total)
(:while (< total 25))
(:when (zerop (mod x 3)) (:collect x)))

Here's scheme's equivalent:
(import (srfi 1))

(let ((total 0))
(filter (lambda (x) (zero? (modulo x 3)))
(take-while (lambda (x)
(set! total (+ total x))
(< total 25))
'(1 2 3 4 5 6 7 8 9 10))))

4 lines that are almost natural english with an AST depth of 4, versus 6 lines with a depth of 6. Of course, a more functional named let expression would be even worse in both complexity and readibility.
>>
>>109105632
Thats a completely separate point to whether loop should actually be in the standard. I don’t recall any point at which Lisp ever prided itself on being opposed to philosophical debate though. Common Lisp’s design was frequently debated on philosophical grounds for including too much which never needed to be in the standard, loop not being close to the worst offender here.
This is beside the point since apparently what you meant was something else in the first place anyway.
>>
>>109105820
>I don’t recall any point at which Lisp ever prided itself on being opposed to philosophical debate though
I was thinking about the discourse surrounding OOP, such as this quote:
>If you need the convenience, you use it. OO in Common Lisp is not a
religious good/evil issue, it is a pragmatic issue. To people who think
in good/evil terms, this is evil, as the good of OO can only be obtained through force and restrictions. CLOS offers freedom. It can be very hard to deal with freedom if what you were looking for in an OO system
was a way to cage yourself in.
A lot of OOP discourse outside of lisp has a phylosophical side, where people talk about how oop maps to how we think and stuff like that. There's often a certain rigidity to it, like, everything must be done a certain way because that's just the Right Way (Tm). Common lisp CLOS is just taking a look at features commonly called oop and providing them as convenient tools without much ideology. I mean, methods without classes or dispatching on symbols is somewhat blasphemous for mainstream OOP.
>>
>>109102790
>>109102986
>>109103038
alternatively, look into standard-dark
https://protesilaos.com/emacs/standard-themes-pictures
>>
>>109105058
At the same time a lot of masturbatory macrology would be better off expressed as just simple operations on dictionary literals. Especially a lot of stuff starting with def.
Then there's also the problem of time marching on. Syntax for pattern matching is genuinely useful if you've committed to expressing your problem that way instead of multimethods or enterprise abstractions. Python users could be mocked for lacking it until v3.10. Now what they have kind of sucks and they're stuck with it, but they at least have it, removing another instance of macros giving a useful language syntax feature. That argument holds less water to languages that already have a lot of features and keep acquiring more.
>>
I think I'm gonna stick to loops actually no thanks
>>
wasn't there some alternative to loops that did not get into the standard? Iterators or something like that
>>
>>109107626
Series.
https://github.com/rtoy/cl-series
https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node347.html#SECTION003400000000000000000
>>
File: SerieSICP.jpg (214 KB, 1920x1080)
214 KB JPG
>>109107983
Nice.
>>
>>109080460
>https://github.com/lucasobx/pixel-themes
These are really good.
>>
File: 1728297184272.jpg (117 KB, 970x824)
117 KB JPG
>>109107454
usecase for "loops"?
>>
>>109091675
>Winestock's Lisp Curse essay, wherein he posits that "Lisp is so powerful that problems which are technical issues in other programming languages are social issues in Lisp."
The essay is bullshit, the author is a frontend dev that has never really used Common Lisp for something beyond a hello-world. It's all armchair conjectures.
>>
>>109103145
>What CL features does scheme miss the most?
All the interactive development niceties, like save the status to disk, restart execution of stack frames, redefine classes at runtime, and of course recompile functions while the program is running.
> And could some of them be implemented as a library?
No, it requires changes on the implementation, on the debuggers/IDEs, and perhaps on the language itself.

>>109103145
>I imagine these are provided in non-standard ways by the implementations
No.
Reader-macros and execution during compile time are all standardized, it's all on the ANSI CL standard like God intended to be. CL rules.
>>
>>109104233
>Many were not pleased by loop being in Common Lisp.
loop "just works" kek. Yeah, it looks ugly. However it solves many problems easily. If you don't like it there are tons of alternatives, so no big deal.

>>109104239
>A separate DSL which breaks from Lisp syntax completely
it doesn't break from lisp syntax because it still uses () and symbols, doesn't add more than that.
>>
>>109105058
>I've never produced a macro so good that it's convinced a Python user that Lisp has value.
- everything is an expression
- lambdas can have more than one line
- native ahead-of-time code compilation
- an object system that does not suck

it is fine if a Python user doesn't recognize any value in Lisp, that speaks more about the ignorance of the Python user regarding advanced hardcore programming. I can still travel to other country by walking, if I'm as silly as to fail to recognize the value of aviation.
>>
>>109105636
>4 lines that are almost natural english with an AST depth of 4, versus 6 lines with a depth of 6.
bruh, just import your favorite functional collections library in Lisp, and call it a day
>>
>>109105820
>Common Lisp’s design was frequently debated on philosophical grounds for including too much which never needed to be in the standard
The thing is...

Scheme was designed from the ground up from zero, some guys thought "it would be nice to have a language that has this and that". And I think they did a fine job.

After designing a language, then they create one or more implementations and then they hope for people to use their language for real-world stuff, where finally they will get feedback of what is fine and what's not so fine on the language.

Common Lisp wasn't created like that. Common Lisp was born because there were a bunch (dozen?) companies already doing real-world serious stuff with Lisp, like computer algebra, simulations, operating systems, graphics, CAD, CAM. They ALREADY had working software, they already had experience on what is USEFUL and what is not. Mind you, this includes commercial software and software used in the defense industry or other "serious" industries.

So they wanted to "unify" the several Lisp dialects in use into a "common" one, but keeping the features they consider to have been PROVEN to be useful, in real-life, with actual software.

Thus, from those meetings Common Lisp was born and codiifed in "Common Lisp: The Language" in the early 80s.

Most of the things the armchair specialist deride as "ugly" or "scheme does it more elegantly so", are things that enabled those companies to create kick-ass software.

So in this sense Common Lisp is very, very different to Scheme, and in that sense most CL developers are very, very different to Scheme developers. That being said, I think that some Scheme implementations are pretty cool.
>>
>>109112403
I'm a Python user who was very interested in Lisp for quite awhile. I've been using Emacs since 2006 and fell for Paul Graham's evangelism during that era and read his books. But I have to agree with the other poster's sentiment. He specifically said he was never able to demonstrate a macro so useful as to convince a python user to switch. And I can't really deny that. After all my forays into Lisp I have always wound up back at boring Python for getting work done.

>- everything is an expression
This is why Lisp is fun to program, but it's not a huge concrete benefit.
>- lambdas can have more than one line
This is a relatively minor issue. Yes yes, I get the ease and elegance of anonymous functions but they aren't a massive productivity win and overuse leads to readability and debugging issues.
>- an object system that does not suck
I am just not that interested in object-oriented systems, period. I'm not writing systems large enough to need it (especially not in Python). Python's object system is perfectly adequate for standard APIs that couple data and methods (eg an http client). If I was working on some specific problem domain where CLOS's fancy object features were remotely relevant, I might have a different perspective. But they aren't features I'm reaching for normally and no one here seems to ever be able to describe those problem domains in a compelling way.
>- native ahead-of-time code compilation
I use golang when I need this (which isn't too often). Historically I used C. I use Odin for hobby videogame projects.
>>
>>109112193
Asking Scheme to forgive our sins
>>
>>109105636
here's that program in Clojure:

;; direct translation of your Scheme version
(let [!total (volatile! 0)]
(->> (range 1 11)
(take-while #(> 25 (vswap! !total + %)))
(filterv #(zero? (mod % 3)))))

;; using transducers
(let [!total (volatile! 0)]
(eduction
(take-while #(> 25 (vswap! !total + %)))
(filter #(zero? (mod % 3)))
(range 1 11)))

;; using loop/recur
(loop [[x & xs] (range 1 11)
total 0
res []]
(let [nu-total (+ total x)]
(cond
(<= 25 nu-total) res
(zero? (mod x 3)) (recur xs nu-total (conj res x))
:else (recur xs nu-total res))))
>>
>>109112998
>>- everything is an expression
>This is why Lisp is fun to program, but it's not a huge concrete benefit.
Sorry, but you're wrong. When everything is an expression, many benefits arise, and one of them is that code editing becomes incredibly easy. The other is that the implementation of complex stuff can be simplified. Important constructs, including complex control flow constructs, can be easy to create, as well as logical operations.

>>- lambdas can have more than one line
>This is a relatively minor issue. Yes yes, I get the ease and elegance of anonymous functions but they aren't a massive productivity win
What happens is that you're not familiar with the many things that can be done in functional programming, thus, you don't consider this important.

>and overuse leads to readability and debugging issues.
only for Pythonistas, sir.

>>- native ahead-of-time code compilation
>I use golang when I need this (which isn't too often). Historically I used C. I use Odin for hobby videogame projects.
Yes, I can also code in Golang and C. The productivity in Lisp is at least 10x that of making the same stuff in C or Go.

>>- an object system that does not suck
>I am just not that interested in object-oriented systems, period.(...)

Ok, your answer is reduced to "I'm only writing simple stuff". If that's the case, stay with Python.

No offense, but you sound like somebody who is just at the beginning of a programming journey. Thus, the advantages of Lisp will just fly over your head for now.
>>
>>109104217
Scheme wasn't remotely practical except as a research language until R6RS (2007). Of course that was the most controversial version ever. It didn't even have the concept of packages / namespaces until then.
>>109112497
Yes and these Lisps were all practical. Lots of government contracts too. Maclisp, Lisp Machine Lisp, Zetalisp, Interlisp, NIL, Franz Lisp... S1-Lisp was being built as an early CL, before CLtL1 was published, for supercomputer number crunching. There was a long period of interoperability between these older Lisps and the new Common Lisp, as it took a long time from the first overview in 1982 to the final ANSI publication in 1994. Depending on the environment, sometimes the interop was just as simple as deciding what was in your defpackage's :use. Namespaces are great.
>>
>>109113230
>No offense, but you sound like somebody who is just at the beginning of a programming journey. Thus, the advantages of Lisp will just fly over your head for now.
No offense taken, but this assumption isprobably why responses are just lazy boilerplate with no interesting or persuasive points at all. Indeed, you seem to be the journeyman with limited real experience. You've had your one positive experience with Lisp and was never forced to seriously consider or evaluate any other approach.

Truth is I'm not at the beginning of a programming journey, I'm well past the middle of it. I've circled back to boring and straightforward imperative styles after years of making excuses to use Lisp and any sort of functional paradigm whenever I could.
>>
>>109112998
use-package is an example of an excellent domain specific macro that makes code simpler and shorter. Nothing like it is remotely possible in a language like python, and my config would be twice as long and three times as ugly and repetetive if it were in python because of it.
>I have always wound up back at boring Python for getting work done.
Because of libraries or your personal issues.
>I don't care about OOP features
Weren't you a graham fan? He wrote an article about people saying "I don't understand this feature, so it's useless".
>>natice compilation
>I use golang when I need this
Let's say you start a project in python, and later realize performance is an issue. Now you have two options:
>write a c library and handle interop
>rewrite whole project in go
Not very neat.
Now, let's say you knew that performance would be an issue from the start. You write the whole project in go. Maybe the actual performance-critical section is just a couple hot loops, some 50 lines of code out of several thousands. And still, you have to give up python's convenience for the whole project, including all the parts where performance doesn't really matter.

In common lisp, you write with maximum convenience until there is a performance bottleneck, at which point you look into reducing consing and adding type signatures for the specific section of code that needs it. This is just objectively better.
>He specifically said he was never able to demonstrate a macro so useful as to convince a python user to switch.
The real problem is that it doesn't matter how good a macro people bring, or how much objectively better things can be found in lisp, the "worthiness of switching" will always be squashed by two things: the absolute hatred stupid people have for learning new things and the undeniable convenience of relying on an ecosystem with an enourmous amount of manpower behind it
>>
>>109112342
The Mark Tarver article that Winestock cites is a bit less based off conjecture, given its author's experience with Lisp and designing Qi and Shen.
>>
>>109113690
>Indeed, you seem to be the journeyman with limited real experience. You've had your one positive experience with Lisp and was never forced to seriously consider or evaluate any other approach.
You can say whatever drivel you want, the fact is that some of your answers sound like a junior developer. For example, no programmer with sufficient experience would dispute the fact that a language where everything is an expression brings huge advantage.

As for myself, quite the opposite, i arrived to Lisp after more than 28 years of programming using most popular languages. Including 2 years in fucking Python.

All this made me remember that Lisp shouldn't be evangelized at all. Any sufficiently advanced programmer, that is, somebody that had to actually implement complex stuff for actual commercial, serious scientific, or life-or-death purposes, immediately understands the advantages of Common Lisp by just taking a look at the feature set. They also recognize the advantage and values of other good PLs that have a rich, powerful feature set, like Erlang, OCaml, Haskell etc.

No evangelizing needed.
>>
File: mic drop.jpg (5 KB, 400x267)
5 KB JPG
>>109114756
>Weren't you a graham fan? He wrote an article about people saying "I don't understand this feature, so it's useless".
+1
what a beautiful mic drop. Well played, sir.

>the "worthiness of switching" will always be squashed by two things: the absolute hatred stupid people have for learning new things
indeed
>>
>>109099090
This is the only book I ever read where I felt guilty for reading it too quickly
>>
The author of the IRC client CLatter has made an Elisp version called clatter.el.
https://github.com/parenworks/CLatter
https://github.com/parenworks/clatter.el

>Spiritual successor to CLatter (the Common Lisp TUI client), redesigned from scratch for Emacs.
>>
>>109031458
Common lisp feels like the C++ of lisps.
>>
>>109117307
Common Lisp is way more sensible. My main complaints are that it has unergonomic corners, but I never think that it's batshit insane.
>>
>>109117307
That's not an unreasonable comparison.
I still believe that CL should be built on top of scheme, just like C++ was originally built on top of C with the cfront compiler. Deviating from that when the market became flooded with unemployed msc students that had nothing better to do than flood the standards committee with bullshit core syntax changes was the beginning of the end. Also, retards at microsoft that merged the C and C++ compilers into one thing an used their C pre-processor to implement C++ templates.

If CL were re-built on Scheme, then most of the macros and stuff could be standardized rather than needing custom implementations for every CL implementation (i.e. gensym vs. make-symbol vs. gentemp vs. ...)
The standardization process goes the opposite way it should --> hoarding all possible crap into the standard. It should be seeking to minimize the the language and Scheme is a good start.
>>
>>109115495
>Including 2 years in fucking Python

I don't see why we can't modify Python to essentially embed arbitrary LISP or SCHEME *into* python and have it use it's features (primarily garbage collection on objects). Lisp is well-known for the ease in which it can be parsed and executed.

(I actually know why, it's the zealotry and purity within the python community (and other communities))

We did this in multiple ways before: Take OpenMP directives for example. On AS/400 you could "embed" SQL in your COBOL program. With Oracle you could embed SQL in C using Pro*C. You can embed assembly language in LISP with GOAL and in C with _asm blocks. It's a common practice.

Why not let developers embed LISP in Python as appropriate? Eventually all the functions will become LISP naturally and then you can throw the Python interpreter into the wood chipper.
>>
>>109114756
>Weren't you a graham fan? He wrote an article about people saying "I don't understand this feature, so it's useless".
Turns out he's a massive pseud good at making fallacious arguments sound appealing. It's not that I don't understand OOP features. It's that you don't seem to realize there are tradeoffs to using them and many (probably most) projects don't need them. CLOS is not some kind of amazing power granted to Lisp users.

>>I have always wound up back at boring Python for getting work done.
>Because of libraries or your personal issues.
No, it's a combination of Python's objective language features that I wind up benefiting from frequently and the ability to share my code and explain it effectively to other developers of varying experience and skill levels.

Python's slice syntax, string literals, build-in libraries like subprocess, and even the list comprehension syntax are all very convenient. These are features I benefit from constantly, all the time, when I write python.

[x[0] * x[2] for x in lst]

vs
(loop for x in lst collect (* (first x) (third x)))
;or
(mapcar (lambda (x) (* (first x) (third x))) lst)


The Python version of this is just exactly what I want. The expression goes first, no need for a special collect keyword. The x[n] syntax is clear and readable to anyone, as is the infix arithmetic. Consider a dictionary literal:

{x[0]: x[1] * x[2] for x in lst}


Do this in Common Lisp you are immediately forced to decide between using an assoc list or take the trouble of making a hashtable. The specific examples are trivial, but a lot of code (especially the type of code where Python is a viable option) is often just combining a lot of these trivial cases. The Python syntax conveniences provide consistent benefits.
>>
>>109115495
>Any sufficiently advanced programmer, that is, somebody that had to actually implement complex stuff for actual commercial, serious scientific, or life-or-death purposes, immediately understands the advantages of Common Lisp by just taking a look at the feature set.
We're not talking about merely recognizing advantages, though. We're talking about making a rational, real-world decision that weighs the pros and cons (ALL of them) realistically. Do you have any idea at all how much "serious scientific work" uses Python? I'm looking at some right now. They use exactly the workflow you lazily and thoughtlessly dismissed as "not very neat." Python handles all the user interface stuff and basic logic. Critical functions are expressed in python using the the various high-performance libraries written in C and Fortran. These "hot loops" run on a cluster for 5-10 hours. I didn't choose the tech stack for this, but I can see code making lots of use of those python features I mentioned above like dictionary, string and list literals and the slice access syntax. The code is broken into many smallish functions, and each function is mostly imperative. Just a simple list of statements and functions that is very easy to follow and understand. In the most mathematically complex sections, heavily-nested expressions are deliberately avoided. Complex expressions are broken into multiple, statements assigning to informatively-labeled variables. High-order functions are used (sparingly) to keep the API simpler.

>life-or-death purposes
Writing actual life-or-death software involves rigorous discipline no matter what language you're using. You find constraints like "avoid complex control flow" (like recursion) and "avoid complex macros."
>>
>>109119612
>need for a special collect keyword
yes, but python requires
__name__ == "__main__"

everywhere. I'll choose lisp. The language was designed instead of "grown" by non-experts. If I want to indulge into crazy syntax shenanigans instead of clarity, I'll use APL or Raku.
>>
>>109105058
the `named let` is only attainable through a macro. no other functional language has these besides lisps.
>>
>>109120222
ecosystem matters dum dum. Nobody uses APL or Raku. Python usually gets the job done.

If instead of arguing you've expanded CL's ecosystem somehow maybe it'd be more popular.
>>
>>109120285
there are numerous languages with macros at this point. even Rust has them.
of course, Lisp allows making them VERY trivially compared to most other languages, but also, there are problems (IMO) with Lisp's macros, namely, the inability to differentiate a list from a function call, necessitating the capturing of context in order to differentiate them.
Elixir does not have this issue, and also has macros. Elixir's `something(...)` syntax is ALWAYS a function call, unless you are deciding to do some weird shit like use a macro to convert them into other things.
>>
>>109120222
Lisp has the same thing with eval-when if you want to make a lisp file both a script and separately load-able without executing something.
>>109119612
There have been list comprehension macros for Lisp and Scheme available for decades, but really, look hard at this argument: you're arguing over a few characters in a contrived example. This is pretty different to the old arguments against C++ or Java where the Lisp (or Python) equivalents of real programs could be 10-100 times shorter. Python is lucky if it gets an integer factor savings in conciseness. And of course Lisp macros let you play golf if you want.
But this argument is also decades old. Norvig's points in https://www.norvig.com/python-lisp.html are still valid. Python has very nice syntax, especially for short pseudo-code that can actually execute, and attacking that front isn't the most fruitful avenue to getting Lisp converts. It's at best a bullet point, focused around Lisps not having as many inconsistencies and kinds of tiny minutia of syntax grammar you have to be constantly aware of in pretty much every non-Lisp language. The worst is like how/where you need extra wrapping parens in places like cond vs case, defclass, and what have you, or which equality predicate to use, both of which were improved in Clojure. You never need to worry about having 6 types of False-y values, or "global", or how you won't get a fresh list if you make one a default argument, or bad placements of commas or returns or pass...
>>
how long is too long a programming session?
I think 3 hours is ideal
>>
File: snailcat.jpg (154 KB, 1440x1440)
154 KB JPG
why use a slow language like lisp when you can use a faster language like Go with concurrency and static types?
>>
>>109122495
why not read existing literature and give it a try yourself?
useless post, no further responses recommended.
>>
>>109122502
“no further responses recommended” on a discussion board is pretty funny ngl
>>
>>109122495
Use Haskell.
>>
File: 1782053719251314.jpg (45 KB, 400x400)
45 KB JPG
>>109122525
you're asking retarded shit with obvious responses if you use a search engine or a LLM
>>
File: rob-pike-go.jpg (281 KB, 1024x683)
281 KB JPG
>>109122495
>They’re not capable of understanding a brilliant language
>>
>>109122495
Why use a bad language like <insert your favorite language here> when you can use a good language like <insert my favorite language here>?
>>
>>109119612
>larger community to share code with
>I like python's syntax sugar
>built-in libraries
This is far from the worst reply you could've written to me. And yet...
>ignores use-package example of a useful macro
>ignores tunable performance argument
Also, I still think having a flexible and well designed OOP system such as CLOS is great, and it is widely used in practice. What kind of argument is it even to say "not every project needs it"? Not every python projects needs dictionary comprehensions either, doesn't make that feature worthless though, does it?

If you only write <200 lines scripts, then I can see how you'd care much about the convenience of typing a little less thanks to syntax shortcuts. That's something Paul liked too, remember Arc, his dead "100 year" language? It had "[]" define a lambda with "_" as argument. Very convenient syntax sugar, yet saving a couple keystrokes is like having a shorter variable name, not really that big of an advantage.

The real value of a programming language lies in the semantics of what it offers to you as a programmer, as in, the actual functionality of the tools that you use. If slices ever become important in a lisp project, you can write a macro to do it, and it'll be equivalent (if a few characters more to type). If you ever find yourself missing something in python's syntax, there's nothing you can do. And it's not like the python designers can predict every possible syntax you might want and offer overloading for it.
>>
>>109122495
go is slower than java, let alone sbcl



[Advertise on 4chan]

Delete Post: [File Only] Style:
[Disable Mobile View / Use Desktop Site]

[Enable Mobile View / Use Mobile Site]

All trademarks and copyrights on this page are owned by their respective parties. Images uploaded are the responsibility of the Poster. Comments are owned by the Poster.