It's an interesting starting point because in one sense there's a product driving development and the features needed to make that product are in the language.
I've used Odin for a week or two, and Go for many years. So far, it does feel like a mix of Go and maybe something like Zig (with regards to allocators being passed into functions.) A lot of Odin's standard library also seems similar in package structure to Go, which has made it easier for me to find things.
You are such an amazing interviewer. Like for real. You know exactly how to shine the spotlight on the guest, you bring the conversation in really interesting directions, you know what you're talking about and you're insightful. Really impressed with your host skills, they really make the show. The topics and guests are also very well chosen as well. Please keep going!
Odin is amazing and does so many things right! Odin addresses almost all my grievances with C that have popped up over years of making game engines in C. Also, over the years I've come to love ideas like custom allocators and zero-is-initialized, which Odin has taken to heart both in the design of the language and the standard library. I've been using it for roughly two years and within a few weeks I will release my own commercial game written in Odin!
@@beloaded3736 Thank you. Game name is CAT & ONION. I'll post on this youtube account and on twitter when it's out. Steam page coming soonish. It'll be released on itch before Steam!
Why would anyone develop a game engine in C, the only reasons to use C is if you don't have a C++ compiler available for the platform or you work with legacy code.
I have been using Odin as my daily driver for about a year and a half now. At first, I too complained about not having methods, namespaces and a few other "minor" oopy concepts i was used to. And now having spent time with it, i am **so** happy they do not exist. Bill designed a language around psychology of the users, with the tag line of Joy in Programming, and its true. I **love** working in Odin.
Yeah, I feel like the pitfall of a lot of languages is that they try to include everything, and stray away from their initial concept. For example, Rusts big (maybe biggest) sell is safety, but people often complain about the borrow checker, but if Rust made workarounds easier, it would destroy the point of the language. You should invent a language with a philosophy, python has issues with type checking, and speed, but it has really simple syntax that works well as an interface for libraries. If Python made itself a low level language with strict syntax, they would lose their purpose. There’s a billion general use languages that are all practically the same, when designing a language, it’s good to have a mindset like him and think what the language needs to achieve its purpose. It’s trying to be C v2, so making the same mistakes C++ made would be stupid and silly
I find Odin very ergonomic, well principled, powerful, and fun to use. And actually quite beautiful, too. Also, Ginger Bill's responsiveness is refreshing -- he responds to questions regularly, usually within minutes. If possible, I'd switch to Odin in my day job in a heartbeat.
Now I'd love to see an interview with Jonathan Blow about the language he is developing (jai, working title), I think he'd be open to it. Whilst syntactically similar to Odin, it has very different opinions about aspects like metaprogramming and macros. Jonathan himself doesn't shy away from voicing his opinion, to the point where he's become a somewhat controversial figure in the programming sphere. He has some good takes, some honestly quite bad, but he sticks by them and it seems to be working out for him. Given all that, the interview is bound to be interesting at the very least, and I'd love to see how it compares to this one.
Odin is hands down my favorite language. It's the only language that feels like a genuine attempt at making a tool for people who deeply care about crafting software.
@@ITSecNEO Rust is a language that is built about implementing constraints for programmers in order to get extra guarrantees about a program. Zig is a tool for making C++ less bad, it's their entire user story... No they're not.
@@GingerGames No, really, thank you! First language and way of thinking that clicked with me in a long time. Zig is in the same ball park but something about Odin just makes it more fun. May be the syntax or just the fact we have actual strings in the core lib instead of []u8 :p, or maybe just the fact that it's so focused on game dev...can't choose :D . Btw #soa, best thing ever
Between using Odin, and watching GingerBill's streams, or listening to his interviews; has been the greatest leap in CS knowledge I've had in the past three years. Thank you @GingerGames
Wow, this channel is a treasure trove for any programming language enthusiast! Do you have any plans to interview Nim creator, Andreas Rumpf? Right now is the perfect time as he recently published second edition of his book "Mastering Nim"; Nim hit 2.0 last year and there are number of really cool features coming/returning to Nim in near future: new sum types, Nim's very own IR, IC support, etc. More Nim Topics I would love to see discussed: move semantics 'borrowed' from Rust, new ARC/ORC memory management, Safety without much restrictions
What a wonderful interview, so refreshing to hear someone that clearly understands language design and current hardware. Thank you so much Kris and Bill. Looking forward to pause my coding Go for a bit and give Odin a go.
I'm currently learning Odin, and it seems like every time I delve into a topic, I'm always amazed at how cleverly things are done in Odin. The more I use Odin, the more I agree with his maxim "Odin is the alternative to C for the joy of programming". I invit any coder to test it for a few weeks. It's an amazing language for coding.
At the moment, I'm seeing Odin and Zig as aiming at simillar places... It'd be fascinating to hear you do a three-way with Andrew Kelley and Ginger Bill.
Excellent episode...great questions Chris, you are a great interviewer and ask interesting questions, let your guest answer, and then a thoughtful follow up or two. The language is very interesting and looks tailor made for game and graphics applications based on some of the neat features and libraries discussed.
The best c like language out there.. The only downside, there is not a lot of marketting around it.. This language should become more famous/hype compared to other c like languages out there.. It is so much fun to work with.. Memory management is far cleaner from c like languages out there.. Try using it, its totally fun to use
I absolutely love your channel! Thanks for all the great content! Reading through the docs and Odin seems to share a lot of syntax with Go, which I personally really like.
I had never really thought deeply about how data structures implicitly encode a particular algorithm. One part of me wants to point out that a generic tree could encode either DFS or BFS and there's no way to know based on the tree structure alone whoch one it encodes. But that dpesnt change the fact that there is at least one algorithm implicitly encoded in the tree.
You're a great interviewer. It would be very cool to get Jonathan Blow on to talk about his Jai-lang, which is also C-like but has a lot of powerful features. Besides exposing low-level stuff when needed, I really like its metaprogramming, its extremely powerful "context" passed onto every function, its focus on development iteration speed and being minimalist. But it's still closed beta, and I think Jon likes to not talk too much about it before he feels its more mature (which he sometimes said is when he's done with his new game written in it). He can be very grumpy on a tangent, but with preparation and a good day, I think you could get some very interesting insights out of him. I'd love to see _you_ try. Thanks for sharing these.
Tsoding does this neat technique with a function that does it in C that contains a goto defer and then you put a defer label underneath in the scope. Go defer is still way more preferred but it's nice to have a convention and some ergonomics in C.
ginger bill is doing amazing work with odin and its a delightful langauage for the games and graphics domain imo. But, I would like to point out that C is not dead and is being actively developed. For example, we use defer in c 21 that are implemented with the macros. It would be awesome if chris broguth someone Dawid and Jens who are pioneering the modern c.
Many years ago I worked for a Canadian company called Geac. It had its own languages (and operating system) with several interesting features. The lowest-level language was ZOPL, which was derived from BCPL. It had no data types at all. When you declared variables, there were two areas of memory available - you could use DCL which started at the top of memory (location 0) and BDCL which started at another specific location (can't remember why, now). You would declare something like: DCL Fred(20) This would give you a named area of memory, 20 bytes long, and if this was your first declaration then it would start at location 0. If you followed this with DCL Alice(10) then Alice would start at location 20, and occupy 10 bytes. And so on. You could then use offsets - so ^$Fred+10 = 4 (^ means contents of, and $ means address) would make the byte at location at address 10 become 4. And if you said ^$Fred+25 = 2, then the byte at memory location 25 would become 2 - which is actually the same location as Alice + 5 It had other features. All parameters in subroutines/functions were effectively passed as addresses, not as variables. So if you had a routine with a single variable DoSomething(Var), and called it with DoSomething(Fred), then actually what you were passing was the address of Fred (which is 0 in memory). Inside the procedure's definition, you would use the ^$ construct to use or make changes to the variable passed in. This, of course, has many problems. One is that all variables are global. And another is that it was very easy to pass a variable to a procedure and then tromp all over any other variable you wanted to. You needed a lot of discipline. But it also had many advantages. It was nice to hear a shout-out fr Wirth. The second (or third or fourth, can't remember) language I used was Modula. That was (a the time - 1980) a lovely language to use.
I am interested in exploring Odin and am impressed with how far it's come. I have created a few domain-specific programming languages, but I've never attempted to design and implement a compiler for a general purpose programming language. Unfortunately, from looking at the website, I won't be able to experiment with Odin in the sort of programming I do. It's not available for any of the architectures that I commonly program on. I do a lot of low-level embedded engineering and programming, so I need languages that work with compiler suites that are able to produce code for common embedded microcontrollers and other microprocessors used in this domain such as PowerPC (32 and 64 bit), Cortex-M (32 and 64 bit), Cortex-R (32 bit), MicroBlaze (32 bit). I also do a lot of bare-metal (unhosted) programming, either single-threaded or using a small multithreading executive (not a full RTOS). A few nits: C is not from the 1950's, it's really late 1960s through the 1970s. It really didn't hit its stride until the K&R compiler for Unix 7th edition. Fortran and Cobol have their origins in the 1950s. C passes arrays by reference because a raw array identifier is treated as a pointer to the first element of the array.
We'd be interested in seeing if we can support a freestanding PowerPC platforms for Odin most definitely! Maybe some forms of Cortex-M (but it's too varied to be actually useful as a single generic target). As for MicroBlaze, you're probably the first person I've met in a long time to even use it still. Supporting these new platforms does take a bit work (LLVM isn't just magic, unfortunately) to get working, but we are not against supporting those platforms. We have just been focusing on the main application-oriented platforms (AMD64, ARM64, and now wasm), but that doesn't mean we cannot support other platforms.
This got me reading the Odin's Doc. Fascinating language with some great features, like how it handle structs of array or the using keyword. A lil bummed about the lack of automagic C interop like Zig has. I will have to try it out that's for sure.
Thank you for watching the video. With regards to the "automagic C interop", this sounds cool until you realize this is actually pretty much NEVER what you want. In all of the cases you look at what Zig does, the libraries just wrap the automagically imported C calls, which is effectively the same amount of work as just writing the bindings manually, defeating the entire purpose of the automagical stuff. There is also the other issue that people use the C-preprocess as if it was the same language as C. They define constants and many wrapper functions and more, with the preprocessor, which will be missed by the "automagical" stuff. We are currently working on making an official automatic bindings generator, and because of Odin's amazing `foreign` system stuff, things can have little to no wrappers whatsoever, and still be extremely useful. Odin has tried its best to make binding with foreign code very pleasurable, whilst not requiring wrappers. See things like the attributes `link_prefix` or even `b32` types (for booleans which are not 1-byte) or `u32le` types (endian specific types) or multi-pointers `[^]T`. With a bindings generator, you'll have a lot more control about how you can interface with foreign (e.g. C) code.
Another excellent conversation, thanks! Odin quickly became one of the most joyous languages to write for me. Odin and Elixir *chefs kiss*. Perhaps a conversation with José Valim could be on the cards🤞
Thank you for the amazing talk. I really like the aproach Odin is going for and I started following a small tutorial series on making a game with it. The teaser for a video on Verse is exciting to hear. Can't wait for it.
Already interested in the language at 20:48. After reviewing the overview of the language, having some golang experience already, I really feel being at home. The syntax is very similar, but the language is highly performant? I'll surely dive deeper ! Thanks Bill ! And thank **you** Kris for this amazing discussion !!!
It will generally beat out Go in performance, but not quite at the level of C, C++, Zig, etc in regards to its potential "raw power". It is probably most relatable to Rust in regards to potential performance. Obviously all of these languages being listed are "fast", so its in the ballpark, and the differences are moot unless you are developing for some AAA game title that is aiming to eek out the absolute most possible out of the hardware.
I am making a compiled programming language myself! It is meant to be a serious replacement for Rust. Rust is amazing, but it has a bunch of huge flaws... the biggest being it relies on the internet to compile most things...
Thank you, enjoyed the talk a lot. Does using LLVM mean that essentially it's not Odin's compiler support all the mentioned platforms but just LLVM supports them? What's Odin's compiler's part in it?
Working on a language in an environment where it's in heavy production use seems to me a wonderful thing. Assuming, of course, the language is adequately stable at the start. A feedback loop for the actual logic of the language: marvelous.
0:14:47 that "type" always horrified me... can't use it to store hash outputs since 0 is a legal octet; can't use it to store user-input UTF-8 or ASCII strings since U+0000 is technically a character...
The biggest thing wrong with C (and C++) IMO is that it is a multi-pass compiler + linker that requires header files to tie everything together. The reasons it's that way are unimportant in today's computing landscape, so simply removing the need for header files IMO would be the single largest improvement to the C family. Odin looks interesting, and appears to abolish the need for herader files which is great. However, I think it would gain much more traction if it stopped there and preserved most of the C syntax, which is very deeply embedded (pardon the pun).
While it gets compared to C quite a bit, it is far closer to Go than C, especially regarding syntax. I almost think of it as more complex version of Go, but using LLVM under the hood. I really like Odin, it is downright fun to code with, but IMHO it is not even close to being a "C/C++ replacement", I honestly don't even understand why they are so often compared to one another. It has some great strengths that make it stand out, even among other emerging lower-level languages like Zig, Rust, etc. and I feel it would be better off to not try and brand itself as a "C replacement" and lean harder into its strengths and the fields it excels in.
The fact that defer is SCOPE exit and not function exit... Amazing. Go needs a scope defer. So many times I find myself in a look wishing the defer would run at the end of the loop/scope, not the end of the function
Just picked up Zig. I’ve been coding in Go for about 8 years professionally. Odin has a ton of similarities to Go honestly. There is a lot I like about Zig though. My only concern is funding for these sort of languages. I feel languages never take off without backing from a major player like Google or Microsoft
From what I've seen odin only has for loops which function as both for and while loops depending on how you write them - cool - but can it do do- while loops?
Always a pleasure to listen to Bill talk about Odin and computing in general. Great interview! Verse is a new language that Simon Peyton Jones (and others) are working on at Epic. Very interesting to see where it goes. He has a great talk up called “Beyond Functional Programming. A taste of verse” if you’re interested. m.ua-cam.com/video/OJv8rFap0Nw/v-deo.html
Sorry to butt in here but as an old guy, as soon as you said "Programming Done Right", I'm shouting for Perl. Never yet played with yer Odin, but have done about two dozen others over the years. For me, for non machine-language use-cases, it would easily be Perl, all day long :)
The way he describes how the types will be chosen on use sounds like type inference. If it is, I suspect some people will dislike it because they like specifying type. Maybe it is not the way I think it sounds.
OK, so this is a language designed by game engine developers for game engine developers, certanly not a ‘systems programming language’ and the language and the design choices reflect that. I mean, talking about CPU-up design to languages, for a ‘systems programming’ language, there is no mention of the thing between the CPU and your game, the operating system ( the motive that we call C a ‘systems’ programming language is because it is used to write operating systems) Who gives a 💩 in a systems programming language about opengl, metal or whatever …? Database engines, device drivers, network stacks, high performance network applications etc are examples of what most people consider ‘systems programming’ , not 3d games …
It's not clear either of these languages will survive. People have been trying (unsuccessfully) to kill C and C++ for decades, and there has been a large number of new systems programming languages lately. Hare, Jai, Vale, Hylo, Austral to name a few. How many do we need and why would you pick one over the others?
@@Kuraitou So? Doesn't mean we should stop trying. C is a relic and while C++ has its nice parts, it's a pretty poor language from an objective perspective. It barley has any cohesive design and copied over all of C's pain points verbatim. I think Jonathan Blow put it quite well (and I don't usually find myself agreeing much with the guy). Roughly paraphrased "We aren't going to be programming in C or C++ for ever. The question isn't *if* another language is going to replace it, but *when*." And even leaving that besides the point, why do can't we have multiple low level systems programming languages? Rust, Zig, Odin, Jai, V, Hare... They can comfortably coexist. If Odin proves itself suitable for graphics, simulations and game programming, then why not adopt it for those tasks? Take a look at other domains. Backend development is a mix of C#, Java, Go, unfortunately a lot of JavaScript. High frequency trading sees a lot of languages in play, so does data science and virtually any other software domain. You'd be laughed out of the room, if you suggested any of those domains needs to settle for "one true language" or that we should stop trying to innovate within them, or that you don't need anything besides good old Java. Truth is, Systems programming has simply been under-served for a long time. I'd wager that's mostly down to how hard it was to write a good compiler and there not being major incentives for the M$, Googles and Oracles of the world to do so (hard to sell a platform for a language that doesn't need a platform), but LLVM, for all its shortcomings, has really changed the game here. Too some end, I think we are seeing a cambrian explosion in terms of low-level systems programming languages. Surely not all will find mass adoption and maybe not all of them will survive long term, but many will find their niches. Maybe that's why C/C++ folks get so defensive over the whole issue. They aren't used to having competition.
Odin is domain focused language while Zig is more general purposes. I don't see the competition. Zig tries to interop and actually replace C. Odin is just another specialized systems language.
@@Kuraitou have they tho ? I hear this all the time that people have been trying to replace C for decades but failed like it was impossible ? All those languages who ""tried"" to replace C where failing from the start. For example Jave could never be a C replacement yet in the early days it was advertised as such, On the other hand nowadays we have in my opinion real contenders, Zig for examples actually feels like a C replacement, as a C developer, Zig makes me feel at home, it's imperative, there is no inheritance, it's lower level than C. Everything feels better in Zig than in C, the type system feels better, the std is light years more useful, the semantic feels more cohesive, the error handling is better, testing code as never been easier, building it too, allocators as first class citizen is awesome, I could go on but all those things considered makes me feel like Zig could be an actual replacement to C, same with Rust, It feels a lot like Cpp, I hate Cpp, but Rust makes it more fun, it's still way too convoluted for my taste but It's a fantastic C++ replacement. So I think the argument of many have tried and they all failed isn't relevant anymore, because now that programming as a whole as evolved people have grown tired of C, myself included, it's a great language but the developer experience is really terrible and outdated, I see that everyday around me the programmers I work with all hate C in one way or another, and none of them use C in their spare time to build toy project, they all use Rust, Zig, Odin, Nim, OCaml and whatnot. I think the question is not about whether any of these languages will replace C, it's more of a when ? because it's pretty obvious that nobody in the industry wants a decade more of C, let alone another 50 years of it.
I'm getting a healthy whiff of (Yorkshire?) pragmatism over purity, an engineer knowing perfectly well the theory, before carefully discarding the right bits to get the job done. Unlikely to be taught in the halls of academe... But hey, they didn't build the railways.
@DeveloperVoices I have that book. The Pascal version. Bought a hard cover copy 30 years ago. The book just appealed to me for some reason. It was also the textbook for an introduction to a computer programming course at my university.
0:27:25 i.e. you're better off doing a library call or otherwise sending your array off to a whatever quantum operation provider at this time, if you actually had a need for it?
How is Odin’s defer statement different conceptually from C++ RAII …? Or are we going the Rust route and pretend C++ does not exist and take a p**** on C …?
You might be interested in Hare. Drew DeVault's writing that as a C replacement, and he's writing an OS too, to answer exactly your point. ua-cam.com/video/42y2Q9io3Xs/v-deo.html
BTW, choosing custom operators is _not_ optimizing for typing. It's an expression of a much deeper, more universal desire -- it's like finding a rhyme, instead of just using normal everyday prose. Now, the world is full of bad poems, no question, but blaming the rhymes themselves for that...
ARM64 is nice but, considering it's LLVM based, would ARM32 and MIPS32 be viable? If it could do that and has some kind of 'no-std-lib' option... I'll give it a go. Anyone who cites Niklaus Wirth as an influence is alright with me. With matrix operations built in the excuse for still using Fortran is on thin ground now.
There are folks targeting ESP32 iirc. The matrix type in Odin is a stack allocated type, for most computer graphics applications its perfect. if you're going for big/sparse matrices still need a allocated type.
Thanks for the podcast! Seems to have many similarities to Nim but with focus on modern cpus and running under an OS. No embedded support it seems though, maybe I look in wrong places? Have a look at Nim too!
Odin does have freestanding targets, but it we are not focusing on embedded systems for loads of reasons. Personally I believe embedded systems (whatever that even means, since it is such a broad category), needs a language tailored for its domain. More domain specific languages is what we need, not "generalized" languages which is not great for any specific domain.
I don't know if it's just me, but Odin fails to build straight from the repository. I tried checking out prior tags to no avail. I suspect my clang/LLVM installation is out of date, but I'm not updating since it works now and updating always breaks things for me. This is the eternal problem I keep having with new languages, they refuse to build out of the box unless you have the exact same system they expect or the latest and greatest library versions or stand on one leg and cluck like a chicken. Zig at least provides a pre-built binary that runs, even if the language is half-baked and not completed, and Rust as ginormous as it is actually built from source, which is a first for me, but none of the nightly builds for Odin will even run because even my libffi is out of date. Is it too much to ask that compiler authors try to remember that all they're doing is converting source into a binary format and it doesn't require the latest and greatest of everything to do that. Hell, I'm not even finished with my own language, but every version compiled for every system I tested it on without the need to update anything and still generated code which ran. Except for the Pi version, which generated a binary that ran, but not on the Pi itself, because I haven't written the ARM code generator yet.
Update if anyone even bothers to read this, but I edited the source and deleted the bad option it was sending to clang and it built without errors. I'm assuming some configure script did it, but I'm not going to bother investigating further because no one cares.
Bill: if you build in math functions that operate on 128-bit floating point types, you could take over the scientific programming domain, like FORTRAN did 50+ years ago.
Firstly, name a single platform that supports 128-bit floating point numbers in hardware?---that isn't an FPGA. Secondly, if you need more precision than 64-bits, you probably want "big floats" instead, because 128-bits is probably not enough.
Thank you for having me on! It was an absolute pleasure.
For me too. ❤️
Thanks for tge heads up. Great interview.
I first heard of you on Primeagen's channel. I could listen to you talk about Odin all day long. Good stuff.
I just watched an interview with you today, this feels weird.
+1 for the Rush reference!
Odin sounds like GO without a GC. Having your employer use your language for their major products is a MAJOR accomplishment!
My thoughts exactly, plus decent windows support which go struggles with a bit, very interesting language.
Will there be an "Are we X yet?" moment for Odin as was for Rust?
It's an interesting starting point because in one sense there's a product driving development and the features needed to make that product are in the language.
I've used Odin for a week or two, and Go for many years. So far, it does feel like a mix of Go and maybe something like Zig (with regards to allocators being passed into functions.) A lot of Odin's standard library also seems similar in package structure to Go, which has made it easier for me to find things.
@@BboyKeny no. Odin lang community is not a cult. So most likely not.
You are such an amazing interviewer. Like for real. You know exactly how to shine the spotlight on the guest, you bring the conversation in really interesting directions, you know what you're talking about and you're insightful. Really impressed with your host skills, they really make the show. The topics and guests are also very well chosen as well.
Please keep going!
Thanks! 😊
Odin is amazing and does so many things right! Odin addresses almost all my grievances with C that have popped up over years of making game engines in C. Also, over the years I've come to love ideas like custom allocators and zero-is-initialized, which Odin has taken to heart both in the design of the language and the standard library. I've been using it for roughly two years and within a few weeks I will release my own commercial game written in Odin!
Good luck with that. What's the game name?
@@beloaded3736 Thank you. Game name is CAT & ONION. I'll post on this youtube account and on twitter when it's out. Steam page coming soonish. It'll be released on itch before Steam!
@@karl_zylinski Best of luck!!
Why would anyone develop a game engine in C, the only reasons to use C is if you don't have a C++ compiler available for the platform or you work with legacy code.
@@beloaded3736 thank you! The game is called CAT & ONION. It's out on Steam now ✨
I have been using Odin as my daily driver for about a year and a half now. At first, I too complained about not having methods, namespaces and a few other "minor" oopy concepts i was used to. And now having spent time with it, i am **so** happy they do not exist. Bill designed a language around psychology of the users, with the tag line of Joy in Programming, and its true. I **love** working in Odin.
Yeah, I feel like the pitfall of a lot of languages is that they try to include everything, and stray away from their initial concept. For example, Rusts big (maybe biggest) sell is safety, but people often complain about the borrow checker, but if Rust made workarounds easier, it would destroy the point of the language. You should invent a language with a philosophy, python has issues with type checking, and speed, but it has really simple syntax that works well as an interface for libraries. If Python made itself a low level language with strict syntax, they would lose their purpose. There’s a billion general use languages that are all practically the same, when designing a language, it’s good to have a mindset like him and think what the language needs to achieve its purpose. It’s trying to be C v2, so making the same mistakes C++ made would be stupid and silly
I think as long as you have packages, that's all the namespacing you really need
I try to write no method. But I do like go interfaces. I'm torn.
I find Odin very ergonomic, well principled, powerful, and fun to use. And actually quite beautiful, too. Also, Ginger Bill's responsiveness is refreshing -- he responds to questions regularly, usually within minutes. If possible, I'd switch to Odin in my day job in a heartbeat.
Now I'd love to see an interview with Jonathan Blow about the language he is developing (jai, working title), I think he'd be open to it. Whilst syntactically similar to Odin, it has very different opinions about aspects like metaprogramming and macros. Jonathan himself doesn't shy away from voicing his opinion, to the point where he's become a somewhat controversial figure in the programming sphere. He has some good takes, some honestly quite bad, but he sticks by them and it seems to be working out for him. Given all that, the interview is bound to be interesting at the very least, and I'd love to see how it compares to this one.
We need this.
I’d love to see this
Aye!
I’ve followed gingerBill for years, watched many of his interviews and I believe he’s one of the most sensible language designers out there!
Odin is hands down my favorite language. It's the only language that feels like a genuine attempt at making a tool for people who deeply care about crafting software.
And so is Zig, Rust etc too. No point for Odin and Zig adoption is already far better
@@ITSecNEO Rust is a language that is built about implementing constraints for programmers in order to get extra guarrantees about a program. Zig is a tool for making C++ less bad, it's their entire user story...
No they're not.
@ITSecNEO Rust is not in same family as odin and zig. Totally different philosophy
Thank you for giving us Odin, Bill!
Thank you so much for using it!
@@GingerGames waiting for the next ~ update.
@@GingerGames No, really, thank you! First language and way of thinking that clicked with me in a long time. Zig is in the same ball park but something about Odin just makes it more fun. May be the syntax or just the fact we have actual strings in the core lib instead of []u8 :p, or maybe just the fact that it's so focused on game dev...can't choose :D . Btw #soa, best thing ever
@@GingerGames
Incredibly grateful for this language!
@@androth1502 what kind of "update"?
Between using Odin, and watching GingerBill's streams, or listening to his interviews; has been the greatest leap in CS knowledge I've had in the past three years. Thank you @GingerGames
Wow, this channel is a treasure trove for any programming language enthusiast!
Do you have any plans to interview Nim creator, Andreas Rumpf? Right now is the perfect time as he recently published second edition of his book "Mastering Nim"; Nim hit 2.0 last year and there are number of really cool features coming/returning to Nim in near future: new sum types, Nim's very own IR, IC support, etc.
More Nim Topics I would love to see discussed: move semantics 'borrowed' from Rust, new ARC/ORC memory management, Safety without much restrictions
Andreas Rumpf is the creator of Nim, sir - not Araq.
@@pookiepatsAraq is his username But you are right, I should've used a full name here.
What a wonderful interview, so refreshing to hear someone that clearly understands language design and current hardware. Thank you so much Kris and Bill.
Looking forward to pause my coding Go for a bit and give Odin a go.
I'm currently learning Odin, and it seems like every time I delve into a topic, I'm always amazed at how cleverly things are done in Odin. The more I use Odin, the more I agree with his maxim "Odin is the alternative to C for the joy of programming". I invit any coder to test it for a few weeks. It's an amazing language for coding.
At the moment, I'm seeing Odin and Zig as aiming at simillar places... It'd be fascinating to hear you do a three-way with Andrew Kelley and Ginger Bill.
If they formulate the two, Zigdin, Odig, Zod... Oz? 👊
Zig > Odin
This interview was extremely pleasing to watch. I will try to give Odin a go, and also will see what other videos you did on this UA-cam channel.
I enjoy programming in Odin a lot!
These are very good questions from the host, thank you both for making this! Looking forward to the Verse lang topic too
Excellent episode...great questions Chris, you are a great interviewer and ask interesting questions, let your guest answer, and then a thoughtful follow up or two. The language is very interesting and looks tailor made for game and graphics applications based on some of the neat features and libraries discussed.
The best c like language out there.. The only downside, there is not a lot of marketting around it.. This language should become more famous/hype compared to other c like languages out there.. It is so much fun to work with.. Memory management is far cleaner from c like languages out there.. Try using it, its totally fun to use
I absolutely love your channel! Thanks for all the great content! Reading through the docs and Odin seems to share a lot of syntax with Go, which I personally really like.
I had never really thought deeply about how data structures implicitly encode a particular algorithm. One part of me wants to point out that a generic tree could encode either DFS or BFS and there's no way to know based on the tree structure alone whoch one it encodes. But that dpesnt change the fact that there is at least one algorithm implicitly encoded in the tree.
You're a great interviewer. It would be very cool to get Jonathan Blow on to talk about his Jai-lang, which is also C-like but has a lot of powerful features. Besides exposing low-level stuff when needed, I really like its metaprogramming, its extremely powerful "context" passed onto every function, its focus on development iteration speed and being minimalist. But it's still closed beta, and I think Jon likes to not talk too much about it before he feels its more mature (which he sometimes said is when he's done with his new game written in it). He can be very grumpy on a tangent, but with preparation and a good day, I think you could get some very interesting insights out of him. I'd love to see _you_ try. Thanks for sharing these.
Tsoding does this neat technique with a function that does it in C that contains a goto defer and then you put a defer label underneath in the scope. Go defer is still way more preferred but it's nice to have a convention and some ergonomics in C.
Oh, you're talking to all my favorite hipster langs! It would be cool if you get Sophia to come talk about Nushell-it's like Roc, but also like Bash.
Oooh, nice. I'll drop a line to Sophia and see if she's interested. Thanks!
ginger bill is doing amazing work with odin and its a delightful langauage for the games and graphics domain imo. But, I would like to point out that C is not dead and is being actively developed. For example, we use defer in c 21 that are implemented with the macros. It would be awesome if chris broguth someone Dawid and Jens who are pioneering the modern c.
Thank you UA-cam Algortithm for suggesting this video to me only 2 hours after the Upload.
Second video I watch and the interviews are so interesting and the conversations go on so pleasantly. That's an amazing skill to have.
Many years ago I worked for a Canadian company called Geac. It had its own languages (and operating system) with several interesting features. The lowest-level language was ZOPL, which was derived from BCPL. It had no data types at all. When you declared variables, there were two areas of memory available - you could use DCL which started at the top of memory (location 0) and BDCL which started at another specific location (can't remember why, now). You would declare something like:
DCL Fred(20)
This would give you a named area of memory, 20 bytes long, and if this was your first declaration then it would start at location 0.
If you followed this with DCL Alice(10) then Alice would start at location 20, and occupy 10 bytes. And so on.
You could then use offsets - so ^$Fred+10 = 4 (^ means contents of, and $ means address) would make the byte at location at address 10 become 4. And if you said ^$Fred+25 = 2, then the byte at memory location 25 would become 2 - which is actually the same location as Alice + 5
It had other features. All parameters in subroutines/functions were effectively passed as addresses, not as variables. So if you had a routine with a single variable DoSomething(Var), and called it with DoSomething(Fred), then actually what you were passing was the address of Fred (which is 0 in memory). Inside the procedure's definition, you would use the ^$ construct to use or make changes to the variable passed in.
This, of course, has many problems. One is that all variables are global. And another is that it was very easy to pass a variable to a procedure and then tromp all over any other variable you wanted to. You needed a lot of discipline. But it also had many advantages.
It was nice to hear a shout-out fr Wirth. The second (or third or fourth, can't remember) language I used was Modula. That was (a the time - 1980) a lovely language to use.
Yes, I _did_ enjoy this episode very much, thank you!
Our pleasure!
it was nice to hear a bit more about the history of Odin and how it came to be in the gaming sphere. thanks!
Great guest, great interviewer, great topic. Easy sub!
I am interested in exploring Odin and am impressed with how far it's come. I have created a few domain-specific programming languages, but I've never attempted to design and implement a compiler for a general purpose programming language.
Unfortunately, from looking at the website, I won't be able to experiment with Odin in the sort of programming I do. It's not available for any of the architectures that I commonly program on. I do a lot of low-level embedded engineering and programming, so I need languages that work with compiler suites that are able to produce code for common embedded microcontrollers and other microprocessors used in this domain such as PowerPC (32 and 64 bit), Cortex-M (32 and 64 bit), Cortex-R (32 bit), MicroBlaze (32 bit). I also do a lot of bare-metal (unhosted) programming, either single-threaded or using a small multithreading executive (not a full RTOS).
A few nits: C is not from the 1950's, it's really late 1960s through the 1970s. It really didn't hit its stride until the K&R compiler for Unix 7th edition. Fortran and Cobol have their origins in the 1950s. C passes arrays by reference because a raw array identifier is treated as a pointer to the first element of the array.
We'd be interested in seeing if we can support a freestanding PowerPC platforms for Odin most definitely! Maybe some forms of Cortex-M (but it's too varied to be actually useful as a single generic target). As for MicroBlaze, you're probably the first person I've met in a long time to even use it still.
Supporting these new platforms does take a bit work (LLVM isn't just magic, unfortunately) to get working, but we are not against supporting those platforms. We have just been focusing on the main application-oriented platforms (AMD64, ARM64, and now wasm), but that doesn't mean we cannot support other platforms.
This got me reading the Odin's Doc. Fascinating language with some great features, like how it handle structs of array or the using keyword. A lil bummed about the lack of automagic C interop like Zig has. I will have to try it out that's for sure.
Thank you for watching the video. With regards to the "automagic C interop", this sounds cool until you realize this is actually pretty much NEVER what you want. In all of the cases you look at what Zig does, the libraries just wrap the automagically imported C calls, which is effectively the same amount of work as just writing the bindings manually, defeating the entire purpose of the automagical stuff. There is also the other issue that people use the C-preprocess as if it was the same language as C. They define constants and many wrapper functions and more, with the preprocessor, which will be missed by the "automagical" stuff.
We are currently working on making an official automatic bindings generator, and because of Odin's amazing `foreign` system stuff, things can have little to no wrappers whatsoever, and still be extremely useful. Odin has tried its best to make binding with foreign code very pleasurable, whilst not requiring wrappers. See things like the attributes `link_prefix` or even `b32` types (for booleans which are not 1-byte) or `u32le` types (endian specific types) or multi-pointers `[^]T`. With a bindings generator, you'll have a lot more control about how you can interface with foreign (e.g. C) code.
@@GingerGames thank you for the wonderful reply!
Another excellent conversation, thanks!
Odin quickly became one of the most joyous languages to write for me. Odin and Elixir *chefs kiss*. Perhaps a conversation with José Valim could be on the cards🤞
Thank you for the amazing talk. I really like the aproach Odin is going for and I started following a small tutorial series on making a game with it.
The teaser for a video on Verse is exciting to hear. Can't wait for it.
You didn't have to wait long - it's up now. :-D
Any chance of getting jon blow on jai?
CPU up. Wonderful talk Bill!
Already interested in the language at 20:48. After reviewing the overview of the language, having some golang experience already, I really feel being at home. The syntax is very similar, but the language is highly performant? I'll surely dive deeper ! Thanks Bill ! And thank **you** Kris for this amazing discussion !!!
It will generally beat out Go in performance, but not quite at the level of C, C++, Zig, etc in regards to its potential "raw power". It is probably most relatable to Rust in regards to potential performance. Obviously all of these languages being listed are "fast", so its in the ballpark, and the differences are moot unless you are developing for some AAA game title that is aiming to eek out the absolute most possible out of the hardware.
Thank u for having Bill and for doing this awesome content and being such a great interviewer!
I am making a compiled programming language myself! It is meant to be a serious replacement for Rust. Rust is amazing, but it has a bunch of huge flaws... the biggest being it relies on the internet to compile most things...
Good Luck 🤡
The SOA stuff seems really neat, was a good interview.
I really enjoy these videos. Thanks for the interview, Odin is super interesting!
So what am I supposed to choose, Zig or Odin?
As I say in the interview, try both of the languages out for at least a week each, and see which you prefer!
@@GingerGames Thank you, Bill, you're such a great inspiration 🫡
Thank you, enjoyed the talk a lot.
Does using LLVM mean that essentially it's not Odin's compiler support all the mentioned platforms but just LLVM supports them?
What's Odin's compiler's part in it?
Working on a language in an environment where it's in heavy production use seems to me a wonderful thing. Assuming, of course, the language is adequately stable at the start. A feedback loop for the actual logic of the language: marvelous.
0:14:47 that "type" always horrified me... can't use it to store hash outputs since 0 is a legal octet; can't use it to store user-input UTF-8 or ASCII strings since U+0000 is technically a character...
Nice interview. One thing though, as a visual learner I wish he had shown code while he was explaining various aspects of the language.
Yeah, that's a thorny one. We also go out as an audio-only podcast on Spotify, Apple, etc., so we have to treat it like radio...
The biggest thing wrong with C (and C++) IMO is that it is a multi-pass compiler + linker that requires header files to tie everything together. The reasons it's that way are unimportant in today's computing landscape, so simply removing the need for header files IMO would be the single largest improvement to the C family. Odin looks interesting, and appears to abolish the need for herader files which is great. However, I think it would gain much more traction if it stopped there and preserved most of the C syntax, which is very deeply embedded (pardon the pun).
While it gets compared to C quite a bit, it is far closer to Go than C, especially regarding syntax. I almost think of it as more complex version of Go, but using LLVM under the hood. I really like Odin, it is downright fun to code with, but IMHO it is not even close to being a "C/C++ replacement", I honestly don't even understand why they are so often compared to one another. It has some great strengths that make it stand out, even among other emerging lower-level languages like Zig, Rust, etc. and I feel it would be better off to not try and brand itself as a "C replacement" and lean harder into its strengths and the fields it excels in.
Odin for me is like refreshing love for coding in the perfect spot between high and low in modern terms of complexity. An amazingly balanced language.
Another great language to try out!
You’ve inspired me to write a game in odin
Do it! I'm making games in Odin and I've never been both so productive and creative at the same time.
Let me guess, your project died after one week 😂😂😂😂
Are there any plans to open up the in-house IMGUI?
Nope. That's private. But Odin does have `vendor:microui` which you can use and modify to your heart's content.
@@GingerGames Hey thanks for the reply and I completely understand [keeping it private]!
You are a great host! Thank you!
Love Odin, using it to develop games
Did you look in PL/1? I like how it manages types.
The fact that defer is SCOPE exit and not function exit... Amazing. Go needs a scope defer. So many times I find myself in a look wishing the defer would run at the end of the loop/scope, not the end of the function
Just picked up Zig. I’ve been coding in Go for about 8 years professionally. Odin has a ton of similarities to Go honestly. There is a lot I like about Zig though. My only concern is funding for these sort of languages. I feel languages never take off without backing from a major player like Google or Microsoft
I've been called out, I saw the syntax and said no thanks. I'm gonna give it a shot and report back. The no methods stance sold me.
Operator overloading is f'ing stupid, good choice.
It's not xD It's far easier to express complex mathematical formulas. It's just missused by some peoples
Odin is amazing! I feel extremely productive in it. Joy of programming? Definetely!!
Could I use Odin with an Arduino kit? Does it depend on a mainstream operating system like Windows?
From what I've seen odin only has for loops which function as both for and while loops depending on how you write them - cool - but can it do do- while loops?
Wonderful chat.
GG balances self confidence and open mindedness well
Maaan when the interviewee and the interviewer are damn goo🥹
I'm more of a Loki kind of guy. When is the release date for that language?
I came to this video not expecting such a beautiful host!
Always a pleasure to listen to Bill talk about Odin and computing in general. Great interview!
Verse is a new language that Simon Peyton Jones (and others) are working on at Epic.
Very interesting to see where it goes. He has a great talk up called “Beyond Functional Programming. A taste of verse” if you’re interested.
m.ua-cam.com/video/OJv8rFap0Nw/v-deo.html
You easily can say Odin is a great language because Bill wields a luxury beard.
excellent talk 👍 just finished it
GB is such a king. 👑
looks like we'll have a language for every subset of features to beat C and C++
Sorry to butt in here but as an old guy, as soon as you said "Programming Done Right", I'm shouting for Perl. Never yet played with yer Odin, but have done about two dozen others over the years. For me, for non machine-language use-cases, it would easily be Perl, all day long :)
The way he describes how the types will be chosen on use sounds like type inference. If it is, I suspect some people will dislike it because they like specifying type. Maybe it is not the way I think it sounds.
Great episode!
OK, so this is a language designed by game engine developers for game engine developers, certanly not a ‘systems programming language’ and the language and the design choices reflect that.
I mean, talking about CPU-up design to languages, for a ‘systems programming’ language, there is no mention of the thing between the CPU and your game, the operating system ( the motive that we call C a ‘systems’ programming language is because it is used to write operating systems)
Who gives a 💩 in a systems programming language about opengl, metal or whatever …? Database engines, device drivers, network stacks, high performance network applications etc are examples of what most people consider ‘systems programming’ , not 3d games …
thoughts on odin vs zig? I think only 1 language can survive, unlike rust vs zig where both are offering some different features.
ua-cam.com/video/tgxtk2OeLwM/v-deo.html
It's not clear either of these languages will survive. People have been trying (unsuccessfully) to kill C and C++ for decades, and there has been a large number of new systems programming languages lately. Hare, Jai, Vale, Hylo, Austral to name a few. How many do we need and why would you pick one over the others?
@@Kuraitou
So? Doesn't mean we should stop trying. C is a relic and while C++ has its nice parts, it's a pretty poor language from an objective perspective. It barley has any cohesive design and copied over all of C's pain points verbatim.
I think Jonathan Blow put it quite well (and I don't usually find myself agreeing much with the guy). Roughly paraphrased "We aren't going to be programming in C or C++ for ever. The question isn't *if* another language is going to replace it, but *when*."
And even leaving that besides the point, why do can't we have multiple low level systems programming languages? Rust, Zig, Odin, Jai, V, Hare... They can comfortably coexist. If Odin proves itself suitable for graphics, simulations and game programming, then why not adopt it for those tasks?
Take a look at other domains. Backend development is a mix of C#, Java, Go, unfortunately a lot of JavaScript.
High frequency trading sees a lot of languages in play, so does data science and virtually any other software domain.
You'd be laughed out of the room, if you suggested any of those domains needs to settle for "one true language" or that we should stop trying to innovate within them, or that you don't need anything besides good old Java.
Truth is, Systems programming has simply been under-served for a long time. I'd wager that's mostly down to how hard it was to write a good compiler and there not being major incentives for the M$, Googles and Oracles of the world to do so (hard to sell a platform for a language that doesn't need a platform), but LLVM, for all its shortcomings, has really changed the game here. Too some end, I think we are seeing a cambrian explosion in terms of low-level systems programming languages. Surely not all will find mass adoption and maybe not all of them will survive long term, but many will find their niches. Maybe that's why C/C++ folks get so defensive over the whole issue. They aren't used to having competition.
Odin is domain focused language while Zig is more general purposes. I don't see the competition. Zig tries to interop and actually replace C. Odin is just another specialized systems language.
@@Kuraitou have they tho ? I hear this all the time that people have been trying to replace C for decades but failed like it was impossible ? All those
languages who ""tried"" to replace C where failing from the start. For example Jave could never be a C replacement yet in the early days it was advertised as such, On the other hand nowadays we have in my opinion real contenders, Zig for examples actually feels like a C replacement, as a C developer, Zig makes me feel at home, it's imperative, there is no inheritance, it's lower level than C. Everything feels better in Zig than in C, the type system feels better, the std is light years more useful, the semantic feels more cohesive, the error handling is better, testing code as never been easier, building it too, allocators as first class citizen is awesome, I could go on but all those things considered makes me feel like Zig could be an actual replacement to C, same with Rust, It feels a lot like Cpp, I hate Cpp, but Rust makes it more fun, it's still way too convoluted for my taste but It's a fantastic C++ replacement. So I think the argument of many have tried and they all failed isn't relevant anymore, because now that programming as a whole as evolved people have grown tired of C, myself included, it's a great language but the developer experience is really terrible and outdated, I see that everyday around me the programmers I work with all hate C in one way or another, and none of them use C in their spare time to build toy project, they all use Rust, Zig, Odin, Nim, OCaml and whatnot. I think the question is not about whether any of these languages will replace C, it's more of a when ? because it's pretty obvious that nobody in the industry wants a decade more of C, let alone another 50 years of it.
I'm getting a healthy whiff of (Yorkshire?) pragmatism over purity, an engineer knowing perfectly well the theory, before carefully discarding the right bits to get the job done. Unlikely to be taught in the halls of academe... But hey, they didn't build the railways.
Simon Peyton-Jones for Verse ...
Is Bill talking about "Algorithms + Data Structures = Programs" by Niklaus Wirth at 55:55?
Yes, I believe he was. There's a link in the shownotes. :-)
@DeveloperVoices I have that book. The Pascal version. Bought a hard cover copy 30 years ago. The book just appealed to me for some reason. It was also the textbook for an introduction to a computer programming course at my university.
0:27:25 i.e. you're better off doing a library call or otherwise sending your array off to a whatever quantum operation provider at this time, if you actually had a need for it?
How is Odin’s defer statement different conceptually from C++ RAII …? Or are we going the Rust route and pretend C++ does not exist and take a p**** on C …?
A case study for "taking things literally" 🙂
38:53 i honestly never really understood how the C preprocessor survived the 90s
I still use it. I've been coding in C and C++ for 30 years Never had a problem with it. The real problem is with how it's used.
Great job mr host
THIS MAN!
OK, write an OS with it. Unix is written in C. Can this new language do low level stuff? If not, it is not a replacement for C.
You might be interested in Hare. Drew DeVault's writing that as a C replacement, and he's writing an OS too, to answer exactly your point.
ua-cam.com/video/42y2Q9io3Xs/v-deo.html
People have already written Kernels in Odin. So yes you can write an OS with Odin.
31:52 this is also why go is my scripting language. I'm going to learn Odin now.
BTW, choosing custom operators is _not_ optimizing for typing. It's an expression of a much deeper, more universal desire -- it's like finding a rhyme, instead of just using normal everyday prose.
Now, the world is full of bad poems, no question, but blaming the rhymes themselves for that...
Looking forward to the language programmer battle royale! ^- ^
Whoever wins, we win. 😁
@@DeveloperVoices True words! Also phenomenal work on this channel, I hope it keeps growing
ARM64 is nice but, considering it's LLVM based, would ARM32 and MIPS32 be viable? If it could do that and has some kind of 'no-std-lib' option... I'll give it a go.
Anyone who cites Niklaus Wirth as an influence is alright with me.
With matrix operations built in the excuse for still using Fortran is on thin ground now.
There are folks targeting ESP32 iirc. The matrix type in Odin is a stack allocated type, for most computer graphics applications its perfect. if you're going for big/sparse matrices still need a allocated type.
I'd Love to see V lang, Crystal, and Nim on the show.
V lang is vaporware
@@ITSecNEO Why do you think that? Do you think the founder and core team lacks the required momentum or what is the issue you're seeing?
@@henrikholst7490 It's their false claims in the past. There are some articles about that
beautiful hair Kris 😍
Thanks for the podcast!
Seems to have many similarities to Nim but with focus on modern cpus and running under an OS. No embedded support it seems though, maybe I look in wrong places? Have a look at Nim too!
Odin does have freestanding targets, but it we are not focusing on embedded systems for loads of reasons. Personally I believe embedded systems (whatever that even means, since it is such a broad category), needs a language tailored for its domain. More domain specific languages is what we need, not "generalized" languages which is not great for any specific domain.
I don't know if it's just me, but Odin fails to build straight from the repository. I tried checking out prior tags to no avail. I suspect my clang/LLVM installation is out of date, but I'm not updating since it works now and updating always breaks things for me. This is the eternal problem I keep having with new languages, they refuse to build out of the box unless you have the exact same system they expect or the latest and greatest library versions or stand on one leg and cluck like a chicken. Zig at least provides a pre-built binary that runs, even if the language is half-baked and not completed, and Rust as ginormous as it is actually built from source, which is a first for me, but none of the nightly builds for Odin will even run because even my libffi is out of date. Is it too much to ask that compiler authors try to remember that all they're doing is converting source into a binary format and it doesn't require the latest and greatest of everything to do that. Hell, I'm not even finished with my own language, but every version compiled for every system I tested it on without the need to update anything and still generated code which ran. Except for the Pi version, which generated a binary that ran, but not on the Pi itself, because I haven't written the ARM code generator yet.
Update if anyone even bothers to read this, but I edited the source and deleted the bad option it was sending to clang and it built without errors. I'm assuming some configure script did it, but I'm not going to bother investigating further because no one cares.
Bill: if you build in math functions that operate on 128-bit floating point types, you could take over the scientific programming domain, like FORTRAN did 50+ years ago.
Firstly, name a single platform that supports 128-bit floating point numbers in hardware?---that isn't an FPGA. Secondly, if you need more precision than 64-bits, you probably want "big floats" instead, because 128-bits is probably not enough.
My programmer and I are creating a 2D game engine in odin.
I like the pragmatic approach - thoroughly absent from Western thought these days...
C, but older and wiser? That would be Fortran :)
That would be Pascal :(