she / they / most neopronouns

@underscores@kolektiva.social

Avatar is a bobtail squid photo from Rickard Zerpe (CC-BY 2.0)

wiki-user: underscores

  • 0 Posts
  • 21 Comments
Joined 1 year ago
cake
Cake day: June 11th, 2023

help-circle





  • It makes sense that if you’re designing a language, you’d like the language you made and would want to use it. It’s fine for compilers like that to exist, and even be the main one used, but ideally it shouldn’t be the only compiler.

    But there are technically ways to bootstrap a language without writing it in another language (other than a small core in assembly or something). You could design a tiny compiler that only handles a small subset of your language, then write a better compiler using only the features available in that subset. You can do this for several layers of compilers until you have the full language.


  • That’s already how it is now, we just don’t usually think of it that way. You can’t compile rust unless you already have a rust compiler. The current version was compiled in a previous version, which was compiled in a previous version, going through a chain of older versions and other languages. Anything along that chain could’ve theoretically had an influence on the current compiler.

    It’s not about the code itself being more trustworthy. The point is that when you bootstrap, you don’t have to blindly trust any of the binaries, since it’s source code the whole way down. Someone could bootstrap rustc like this, compare it to the binaries that already exist, and ideally they would be identical.




  • You can technically do it, but it’s a convoluted path. The article talks about it. Basically to bootstrap that way you need to go through a lot of versions of rust, compile rust 0.7 in ocaml, compile ocaml in scheme, and compile scheme in C using gcc. For gcc you need to compile a chain of versions back to when it was written in C instead of C++, plus the whole TinyCC bootstrapping path.

    edit: had listed scala instead of ocaml


  • The main thing is that TinyCC has already been bootstrapped.

    Check out this page on bootstrappable.org. Basically they start with a 200 something byte binary (hex0) that can act as an assembler, then using a bunch of layers of tools and compilers you can bootstrap a whole system. I think they use stage0 to build M2-Planet, use that to build GNU Mes, and use that to build TinyCC.

    So a project like this fits neatly into that bootstrapping path. It could be done other ways, but starting from a fairly complete C compiler makes it a lot easier than building an entire path from scratch.






  • There’s Anki which is one of the most popular flashcard apps. Kiwix is pretty great for having tons of offline content from websites like Wikipedia, StackExchange, and Khan Academy, but I’ve run into a few bugs with it. I believe the current version isn’t on F-Droid but they plan to remove the non-free build tools in the next version. There’s the translation dictionary QuickDic. There’s some language specific apps like Der Die Das and Starke Verben for learning German, Kakugo, Fun with Kanji, and Kanji Dojo for Japanese. There’s several language specific dictionaries like Nani?, Nheengaré and a PReVo. For learning numbers/time there’s the Nanji clock widget that can show the printed time in several languages.


  • It depends. Many addons have effects that can be tested for and fingerprinted, but it’s not always straight forward. There’s a way to detect any specific chrome extension, but doesn’t work on firefox because it uses unique extension ids per person.

    With addons like CanvasBlocker, they generate random values for a bunch of apis like canvas. So each time you will look unique, but it changes every time so you’re not easily tracked. I’d assume it’s similar to what Brave does, but I haven’t looked into the details. Some stuff isn’t randomized by default, so they can get info like timezone and languages, but probably not enough to give you a unique identity.