5 ms·
> BrainF#*k not a true language Curious why that might be, and TFA doesn't expound. What makes it not a "true" language?
by commandlinefan 5y ago
> BrainF#*k not a true language
Curious why that might be, and TFA doesn't expound. What makes it not a "true" language?
- casion 5y agoMy "not so gracious" interpretation: "It would invalidate the claim that we wish to make, so... no true scotsman"
- not2b 5y agoLisp is a language that people actually use to get work done; Brainfuck isn't.
- casion 5y agoI suppose the humor was lost in my message.
- commandlinefan 5y agoWell… I believe it was James Gosling who said that there are two types of computer languages: “ones people complain about and ones nobody uses”. So if you’re complaining about Brainfuck then it must be a language people use by process of elimination ; )
- yellowapple 5y agoThis presumes that "ones people complain about" and "ones nobody uses" are mutually exclusive - and I'm reasonably sure that Brainfuck is clear evidence against such mutual exclusivity ;)
- gmfawcett 5y agoStroustrup, not Gosling. And I like your logic. :)
- klyrs 5y agoUnless your "work" is proving that a language is Turing complete. That is, to my knowledge, the only serious use of brainfuck.
- jart 5y agoAuthor here. We anticipated this as a possible criticism of our "we built the world's tiniest programming language" claim. That's why we wrote the Brainfuck interpreter too. As far as I know, the 99 byte Brainfuck interpreter that's included in this blog post is the tiniest one to date. So even if that invalidates our tiny LISP victory, it'd still be a victory for the team since we built the competition too.
- shadowofneptune 5y agoI would have to assume because it's neither a high-level language, nor a practical low-level one. True in the sense of a language being a labor-saving device.
- commandlinefan 5y agoOk, that matches my understanding of it then - it is a language, just not one you'd actually want to do anything in. I was thinking that the author was saying it wasn't a programming language in the sense that HTML is not a programming language.
- jart 5y agoAuthor here. You know it when you see it. LISP is a tool that people want to use. People write production software using it. For example, this website (Hacker News) was written in LISP. Languages like BrainFuck are usually only called programming languages if the word "esoteric" is attached. There's a real consensus of opinion around this this being a generally held view. There should ideally be a more compelling explanation of why Brainfuck is an esoteric toy and LISP isn't, than me simply saying "but that's what people believe". I considered going into more depth on this subject. I found a C to Brainfuck compiler written in OCaml and used it to compile a Brainfuck metacircular evaluator into Brainfuck. It ended up being 88,439 bytes of code, and it sadly didn't work, because the compiler isn't very polished. Let's compare ratios. Brainfuck is 99 bytes, whereas Brainfuck written in Brainfuck is 88439 bytes. That's 893x larger. On the other hand, LISP is 436 bytes of systems code and LISP written in LISP is 1370 bytes of LISP. That's 3.14x larger. It's cool that the ratio between layers of simulation with LISP is pretty close to pi. It helps explain why LISP is viewed by human beings as being such a powerful tool, since it lets you accomplish more impact with less effort, without having the castles you build turn into a leaning tower of pisa. Since after all, the purpose of tools since prometheus has been to give people more power.
- deleted 5y ago[deleted]
- tromp 5y agoWould you consider binary lambda calculus [1] [2] a real language? The 650 byte interpreter written in obfuscated C also sports garbage collection and might fit in a bootsector when translated to x86 code. Its metacircular interpreter is only 29 bytes (232 bits), and looks somewhat readable with some syntactic sugar [4] (analogous to how x86 looks more readable as assembler source). [1] https://www.ioccc.org/2012/tromp/hint.html https://www.ioccc.org/2012/tromp/hint.html [2] https://tromp.github.io/cl/Binary_lambda_calculus.html https://tromp.github.io/cl/Binary_lambda_calculus.html [3] https://github.com/tromp/AIT/blob/master/int.lam https://github.com/tromp/AIT/blob/master/int.lam
- sitkack 5y ago
- roywiggins 5y agoIt's almost the opposite of a language, in that it's probably harder to do anything with than just using whatever the native assembly instructions of the machine are. It's explicitly designed to be annoying, an example of a Turing tarpit: https://en.wikipedia.org/wiki/Turing_tarpit https://en.wikipedia.org/wiki/Turing_tarpit
- chubot 5y agoI had this argument once -- I also believe Brainfuck is more of a machine than a language. Whereas Lisp is a language. The main reason is that Brainfuck lacks composition, so what happens in practice is that people GENERATE Brainfuck code rather than writing it. When you write code, you rely heavily on your programming language's mechanisms for composition in order to make something that works. Someone pointed me to people who DO actually program by hand in Brainfuck. There are some pretty big programs that are hand-written, not generated. Still I'm not entirely convinced, as they seem to be have been constructed through mental feats, not compositional language. It's a curious fact that human languages and programming languages compose in a way that can be leveraged to build very large things that "work". I guess there is some equivalence between building up a large body of knowledge through language and making a program that works. Brainfuck doesn't seem to have this property. The demonstrations of arithmetic and calculus in the post are nice examples of this in Lisp, and from there you have the rest of the world as your disposal (which is well documented in many books). With Brainfuck you're left crawling on your hands and knees, occasionally finding something that works, so to speak.
- harryposner 5y agoFrom the beginning of SICP [0]: > A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas. Every powerful language has three mechanisms for accomplishing this: > * primitive expressions, which represent the simplest entities the language is concerned with, > * means of combination, by which compound elements are built from simpler ones, and > * means of abstraction, by which compound elements can be named and manipulated as units. Brainfuck is missing any sort of means of abstraction. The primitives are instructions, and the only means of combination is writing instructions in sequence, but there's no way in the language to refer to any sequence of instructions --- no functions, no subroutines, not even labels. This makes it utterly useless as a way to organize your thoughts on how to compute something. [0] http://sarabander.github.io/sicp/html/1_002e1.xhtml#g_t1_002e1 http://sarabander.github.io/sicp/html/1_002e1.xhtml#g_t1_002...