…from people who seem to refuse to install paredit or coloring plugins for either? ps lisp syntax ftw, it’s a feature!
Clearly, the superiour mode is to just use keyword based scoping (à la Ruby
do ... end
). When I was a kid I read an OBSCENE MAGAZINE where I saw a Forth program godup dup dup
and I was like “ok so what’s the problem here? Things happen and everything is just keywords?” and my young mind was corrupted forever I guessI don’t get why people hate semantic whitespace. The whitespace would be there anyway, and if anything it’s easier to read as long as you avoid 15 nested if statements, and you’re not using a dynamically typed abomination like python.
S-expressions are a hack because the Lisp devs didn’t know how to make an actual compiler, and instead had the users write the syntax tree for them. (For legal reasons I am being facetious).
In all honesty, I can understand the reason people love s-expressions, but to me they’re just unreadable at a glance.
Semantic whitespace is awful because whitespace (something that you can’t actually see) has meaning in how the program runs. Braces
{
}
for scopes gives you the ability to easily tell at a glance where a scope ends. Whitespace doesn’t allow for that. Especially, especially when you can accidentally exit a scope (two new lines in a row with Python) and it’s not actually an error (Pythons global scope). Yeah formatters and linters make this less of an issue but it sucks… Languages with legible symbols for scoping are significantly easier to reason about, seeend
symbols in Lua.I literally can’t see whitespace, it gives me headaches looking for it. With brackets, I can get bracket matching in my IDE.
S-expressions are a hack because the Lisp devs didn’t know how to make an actual compiler, and instead had the users write the syntax tree for them. (For legal reasons I am being facetious).
Just for anyone thinking you are serious; https://en.wikipedia.org/wiki/M-expression I love how S-expression existed.
McCarthy had planned to develop an automatic Lisp compiler (LISP 2) using M-expressions as the language syntax and S-expressions to describe the compiler’s internal processes. Stephen B. Russell read the paper and suggested to him that S-expressions were a more convenient syntax. Although McCarthy disapproved of the idea, Russell and colleague Daniel J. Edwards hand-coded an interpreter program that could execute S-expressions.[2] This program was adopted by McCarthy’s research group, establishing S-expressions as the dominant form of Lisp.
And for anybody thinking of implementing M-expressions, look at Wolfram Mathematica, which is the only popular M-expression-oriented language. It turns out that high-level graph-rewriting semantics are difficult to make efficient! (If you want to try, you might also want to look at GHC or other efficient graph-rewriters to see what the state of the art is like outside Planet Wolfram.)
Everyone that prefers whitespaces over parentheses is an animal.
moo
Yep! Most of us are even homo sapiens!
Meow.
People who prefer significant white space over bracket & brace blocks and semicolons are animals
People are animals.
I like them both. But I only use lisp for fun.
Haskell does both! Most people prefer to use whitespace when writing Haskell but it’s not required. Braces and semicolons are preferred if you’re going to be generating Haskell code.
So I’m going to say what I always say when people complain about semantic whitespace: Your code should be properly indented anyway. If it’s not, it’s a bad code.
I’m not saying semantic whitespace is superior to brackets or parentheses. It’s clearly not. But it’s not terrible either.
As someone who codes in Python pretty much everyday for years, I NEVER see indentation errors. I didn’t see them back when I started either. Code without indentation is impossible to read for me anyway so it makes zero difference whether the whitespace has semantic meaning or not. It will be there either way.
This leads to weird bugs when you change indentation and miss a line or reorder lines. The logic changes. Not too bad when you’re on your own, as Python seems to be intended for. Add multiple developers and git merges and it is a recipe for disaster. With end tags at least you just end up with poorly formatted working code.
It’s probably more prone to mistakes like that, true. But in practice I really never witnessed this actually being a problem. Especially with tests and review.
The number of times I move code around and can just press a hotkey to fix indentation though. Not possible with Python.
Yeah, that’s definitely a good point. But it’s a minor thing. Adjusting indentation takes 2 keystrokes in vim, I barely notice it.
Python decided to use a single convention (semantic whitespace) instead of two separate ones for machine decodeable scoping and manual/visual scoping. That’s part of Python’s design principle. The program should behave exactly like what people expect it to (without strenuous reasoning exercises).
But some people treat it as the original sin. Not surprised though. I’ve seen developers and engineers nurture weird irrational hatred towards all sorts of conventions. It’s like a phobia.
Similar views about yaml. It may not be the most elegant - it had to be the superset of JSON, after all. But Yaml is a semi-configuration language while JSON is a pure serialization language. Try writing a kubernetes manifest or a compose file in pure JSON without whitespace alignment or comments (which pure JSON doesn’t support anyway). Let’s see how pleasant you find it.
Most IDEs support automatic code formatting, and doing so on save. Or have it as a github hook.
Of course, but when indentation has a syntactic meaning the formatter often won’t be able to fix it.
apples and oranges is why
Go home OP, you’re drunk.
And give us your keys, you’ve had too much minimalism to drive.
But s-expressions give you power that other syntax doesn’t. Data and code as one. Besides there is no other syntax than simply that so it becomes much easier to remember random extra things.
Whitespace on the other hand, I hate with fiber of my being.
Yes definitely. However Rust manages to become extensible and capable of constructing powerful DSLs out of it’s macros without using S-expressions. But I still find them prettier than Rust’s syntax.
a = [ Haskell , is , the , GOAT ]
Yew, what the fuck
you’ll pry my END command from my cold, dead hands…
Load-bearing whitespace is a mistake.
deleted by creator
Might just be me but YAML is some of the least readable shit I’ve ever used.
deleted by creator
I write my short hand notes in yaml.
People with bracketed languages just want to write the most unreadable code ever to feel superior.
Python has one of the worst syntaxes out there