4 ms·
I think it appeals to the same itch that languages like Brainfuck scratch. There's something exceedingly interesting about how you can model complexity with so
by tombert 11mo ago
I think it appeals to the same itch that languages like Brainfuck scratch.
There's something exceedingly interesting about how you can model complexity with something extremely simple. Brainfuck is fun because it forces you to think extremely low level, because ultimately it is basically just a raw implementation of a Turing machine. I wouldn't want to write a big program in it, but it is fun to think about how you might express a complicated algorithm with it.
Similarly with CGOL, it is really interesting to see how far you can stretch really simple rules into something really complex.
I've written CGOL dozens of times, it's a common project that I do to "break in" a language I've learned, since it's not completely trivial but it's simple enough to not be frustrating, and I completely understand why math/computability-theory folks find it something to dedicate brain power to.
- __del__ 11mo agofor those who think brainfuck is too pedestrian, have a browse through the esolang wiki: https://esolangs.org/wiki/Language_list https://esolangs.org/wiki/Language_list
- tombert 11mo agoI have no idea how I'd be able to pitch this to a university (or even who I could pitch it to), but I would absolutely love to teach a computability course using Brainfuck as the language, just to really show students how low-level logic can be. I would probably need to find a similar language with a different name though.
- jachee 11mo agoHow about Assembly?
- tombert 11mo agoAssembly is higher level logic than brainfuck, especially on modern chips. You have built in instructions for arithmetic and conditionals/branches and you can allocate memory and point to it. You don’t really get any of that with brainfuck. You have a theoretical tape and counters and that’s basically it.
- eru 11mo agoSKI calculus is pretty neat, too. You get no tape, no counters. (But it's not quite as bad to program in as brainfuck, because you can built more ergonomic contraptions to help you along.)
- somat 11mo agoUnlambda solves that problem. "What if we had the lambda calculus without the lambda forms?" asked no one. http://www.madore.org/~david/programs/unlambda/ http://www.madore.org/~david/programs/unlambda/
- arethuza 11mo agoSKI can, of course, be de-optimised a bit further by replacing I with SKK. You are right though that it is relatively simply to go from something that looks like a normal program languages to a pile of S and K combinators. Not the most efficient way to compute though!
- brightly-salty 11mo agoYou might find mlatu-6[0] interesting- it’s convertible to SKI calculus but concatenative (like Forth) rather than applicative. It’s actually a subset of Mlatu, a language I created for similar reasons to explore “how low can you go.” [0]: https://esolangs.org/wiki/Mlatu-6 https://esolangs.org/wiki/Mlatu-6
- OkGoDoIt 11mo agoWhen I was an undergrad at Georgia Tech, one of my intro computer science classes had us implement something in brainfuck. Turns out college kids are quite comfortable with swear words.
- josh-gree 11mo agoOf course they are ... It's college administration that are uncomfortable
- optimalsolver 11mo agoStupidStackLanguage is by far my favorite: https://esolangs.org/wiki/StupidStackLanguage https://esolangs.org/wiki/StupidStackLanguage
- Izkata 11mo agoPiet is mine - the programs are 2D images: https://esolangs.org/wiki/Piet https://esolangs.org/wiki/Piet Primarily because of the note on the "calculating pi" example program: > Richard Mitton supplies this amazing program which calculates an approximation of pi... literally by dividing a circular area by the radius twice. > Naturally, a more accurate value can be obtained by using a bigger program. https://www.dangermouse.net/esoteric/piet/samples.html https://www.dangermouse.net/esoteric/piet/samples.html
- somat 11mo agoOne of my favorite calculations of pi is to pick random coordinates in a unit square and count how many of them are in a circle. it's so stupid and so clever at the same time. This was recreated from memory. I think it is close but I may have a bounding bug. import random def pi(count): inside = 0 for i in range(count): test_x = random.random() test_y = random.random() if test_x ** 2 + test_y ** 2 < 1: inside += 1 return inside / count * 4 #above is a quarter circle print(pi(2 ** 30) )
- oneeyedpigeon 11mo agoI'm not sure about a bounding bug, but there's definitely an indent error on the return line (good old Python!)
- hanemile 11mo agoWith the metatopic of this thread being obscure languages, I had some fun squeezing this into some list comprehensions (maybe someone's got an idea of how to keep track of the state within the list): ``` $ cat << EOF > pi.py state = [0, 0, 2*8, 2*12]; _ = [print(f'\rRun {state.__setitem__(0, state[0] + 1) or state[0]}/{state[3]} | Last \u03c0: {current_pi:.6f} | *Average \u03c0: {(state.__setitem__(1, state[1] + current_pi) or state[1]) / state[0]:.6f}*', end='', flush=True) for current_pi in [(4 * sum([1 for _ in range(state[2]) if __import__("random").random()*2 + __import__("random").random()*2 < 1]) / state[2]) for _ in range(state[3])]]; print() EOF $ time python3 pi.py Run 4096/4096 | Last π: 3.140625 | *Average π: 3.143051* python3 pi.py 0.41s user 0.01s system 99% cpu 0.429 total ``` Play around with the `2*8` and `2*10` values in the state, they control the amount of rounds and the range in which the random values get generated respectively.
- d_silin 11mo agoDear Lord.
- willrshansen 11mo agoI remain utterly baffled how they made a lisp compiler with malbolge
- golem14 11mo agoOh my god, that list lacks DATAFlex!
- pdpi 11mo agoI have a weird love for Brainfuck. It's a tiny, incredibly simple language that you can write an interpreter for in an hour, it's effectively a super-simple byte code that can easily be extended and used as a compilation target for simple languages. Honestly, as an educational tool, the only thing wrong with it is the name!
- eru 11mo ago> I've written CGOL dozens of times, it's a common project that I do to "break in" a language I've learned, since it's not completely trivial but it's simple enough to not be frustrating, and I completely understand why math/computability-theory folks find it something to dedicate brain power to. Writing a naive CGOL is fun and quick. But writing a _fast_ one can get arbitrarily complicated. https://en.wikipedia.org/wiki/Hashlife https://en.wikipedia.org/wiki/Hashlife is one particular example of where you can go for a faster-than-naive CGOL.
- tombert 11mo agoYeah, a million years ago I did that one as a convolutions so I could run it on the GPU when I was learning OpenCL. That was my first exposure to “optimizing” CGOL.
- bandrami 11mo agoIn the music world there are people who will build whole symphonies out of one sample, one filter, and one delay patch.
- piltdownman 11mo ago"So did Achilles lose his friend in war, and Homer did no injustice to his grief by writing about it in dactylic hexameters" - Tobias Wolff, Old School