8 ms·
An introduction to LLVM in Go
- iagooar 11y agoThis little tutorial is so perfectly written. It makes no assumptions about what you know besides basic computer science and guides you through getting going with LLVM. I love it, makes it look so simple.
- jbfr 11y agoTotally agree, makes the subject extremely approachable versus a lot of technical alternatives that may be deterring to either newcomers, or just people from different backgrounds.
- obeattie 11y agoAgree completely, this is a really well-written and informative article. Even more impressive is when you scroll to the bottom and notice this was written by a "17 year old student from Brighton who programs for a hobby."
- ycmbntrthrwaway 11y agoI wish I had github when I was 17 year old, publishing all the codes you while learning to program is really great idea: https://github.com/0xbadb002 https://github.com/0xbadb002
- nulltype 11y agoWow this guy looks exactly like Jonathon Blow
- pori 11y agoAs a web developer, LLVM has always been a mystery to me. I have a basic understanding of computer science, but that has never been enough to parse through the documentation, written for those more used to lower level development. This is a wonderful article for absolute beginners, showing quite literally what LLVM does and how to use it.
- piroux 11y agoI had the same feeling about LLVM until a few weeks ago, when I started tinkering with it during a school project. It let me the time to implement a simple array which can be sliced and copied, through the functions I created : https://gist.github.com/piroux/a856aa31525ca23238be https://gist.github.com/piroux/a856aa31525ca23238be It can directly run with lli: $ lli basics_array.ll Note: I called it DynArray because I wanted it to grow itself when its nominal capacity would have been reached, but I never took the time to implement this feature ... For instance, the prototype of the function adding an element could be : define void @DynArrayI__add(%DynArrayI* %dynarray, i64 %elt) You might need to add a capacity field to the type of DynArrayI and update others functions, to take it into account. But according to me it is doable, even for a beginner, because the code is entirely written in LLVM. So feel free to try !
- jerf 11y agoRather than learning LLVM per se, I'd recommend running through any of the many fine "build a compiler" tutorials out there on the internet. A google search on "build a compiler" pulls up a lot of interesting resources. I would suggest sticking to a simple language, rather than trying to build a C compiler or something. The principles are what you really ought to learn, and those are the same. Even just writing a brainfuck interpreter is a good exercise if you don't know how to do it. (Despite the profane name and its implication that it ought to be something very complicated, brainfuck is actually very simple. Some people use "write a brainfuck interpreter" as their test project whenever they pick up a new language.) Compilers and interpreters are one of the things that make the difference between a "code monkey" and a "software engineer", and even in web development they can be incredibly useful.
- pori 11y agoYou are right. It isn't best to start with LLVM, the top tier. I've made the mistake of letting it stop me in the past. Writing a Brainfuck interpreter is a good idea! (I'm aware of the language.) Perhaps I could also try ArnoldC. :3 Recently, I began working with HHVM, I've been very interested in the subject of compilers and interpreters. I would certainly love to build such a thing for JS one day.
- giancarlostoro 11y agoThis makes me wonder if Haxe will ever have official LLVM support within it's own compiler, it already gets translated into numerous languages (Haxe technically is never compiled, but always translated as far as I'm aware), why not LLVM's own IR? I found a couple of projects attempting this, but it would be interesting to see it happen officially.
- josteink 11y ago> LLVM is an infrastructure for creating compilers. It was initially created by Chris Lattner in 2000, and released in 2003. Since then it has evolved into an umbrella project that has a wide array of tools such as the LLVM Linker lld,LLVM Debugger lldd, and so on. I'm pretty sure the author means lldb? I'm sure it's a good article and all that, but such a typo for a core tool in the beginning of an article kind of makes you lose confidence in the accuracy of what follows. The author might want to fix things up :)
- 0xbadb002 11y agoAh yeah I meant that, I don't usually make typos so I'm not sure how that happened :-)