TL;DR: A good tool is and ought to be invisiblestriving to make such tools is the goal of a toolmaker.One habit I see a lot, and have to push back on, is taking a tool;s shortcomings and reselling them as a ;puzzle game; which is ;fun; to solve.I don;t want my tools to be ;fun;. I want my tools to be invisible.Text Editor WarsLet;s take vim as an example This is just an example, and applies to…
Karl Zylinski;s Tom;s Namespaces: An Odin Fanfic is an excellent exploration of the namespacing problem in imperative programming languages such as Odin I highly recommend reading that article before reading this one!. After sharing it on many comment forum sites, I;ve concluded there;s no real ;solution.; AssociationThe article uses a simple example:The aesthetic argument against this form of…
As with many discussions in the programming space, there are ;wars; between different ways of doing things. These are typically about minor aesthetic preferences, such as:Tabs vs Spaces for indentation vs vs for naming conventions vs for strings (if the language allows both)1TBS vs K;R vs Allman for brace stylesThese wars are largely pointless; what actually matters is coherency and consistency in…
I have seen a common remark from people who are not the biggest fans of Odin and it is usually the remark that Odin is ;full of sugar; which only works for the ;blessed types; and it cannot be replaced or implemented for user-level types. Firstly, I don;t think this is necessarily an example of ;sugar; since that term implies it is shortening a construct / feature / idea into something smaller,…
Recently, Brodie Robertson produced a video on the Bizarre World of Wikipedia Deleting Programming Pages. I highly recommend watching the video.I thank Brodie for covering the Wikipedia fiasco for Odin. We don;t particularly care if Odin is on Wikipedia or not; especially when Wikipedia itself is rarely reliable, but we;ve been dealing with Wikipedia mods for years. Our best hypothesis Which could…
Odin;s declaration syntax becomes second nature to everyone who uses the language but I do sometimes get asked ;Why are there two ways to do type conversions?; Enough that I had to make an FAQ entry..The reason that there are two ways to do type conversions is because one approach may feel better than the other case. If you are converting a large expression, it sometimes a lot easier to use the…
Yes.But not necessarily in the ways you might think n.b. This article could have been a lot longer than it currently is..Concrete and Abstract SyntaxesIn the previous article, Choosing a Language Based on its Syntax?, I talked about how many people will not pick up a language purely based on its declaration syntax not being familiar to them or the usage of semicolons or more.There were many lovely…
I am still perplexed by how people judge a language purely by its declaration syntax, and will decide whether to use the language purely based on whether they like that aspect or not I am specifically talking about declaration syntax here and not other aspects of concrete syntax. Please do not extrapolate further..The general categories of declarations can be classified as the…
There are only two families of proper arbitrary markup languages: TeX and SGML I would normally link to official thing as reference but it's behind the "wonderful" ISO paywall: ISO 8879:1986.. By arbitrary, I mean the grammar specifically, and how it can be used to mark arbitrary plain text with information. And by proper, I mean the ability to have standalone nodes, user-definable nodes, nodes…
This article is continuation to: Was it really a Billion Dollar Mistake?.After reading a lot of the comments on numerous social media sites on the original article, I think I need to clarify a lot more.The main points I wanted to clarify:Null pointer dereferences are empirically the easiest class of invalid memory addresses to catch at runtime, and are the least common kind of invalid memory…
TL;DR pointer dereferences are empirically the easiest class of invalid memory addresses to catch at runtime, and are the least common kind of invalid memory addresses that happen in memory unsafe languages. The trivial solutions to remove the ;problem; pointers have numerous trade-offs which are not obvious, and the cause of why people think it is a ;problem; comes from a specific kind of…
Even with the documentation on the topic, many people completely misunderstand what the system is for, and what problem it actually solves.For those not familiar with Odin, in each scope, there is an implicit value named . This context variable is local to each scope and is implicitly passed by pointer to any procedure call in that scope (if the procedure has the Odin calling convention).The main…
n.b. This is a written version of a dialogue from a YouTube video: 2 Language Creators vs 2 Idiots | The StandupPackage managers (for programming languages) are evil The term "evil" is being used partially hyperbolic to make a point..To start, I need to make a few distinctions between concepts a lot of programmers mix up:A packagePackage RepositoriesBuild SystemsPackage ManagersThese are all…
I sometimes get asked if Odin has any plans to add hygienic macros or some other similar construct. My general, and now (in)famous, answer is to many such questions is: No.I am not against macros nor metaprogramming in general, and in fact I do make metaprograms quite often (i.e. programs that make/analyse a program). However my approach with the design of Odin has been extremely pragmatic. I…
Originally from replies to a Twitter thread: https://x.com/TheGingerBill/status/1914389352416993395This is not a structured argument against FOSS/OSS but my uncommon thoughts on the topic.I am not sure if I agree [that FOSS/OSS derives from the same thinking process as the ideology of communism], but I understand the sentiment. The fundamental issue is that software is trivially copyable. I have…
The original Twitter thread: https://x.com/TheGingerBill/status/1508833104567414785I have a huge gripe when I read articles/tutorials on OpenGL: most people have no idea what they are talking about when it comes to coordinate systems and matrices.Specifically: OpenGL is NOT right-handed; the confusion over column-major ;matrices;.Let;s clear up the first point. Many people will say OpenGL uses a…
[Originally from a Twitter Thread]Original Twitter Post;Killer Feature;Odin is a weird programming language to advertise/market for.Odin is very pragmatic in terms of its design and overall philosophy. Unlike all popular languages out there, it has no ;killer feature;. I;ve tried to design it to solve actual problems with actual solutions.Those languages with a ;killer feature; to them do make…
NOTE: This is based on, but completely rewritten, from a Twitter post:https://x.com/TheGingerBill/status/1802645945642799423TL;DR: It makes Go feel too ;functional; rather than being an unabashed imperative language.I recently saw a post on Twitter showing the upcoming Go iterator design for Go 1.23 (August 2024). From what I can gather, many people seem to dislike the design. I wanted to give my…
[Originally from a Twitter Thread]Original Twitter PostOne thing many languages ; API designers get wrong is the concept of a string. I try to make a firm distinction between:string value ( or )string builder ( or )Backing buffer for a string ( or )They are not equivalent even if you can theoretically use them as such, and so many garbage collected language use them as such.They have different use…
[Originally from a Twitter Thread]Original Twitter PostMany people may not know this but this video by Sean Barrett @nothings is partially the reason why I made the Odin programming language.And I;ll explain what insights it gave me in this thread .A lot of these seem ;so obvious; but for some reason it never clicked to me before this video. A lot of the ;higher level; ;scripting; languages are…
[Originally from a Twitter Thread]Original Twitter PostI don;t know if I have ;ranted; about this here before but:I absolutely HATE comparing programming languages with ;benchmarks;.Language benchmarks rarely ever actually test for anything useful when comparing one language against another. This goes for ANY language.Even in the best case scenario: you are comparing different compilers for the…
For my work at JangaFX, we require the use of the Alembic interchange file format. We have been using other libraries which wrap reading the Alembic file format but because it is not the native library, it has numerous issues due to the generic interface.I spent nearly 4 days trying to get the official Alembic C++ API, https://github.com/alembic/alembic/, to compile correctly and then use the API…
I have recently been thinking about multiple return values as a concept, and wondering if there has been any kind of literature into the topic of ;true; multiple return values which are not emulated through tuples. My current working hypothesis is that I think I have come to the conclusion (unless there is evidence to the contrary) Odin has invented a new kind of type system, something to the akin…
[Originally from a Twitter Thread]I have revisited The Value Propagation Experiment and have come to a different conclusion as to why it failed and how I recovered it.The recovery work has been merged into master now with this PR: https://github.com/odin-lang/Odin/pull/1082I think there were three things which were confusing which make it look like a failure of an experiment: was a confusing name…
[Originally from a Twitter Thread]Part 2 of this ExperimentThe IdeaI recently experimented with adding a feature into Odin which allowed for a way to propagate a value by early returning if that value was or not . It was in a similar vein to Rust;s which became , or Zig;s , etc.I have now removed it from Odin. But why?The ProblemThe hypothesis was that that this idiom was common:where may be an…
When I was designing the constant value system in Odin, I wanted literals (especially numbers) to ;just work;. I was inspired by how both Ada Ada Style Guide For Naming Conventions and Go I highly recommend reading the article regarding how Go implements its constant value system https://blog.golang.org/constants both handled their constant value systems. But this lead me to a realization that…
Note: This is a ;brain dump; article, and subject to be cleaned up.Categories of Structured Control FlowProcedure callTerminatingConditional, , Looping - loop with initial statement, condition, post statement, and body - loop with a value to be iterated over - loop with condition then body - loop with body then conditionBranching - go to end outside of the control statement - skip to the end of a…
One thing I have noticed a lot when a programmer is struggling to solve a problem, especially a novice, is that he is stuck worrying about the ;best way; to implement the solution rather than actually understanding the problem he has. I believe a lot of this stems from not understanding the essence of what programming fundamentally is.Essentially Ordered AspectsIn a previous article of mine, I…
I have been toying with a theoretical idea for the past 18 months off-and-on in my head and I have not fully articulated it aloud yet. It is regarding the concept of Ownership Semantics (OS) or Move Semantics in programming languages. Fundamentally this article is a criticism of the concept and states that the concept is a duality of traditional OOP but applied to a different area.General…
I was originally going to write a normal prose article regarding the topic of Pragmatism in Programming, however I thought I;d experiment in style by writing in a proverbial style.The following concepts express the school of thought that I subscribe to which I call Pragmatism in Programming.Proverbs written by Ginger BillThe concept of programmingProgramming is a tool to solve problems that you…
Absolute PointersPointers are a value type in programming languages that store a memory address. A pointer references a location in memory, and obtaining the value stored at this location in memory is known as dereferencing a pointer. Pointers are part and parcel of using languages like C, and are an extremely powerful tool. Pointers can be treated as a form of reference type, a value that refers…
I read the article Let;s stop copying C about 3 years ago. Recently someone brought it up again and I thought I would comment on the points being made. The article argues that newer languages ought not to copy the mistakes of C and comment on may of C;s mistakes.I recommend reading the original article first before reading this one as I will be commenting directly on the subsections of the…
It is lovely to see many new programming languages being produced to solve different issues that the designers are trying to address. Many of the new big ones include Rust, Go, and Swift, all of which are trying to solve different problems. There are some not-as-big programming languages that I recommend everyone to checkout:Odin For those who do not know, I am the creator of the Odin programming…
Article was originally posted here: https://odin.handmade.network/blogs/p/3372-exceptions_-_and_why_odin_will_never_have_themOriginal Comments:https://github.com/odin-lang/Odin/issues/256#issuecomment-418073701https://github.com/odin-lang/Odin/issues/256#issuecomment-418289626There will never be software exceptions in the traditional sense. I hate the entire philosophy behind the concept. Go does…
Article was originally posted here: https://odin.handmade.network/blogs/p/2994-on_the_aesthetics_of_the_syntax_of_declarationsn.b. This is a philosophical article and not a technical article. There are no correct answers to the questions that I will pose -- only compromises.I;m considering what the ;best; declaration syntax would be. Historically, there have been two categories: which I will call…
Article was originally posted here: https://odin.handmade.network/blogs/p/1723-the_metaprogramming_dilemmaDesigning this language has been difficult but fun. Two of the original goals of this language were simplicity and metaprogramming however, these together could be an oxymoron. But before I explain why, I first need to explain what I mean by ;metaprogramming;.Metaprogramming is an ;art; of…
One of my favourite things about Go is the statement. The statement pushes a function call onto a list; the list of saved calls in called when the function returns.Imitating this is C++ is impossible. Instead of calling when the function calls, you can call at the end of scope; this is a better approach for C++. This is similar to how D has scope(exit).C++11 ImplementationExplanationOne of the…