Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.



I 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!


for those who think brainfuck is too pedestrian, have a browse through the esolang wiki:

https://esolangs.org/wiki/Language_list


StupidStackLanguage is by far my favorite:

https://esolangs.org/wiki/StupidStackLanguage


Piet is mine - the programs are 2D images: 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


One 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) )


With 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.


I'm not sure about a bounding bug, but there's definitely an indent error on the return line (good old Python!)



I 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.


You 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


When 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.


Of course they are ... It's college administration that are uncomfortable


How about Assembly?


Assembly 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.


SKI 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.)


SKI 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!


Unlambda solves that problem.

"What if we had the lambda calculus without the lambda forms?" asked no one.

http://www.madore.org/~david/programs/unlambda/


Oh my god, that list lacks DATAFlex!


Dear Lord.


I remain utterly baffled how they made a lisp compiler with malbolge


> 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 is one particular example of where you can go for a faster-than-naive CGOL.


Yeah, 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.


In the music world there are people who will build whole symphonies out of one sample, one filter, and one delay patch.


"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




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: