[HN Gopher] Obfuscated Tiny C Compiler
___________________________________________________________________
Obfuscated Tiny C Compiler
Author : ducktective
Score : 345 points
Date : 2021-02-15 10:04 UTC (12 hours ago)
(HTM) web link (bellard.org)
(TXT) w3m dump (bellard.org)
| sillysaurusx wrote:
| I absolutely adore TCC, fwiw. It's the base project that this one
| is derived from. Like all of bellard's work, this is legit and
| also extraordinarily high quality. At one point before I got
| bored I basically had a game engine that took C source code as
| scripting inputs. Totally stupid, and worked great thanks to
| this.
| kybernetikos wrote:
| Speaking of mad genius ideas, my mind was blown by
| https://bellard.org/tcc/tccboot.html a boot loader able to
| compile and boot a Linux kernel directly from source code.
| mark-r wrote:
| I love his JSLinux that allows you to boot Linux (or DOS or
| Windows!) in your browser. https://bellard.org/jslinux/
| iso8859-1 wrote:
| What do you think about chibicc in comparison? It supports C11.
|
| https://github.com/rui314/chibicc#chibicc-a-small-c-compiler
| sillysaurusx wrote:
| Neat! I haven't tried it, but it looks interesting. Thanks.
| jfk13 wrote:
| > [TCC is] the base project that this one is derived from
|
| The relationship is actually the other way around, at least
| according to this page:
|
| "NOTE: My other project TinyCC which is a fully featured ISOC99
| C compiler was written by starting from the source code of
| OTCC"
| sillysaurusx wrote:
| Oh! Thank you for the correction!
|
| I wasn't sure which was which, but TCC is so lovely. It's
| cool to hear some of its history.
| murkle wrote:
| WebAssembly backend would be cool
| http://nongnu.13855.n7.nabble.com/WebAssembly-backend-td2390...
| funkisjazz wrote:
| is it practical in any way?
| wolf550e wrote:
| Suppose you want to defeat a "Reflections on Trusting Trust"
| attack and bootstrap a toolchain source code you believe is
| clean to produce binaries that are clean. You need to compile
| llvm/clang (or gcc). You start with something small you can
| audit manually, use it to build binaries that can compile llvm,
| then use llvm to build itself to get an optimized compiler that
| doesn't have malicious code to recognize the password check
| inside the login binary and emit machine code that is not
| faithful to the source code.
| Drakim wrote:
| How do you know that your text editors aren't compiled to
| hide the payload when examining this compiler, thus
| perpetuating the hidenness?
| xmodem wrote:
| If you wanted to solve for that, you would have to build a
| computer like the monster6502 [1] to run the compiler on,
| and visually inspect the memory contents.
|
| 1: https://monster6502.com/
| MawKKe wrote:
| How do you know the person who designed that isn't in on
| it?
| archi42 wrote:
| The thing is pretty easy to verify.
|
| The ultimate question is: How far do you need to go until
| you believe that the earth is indeed not flat? Do you
| trust your teachers? Stand on a tall building? Take a
| balloon ride? A plane? A spaceship? Then still, at which
| point can you rule out that the earth just _appears_ to
| be a ball due to some yet-to-be-explained phenomenon
| (gravitational anomaly?) but is indeed flat? (The correct
| answer of course is "turtles all the way down").
| ducktective wrote:
| Interesting! Still, I believe this doesn't prevent
| malfunction resulting from a compromised silicon...Like a
| sequence of instruction executions or memory accesses
| resulting to sending over a packet via the network.
|
| I wonder how can one prevent that? Even an open-source ISA
| could not be fully trusted since one can't know what is
| implemented on the actual die on hand.
| archi42 wrote:
| tl;dr of a pamphlet I decided not to post: If you're
| [seriously] considering anything beyond "my firewall is
| strictly unable to report it", you're either building
| something like nuclear weapons or taking the first steps to
| sliding down the rabbit hole of paranoia, ending up in
| tinfoil-hat-wonderland ;-)
|
| The topic is interesting from an academic point of view.
| Maybe something along "On trustworthy, verifiable execution
| on untrusted, adversary hardware". Like homomorphic
| encryption, but I think having the user supply the input
| would make for a difficult programming+debugging cycle :P
|
| Anyway, the goal of this compiler here isn't to prevent ANY
| kind of attack. As the page says, it is "only" a tiny C
| compiler, and an obfuscated one at that. The "tiny" part
| makes it much easier to audit than say GCC or clang (and
| you don't need to audit GNU binutils, either - and I've
| seen that code, so trust me when I say: You don't want to
| go that route).
|
| //edit: Obviously I don't want to insult the fine folks
| investing their time into projects such as binutils, they
| deserve quite some praise - but as someone who is not
| familiar with the code base I found it to be very
| overwhelming.
| LeifCarrotson wrote:
| It's true that the silicon is hard to audit, but it's also
| pretty static, and there's a huge variety of pretty
| effective obfuscation that can live on top of the silicon.
| The
|
| You suggest that an adversary could use some compromised
| layer to send a packet over the network when something
| happens. For example, someone running `aesenclast xmm15,
| xmm10` could also secretly trigger a
| socket()/send()/close() syscall set that would transmit a
| packet over the network adapter. But what if the target
| code never calls the AES-NI instructions? A user could
| easily be using a library that processes the encryption in
| software; a simple ISA filter has an impossible task to
| determine which xor instructions are cryptographic and
| which are just ordinary compiler output. You could be
| running a virtual machine, in which you've loaded a browser
| Javascript engine, and using that Javascript engine to run
| a virtual machine (https://bellard.org/jslinux/), in which
| you're running a Python instance, which is finally
| performing the encryption.
|
| Sure, if all those layers were efficient, they'd just pass
| it down the stack to eventually call `aesenc`, but modern
| software is anything but efficient. Yes, if your deeply
| nested Python calls "sum = num1 + num2", the x86 `add`
| instruction likely gets invoked somewhere, but to predict
| when some client code is handling a secret key or when some
| user input is actually a password seems really difficult.
| mythz wrote:
| Yes, for winning IOCCC competitions! Which would normally be a
| great CV badge to demonstrate your skills to prospective
| employers, but likely of little consequence if you're Fabrice.
| jacquesm wrote:
| > Which would normally be a great CV badge to demonstrate
| your skills to prospective employers
|
| Not many employers would know of the IOCCC.
| regularfry wrote:
| If you have the sort of brain that makes winning IOCCC
| entries, it is highly probable that a candidate employer
| who has not heard of it is not, in fact, prospective.
| bidirectional wrote:
| Anyone interviewing an IOCCC winner probably has.
| f00zz wrote:
| can confirm
|
| source: won the IOCCC
| bregma wrote:
| > Not many employers would know of the IOCCC.
|
| Sure. But who wants to work flipping burgers, greeting
| shoppers, or doing web front-ends for the rest of their
| life?
| em500 wrote:
| It's probably of little consequence for his employment, but
| Bellard has won a few IOCCC prices:
| https://www.ioccc.org/winners.html#B
| scruffyherder wrote:
| At one point a variation of it could compile a Linux kernel
| (very fast too!) and boot from the same ISO. Of course GCC or
| LLVM produced better optimised code, but TCC, being so small
| runs so much faster.
| notorandit wrote:
| It isn't as it compiles a subset of c. Nonetheless it's a gem!
| cb321 wrote:
| Another practical application is using tinycc as a backend
| compiler for Nim [1]. I set up my nim.cfg to default to this
| for a rapid edit-compile-test cycle (usually under 250
| millisec), with a quick define switch to move to gcc-optimized
| code.
|
| Similar is likely possible for other prog.langs that emit C.
|
| One helpful feature for the full round-trip to an executable
| file is a built-in object file linker.
|
| Also, libtcc can be used as a library to "compile a string" and
| then run it which is the JIT application mentioned elsewhere in
| this thread.
|
| [1] https://nim-lang.org
| rsiqueira wrote:
| He also created QuickJS, that's javascript server side, like
| NodeJS but much faster to start programs. Just type "qjs your-
| script.js". I use it in my server because of its low overhead to
| start and run my microservices. https://bellard.org/quickjs/
| dingdingdang wrote:
| QuickJS Main Features:
|
| * Small and easily embeddable: just a few C files, no external
| dependency, 210 KiB of x86 code for a simple hello world
| program.
|
| * Fast interpreter with very low startup time: runs the 75000
| tests of the ECMAScript Test Suite in about 100 seconds on a
| single core of a desktop PC. The complete life cycle of a
| runtime instance completes in less than 300 microseconds.
|
| * Almost complete ES2020 support including modules,
| asynchronous generators and full Annex B support (legacy web
| compatibility).
|
| * Passes nearly 100% of the ECMAScript Test Suite tests when
| selecting the ES2020 features. A summary is available at
| Test262 Report.
|
| * Can compile Javascript sources to executables with no
| external dependency.
| codazoda wrote:
| I hadn't seen QuickJS before and it looks amazing. It's a
| small, fast implementation of JS _plus_ wrappers for the C
| standard library. That standard library includes output,
| reading and writing files, and a lot more. It 's both an
| interpreter _and_ a compiler. So you can build small console
| apps in JS.
| the_duke wrote:
| And qemu... and ffmpeg.
|
| The productivity of Bellard is truly admirable.
| fullstop wrote:
| He worked on ffmpeg under a pseudonym. He may very well be
| secretly involved in other projects.
| jsmith45 wrote:
| Worked on might be an understatement, given that he was the
| initial ffmpeg developer, and thus founded that project.
| astrange wrote:
| There have been many more ffmpeg developers since then. I
| think it was originally a mpeg1/2/4 codec only, which is
| something one person can do. Although hardly anyone has
| done it with acceptable performance like he did, usually
| they like to get abstract and object-oriented for no
| actual benefit.
| jtxx wrote:
| damn that's ballin, I didn't even know people did that with
| code
| mometsi wrote:
| And around a week ago, his text compressor topped the enwik9
| (Hutter Prize) benchmark. Not prize-eligible though-- that
| would require a single core, non-GPU build to run in <100h.
| His nncp 2.1 benchmark took 140h to run on a GTX 3090.
|
| https://bellard.org/nncp/
|
| http://www.mattmahoney.net/dc/text.html
| kizer wrote:
| Bellard is one of those 1%'ers.
| montroser wrote:
| I wonder if he's lonely, with not too many people in the
| world who can communicate, operate, execute at his level...
| carapace wrote:
| That reminds me, Edward Teller said "von Neumann would
| carry on a conversation with my 3-year-old son, and the
| two of them would talk as equals, and I sometimes
| wondered if he used the same principle when he talked to
| the rest of us."
| acmj wrote:
| Only 1%? At least one per million, if not per billion
| (depending on how you count the denominator).
| boogies wrote:
| ~0.00001%0
| kizer wrote:
| You're right. Let's say he's a 1%'er under a linear view
| of a logarithmic ranking of all programmers.
| twic wrote:
| He's not just 10x, he's 0x10x.
| masklinn wrote:
| jslinux as well, it's more of a cool demo than anything
| useful but the "cool" factor is super high. And led to
| tinyemu (which underlies the current jslinux implementation).
| The current version can run Windows NT inside QEMU inside
| JSLinux. In your browser.
| yudlejoza wrote:
| I'm happy for him.
|
| I also wonder his employer might be the nicest do-whatever-
| you-want-in-your-free-time employer on earth.
|
| Not only that, I wonder what kind of day-job roles he has
| since I assume there is significant cognitive load in his
| personal projects (we still think he's a human not a
| superhuman right?).
|
| For context, my last employer was "Oh you're doing something
| in your free time? let me utterly destroy you." (and they
| did).
| 1996 wrote:
| > For context, my last employer was "Oh you're doing
| something in your free time? let me utterly destroy you."
| (and they did).
|
| How could they? And what was their motivation for doing
| this?
|
| An employee doing something in their free time is a rare
| and valuable asset.
| yudlejoza wrote:
| Boy I got news for you.
|
| They also had a policy that everyone should spend at
| least 4 hours every week (outside of the 40 hour work-
| week) doing some personal project, or learning. The more
| the better. (it was a recommendation, not a requirement,
| and there was no monitoring).
|
| Well what I had in mind was a bit more ambitious than
| four hours. It did not infringe on their bottom-line (I
| wasn't using their tech or competing with my day-job; it
| was completely unrelated). But for me they were like "Oh,
| no, no ... we were just kidding. We really didn't mean
| that you should do something in your free time".
|
| The encouragement to do something in free-time is a lie!
| ... they know most of the engineers don't do that. But if
| someone actually does something, then the lie gets
| exposed.
|
| Try it yourself. Take them up on their offer and see what
| happens.
| soegaard wrote:
| No worries on that front: https://www.amarisoft.com/about-
| us/
| yudlejoza wrote:
| Founded in 2012. That's like yesterday. 80% of his stuff
| was done by then.
|
| edit: Even then, now he probably has the world's nicest
| co-founder instead. Who does cognitively demanding open
| source software projects made available for free online,
| while running a startup?
| mhd wrote:
| Do you run your microservices as CGIs or from inetd? Or why
| does the start overhead matter that much?
| bor100003 wrote:
| I always check the topics on Bellard here on HN, really
| insightful.
|
| Let's don't forget the obligatory: "Can he invert a binary tree
| on a whiteboard though?"
| bidirectional wrote:
| The funniest thing about the 'invert a binary tree' meme is
| that it genuinely is a simple, 5-liner problem that most
| programmers could solve in five minutes, it just sounds
| intimidating.
| chromanoid wrote:
| > Let's don't forget the obligatory: "Can he invert a binary
| tree on a whiteboard though?"
|
| Probably yes.
| dang wrote:
| If curious see also
|
| 2018 https://news.ycombinator.com/item?id=17335856
|
| 2011 (a bit): https://news.ycombinator.com/item?id=2722494
| mark-r wrote:
| I knew Bellard had written a very functional Tiny C compiler. I
| had no idea he wrote it more than once. My respect for him just
| continues to grow.
| vermilingua wrote:
| I thought I could follow at least some of the unobsfucated C, and
| then this monstrosity: t = "++#m--%am*@R<^1c/@%
| [_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!
| =\'g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
|
| Could someone please explain what is going on in that routine?
| coldtea wrote:
| Isn't it obvious? /s
| edflsafoiewq wrote:
| Based on the unobfuscated source, this is a lookup table of
| some kind for operators, encoded in a string.
| ++ -> tokl=11 tokc=0x1 -- -> tokl=11 tokc=0xff
| * -> tokl=1 tokc=0xc1af / -> tokl=1 tokc=0xf9f7
| % -> tokl=1 tokc=0xf9f7 + -> tokl=2 tokc=0xc801
| - -> tokl=2 tokc=0xd8f7 << -> tokl=3 tokc=0xe0d3
| >> -> tokl=3 tokc=0xf8d3 ... ! -> tokl=2
| tokc=0x4 * -> tokl=0 tokc=0x0
|
| For example *@R<^1c ^^ operator
| (padded with @ when one character) ^^^^ tokc
| (variable length) ^ tokl
| xashor wrote:
| It's part of the tokenizer. t contains data in the format of
| [char 0][char 1][base 64 encoded token id ...], whereas the id
| is as long as the entry is smaller than 'b'. So it's ('++',
| `#m`), ('--', `%am`), ('*@', 'R<^1c'), and so on. '@' is used
| as a wildcard. As you can see this part parses operators.
| archi42 wrote:
| First thought would be "opcodes", but on a closer look the
| operators in there seem to be relevant. Maybe this encodes
| their meaning/relevant opcode and precedence?
|
| From the website:
|
| ``` binary operators, by decreasing priority order: '*' '/'
| '%', '+' '-', '>>' '<<', '<' '<=' '>' '>=', '==' '!=', '&',
| '^', '|', '=', '&&', '||'. ```
|
| The unary operators ++ and -- have a higher precedence, so they
| come first. Then there are "*@R<^1c", "/@%[_[H3c", "%@%[_[H3c"
| (same as for '/', though), "+@.B#d" and so.
|
| I did not have time to read the source (my compile finished a
| minute ago), but maybe you can now figure out the rest? :)
|
| //edit: ha, edflsafoiewq and xashor we're a bit faster and more
| thorough. But nice to see we agree on the overall idea.
| eimrine wrote:
| I would like to look at the code after preprocessing, it is too
| hard to analyze the code with all those #define statements.
| jedisct1 wrote:
| Looks like a type definition in Rust.
| scoutt wrote:
| If it doesn't end with _.unwrap()_ then it isn 't Rust.
| neilalexander wrote:
| This made me smile :-)
| bombcar wrote:
| T is being assigned a string value that looks like line noise.
| I assume it's Perl.
| hu3 wrote:
| Haha. Thanks I needed that Monday morning laugh.
| caf wrote:
| It's looking for operators. That string encodes the operator to
| look for, and the values of tokl and tokc that will be used if
| that operator is found.
|
| The first entry looks for "++", and if found sets tokc to 1
| ('#' - 'b' + 64) and tokl to 11 ('m' - 'b').
|
| The second entry looks for "--" and if found sets tokc to 255
| and tokl to 11.
|
| The third entry looks for "*" and if found sets tokc to
| 12693263 and tokl to 1. (12693263 is 0xc1af0f, which is an x86
| IMUL instruction).
| ducktective wrote:
| I wonder does Fabrice hang-out on HN, Reddit or some chat
| channels?
|
| I very much like to know his views on topics like Rust, RISC-V,
| Blockchain etc... I'm curious about his workflow, dev. machine,
| preferred distros, editors and the like :D
|
| An AMA or a technical interview done by someone knowledgeable in
| the field would be awesome!
| smlckz wrote:
| He has his own emacs clone named QEmacs[1] which I think he
| uses personally. He uses Subversion as his version control
| system (at least in developing QuickJS) according to this
| post[2] by him in quickjs-devel mailing list.
|
| [1]: https://bellard.org/qemacs/
|
| [2]: https://www.freelists.org/post/quickjs-devel/Please-
| consider...
| ducktective wrote:
| Thanks! Good to know! I knew about his Emacs clone...I think
| Linus Torvalds uses something similar.
| mhd wrote:
| Linus has his own port of the venerable MicroEmacs[1]. As
| does Walter Bright[2], by the way.
|
| qemacs is actually quite advanced, and even includes a
| basic HTML renderer (for the help). I was half joking that
| with quickjs, one now can make a reasonably modern web
| browser out of bellard-ware...
|
| [1]: https://github.com/torvalds/uemacs
|
| [2]: https://github.com/DigitalMars/med
| zserge wrote:
| Many years, and still impressing. I wonder if similar projects
| exist for other languages (preferably, without a use of `eval()`
| and friends).
| kmm wrote:
| I'm sorry if this is a stupid question, but why wouldn't the non-
| obfuscated versions be able to compile themselves?
| xmodem wrote:
| Without having looked at the code I'm guessing he used
| unimplemented language features in the non-obfuscated version,
| then re-wrote to avoid using them in the obfuscated version.
| GuB-42 wrote:
| TCC, the actually useful and non-obfuscated version can compile
| itself of course.
|
| https://bellard.org/tcc/
|
| But the fact a C compiler can compile itself is not very
| impressive. Making it fit into 2048 bytes of obfuscated code
| is.
| jaywalk wrote:
| It's literally explained in the first line on the page, where
| he says he wrote it "in order to win the International
| Obfuscated C Code Contest (IOCCC) in 2002."
|
| So it's not that it wouldn't work, but it obviously wouldn't
| have worked for that contest.
| smlckz wrote:
| bellard is a programming genius and _true_ C hacker. his works
| are so great but how humble is his website! why doesn 't he write
| blog posts? why he has so little online presence? hmm. let us
| wish him a long and productive life.
| mindhash wrote:
| Found this article that seems to talk more about him than his
| own website.
|
| https://smartbear.com/blog/fabrice-bellard-portrait-of-a-sup...
|
| "Bellard doesn't appear to promote himself--he politely
| declined to be interviewed for this profile"
| DC1350 wrote:
| Self promotion is an entirely separate hobby from programming.
| Most people don't blog about their hobbies.
| jhoechtl wrote:
| He is concentrating on being creative = create = work.
|
| Valley startup hipster culture doesn't get this.
| yuribro wrote:
| >> why doesn't he write blog posts? why he has so little online
| presence?
|
| >> bellard is a programming genius and true C hacker. his works
| are so great ...
|
| It's probably related. Obviously it's his and only his
| decision, but I wonder if him slowing down to share the
| knowledge and skills could have been more productive in the
| sense that others could do similar work.
| cvlamp wrote:
| I wonder if we could regain the level of intellectual
| maturity of the 19th and 20th century and not criticize those
| who already give away so much that they are not working hard
| enough.
|
| This is literally Animal Farm / team lead "multiplier"
| nonsense.
|
| And like in Animal Farm, the pigs profit.
| kybernetikos wrote:
| Bellard is famous for starting a number of projects that have
| since been carried on by others.
|
| Looking at his output some time ago, one of the main things
| that I found inspiring was how much good he did by sharing
| his work in a form that others could build on it.
|
| Complaining that he's done insufficient to bring others on
| seems really unfair.
| tccfan wrote:
| He shares the demystified code here:
|
| https://bellard.org/otcc/otccn.c the TCC documentation sheds
| further light: https://bellard.org/tcc/tcc-doc.html#devel
| varispeed wrote:
| For some reason the thought that I will never be as productive as
| himself brings me peace. Huge respect. I remember looking at his
| entry in 2002 like it was yesterday, that was a pleasurable mind
| fk.
| anta40 wrote:
| I wonder if someone already modified this so it also runs on
| Windows & Mac.
|
| Hmm....
| kizer wrote:
| I wonder if TCC could be used in a JIT.
| zserge wrote:
| I did in my music/generative art app, where I compiled math
| expressions into native code using TCC as a backend. Actually,
| it was _so_ much easier than dynasm and other JIT libraries,
| and so little code, and yet, it was a great performance boost
| already.
| my123 wrote:
| Yes, it's an officially supported use case.
| newswasboring wrote:
| If I recall correctly the maximum binary data you can fit in the
| largest QR code is 2,953 bytes. This C compiler can fit on a qr
| code.
| kibwen wrote:
| True, although "the largest QR code" is substantially more
| dense than most people have ever encountered:
| https://en.m.wikipedia.org/wiki/File:Qr-code-ver-40.svg .
| People might not realize that QR codes scale up and down very
| gracefully; most QR codes that people have ever seen probably
| encode less than 80 bits.
| gregsadetsky wrote:
| Reminds me of a project a friend and I took part in, sending
| each other source code via postal mail. I ended up sending a
| QR code printed on film negative [0] to pack about 1k of
| bytes. Bellard's code is way more "information-dense" of
| course..! :-)
|
| [0] https://greg.technology/img/postal-codes.jpg
|
| Edit: incredibly, pointing the iPhone camera app at the low-
| ish resolution photo of the QR code above works -- the QR
| code does decode. That's crazy.
| orthoxerox wrote:
| This reminded me of Richard Feynman and his first wife
| driving military censors bonkers by sending each other
| puzzles.
| gregsadetsky wrote:
| That's an incredibly kind comparison. Thank you! Do you
| have a reference where Feynman talks about this? I'm
| finding this [0]:
|
| "Arline entered the nearby Albuquerque sanatorium, from
| where she wrote him letters in code -- for the sheer fun
| of it, because she knew how he cherished puzzles, but the
| correspondence alarmed the military censors at the
| laboratory's Intelligence Office. Tasked with abating any
| breaches to the secrecy of the operation, they cautioned
| Feynman that coded messages were against the rules and
| demanded that his wife include a key in each letter to
| help them decipher it. This only amplified Arline's sense
| of fun -- she began cutting holes into her letters,
| covering passages with ink, and even mail-ordered a
| jigsaw puzzle kit with which to cut up the pages and
| completely confound the agents."
|
| [0] https://www.brainpickings.org/2017/10/17/richard-
| feynman-arl...
| igravious wrote:
| Hiya, how did you print these on negative film?
| mirekrusin wrote:
| You drill a hole in lead plate, take uranium rock,
| rasberry pi and...
| gregsadetsky wrote:
| In Montreal, the really really great people at Borealis
| [0] made it extremely easy. I sent them a 300 DPI file by
| email, and they printed negatives from those files in a
| few days. Each negative cost about $8 to print.
|
| Finding a lab that did this online was pretty difficult
| at the time. If others have recommendations -- please
| chime in! Otherwise, I would strongly recommend
| considering Borealis (who I'm sure can ship the negatives
| by mail -- otherwise reach out and I can facilitate the
| mailing as I live here ha)
|
| [0] http://www2.borealislab.qc.ca/borealis/en-home
| guerrilla wrote:
| Why were you doing this?
| gregsadetsky wrote:
| It was an art project -- called "Postal Codes" -- where
| an artist friend and I would correspond by creating
| sketches (typically using p5.js or three.js) and sending
| them by "snail" mail. There is a bit more information
| here [0], here [1] and here [2].
|
| [0] https://www.instagram.com/p/B9MhMzKHVxJ/
|
| [1] https://www.instagram.com/p/B7wL7MKly3k/ (description
| in Spanish and then English)
|
| [2] https://github.com/gregsadetsky/postal-codes (project
| description, "rules", and source code)
| freakynit wrote:
| Fabrice is a genius... how he manages to build all such stuff he
| builds?
| jacquesm wrote:
| Lack of distractions, doesn't care about fashion, intimate
| familiarity with tools and deep mathematical insight combined
| with hardcore coding skills.
| stephen82 wrote:
| To be personally Fabrice Bellard is the Leonardo da Vinci of
| technology with specialization in C.
|
| This guy knows how to push the language's limits and he is the
| main reason I switched back to C for good.
| lnyan wrote:
| Past discussion: 2018
| https://news.ycombinator.com/item?id=17335856
|
| ------
|
| Tiny C Compiler is also a great project:
|
| https://bellard.org/tcc/
|
| https://news.ycombinator.com/item?id=23617461
| whitten wrote:
| Is the an annotated unobfuscated version ?
| ghaberek wrote:
| It started as that but it's since turned into completely
| usable C compiler that supports 32-bit and 64-bit x86 and ARM
| platforms. There are still developers adding to the project
| every day.
|
| https://repo.or.cz/w/tinycc.git
|
| https://lists.nongnu.org/archive/html/tinycc-devel/
| api wrote:
| I really like this kind of minimal programming. If you like this
| check out /r/tinycode
| knuthsat wrote:
| When I look at Knuth code snippets in CWEB I get the same
| vibes. He has a full implementation of garbage collecting zero
| suppressed binary decision diagrams that he used to count
| various stuff and it's insanely elegant and minimal.
| api wrote:
| The way I approach programming in general is to put a ton of
| thought in up front about how to do the least amount of work
| possible. Is there a very simple elegant way to do this? Can
| I collapse it down even more? Could I do it in just one or a
| few source code files of reasonable size?
| ar7hur wrote:
| Fabrice Bellard should receive a Turing award. Who agrees?
| enriquto wrote:
| I don't see the point. But Turing would have received the
| Bellard award, in a saner timeline.
| sn41 wrote:
| Also, in a saner timeline, Turing might have well received
| the Fields medal.
|
| His contributions to probability theory, and morphogenesis
| are amazing in addition to being the father of computer
| science, and codebreaker. All of the work was done before he
| was 40.
|
| [1] https://www.jstor.org/stable/2974762?seq=1#metadata_info_
| tab...
| varispeed wrote:
| Maybe the big unicorns who surely got hefty profits off of
| his work should pool together a billion dollar reward for
| him.
___________________________________________________________________
(page generated 2021-02-15 23:00 UTC)