all i know is that to be able to read Go, i don't need to know as many things to read almost every other language (stuff like BASIC and assembler are simpler).

there's no way this doesn't impact the precision of the LLM at finding the right answer in any given equal case easier if the language grammar is less complex and has less reserved words and operators.

the reason why i like Go is because it doesn't pile a ton of opinionated shit on top of the language like most languages do, and keep piling more opinionated shit on top before you know it it's a 10-30 minute build on an average sized project. Go manages this from scratch, with a totally clean environment in 45 seconds including pulling all the stuff, there's no way the LLM has to work as hard.

it's just about context. the language grammer costs context in the LLM processing. more context = more memory that has to be traversed. similarly, the more places you have to look to find different things, the longer it takes for the LLM to find the target to implement on. i'd be willing to bet the energy cost of translating simpler human languages versus more complex one applies exactly the same. German, russian, and most of central/northern slavic languages have complex grammar compared to, for example, bulgarian. bulgarian removes cases, more or less completely, and shifts the complexity over to verb tenses. for similar reasons, languages that make better use of modifier suffixes and eliminate ambiguity of persons of verbs (which is characteristic of eastern european languages) can be literally more verbose but with a more naive and less complex interpretation required because it has mulitple markers on almost everything, persons, tense and so forth. english, for example, like bulgarian, extensively uses prepositions a lot where cases might express the same context - same result, the verbosity is slightly increased, but the ambiguity of any phrase of the sentence is lower, meaning less context must be searched to find the relevant grammar tree.

out of different language groups, there are also more and less complex variants - danish is one of the simplest to learn nordic languages.

the unseen economic cost of clumsy and complex languages is one of my personal obsessions. people just don't realise how much less capacity to reason they have left after considering the context required to parse the language. more rules = more context.

precisely the same reason why Go compiles so much faster, is why the LLM is more stable at producing effective results, because it can encompass more non-central context of the data. every text comes with a burden of complexity, and the more complex the core of the language, the less space you can use to deal with specifics.

i have so far found that typescript/react projects are the slowest to progress, Go is definitely the fastest, and for UI, svelte is definitely simpler to reason about too.

LLM credits are not cheap, damn.

I agree.

I think Go was specifically designed to require less context by the reader, and that is likely to help out with LLMs.

Have you checked out Odin?

It’s even better than Go in this regard. It’s highly consistent. Maybe the most readable language I’ve come across.

It’s not so great with LLMs though due to low training data.

Reply to this note

Please Login to reply.

Discussion

i'm not fond of languages that use :: at all, at all. structural typing, not object/inheritance. composition not inheritance.

and it has needlessly verbose and specific repetition in the iterators, where `for _,_ := range X` but also `for init(); check(); iterate()' C style if you need to use that for whatever reason, and can even do a forever loop with nothing but for {} which is a construct that doesn't make much sense without callbacks or channel selectors

nah, i'll stick with Go :) V and zig are another two languages that go in this general direction, V is very fast compiling but personally i can't stand the whole mutable/immutable variable declaration, i think all variables should be mutable because the MMU annotations against the memory map cost more processing and context switching time when there is a ROM flag on a block of memory. Rust dwells on this shit irritatingly and probably the most common line beginning in Rust is "mut", when you consider variable declarations. should be the other way around - implicitly mutable, and explicitly immutable. you don't have to write much Rust code no figure that out.

that's at least a few hundred milliseconds of time spent ignoring noise in the text. this general principle towards clean, unambiguous semantics by avoiding stutter and boilerplate fluff. you can't really take anything away from Go's syntax and still have somehting usable. you could completely *gut* C++ and Rust and Java and still be able to implement the same software. it would just be a lot faster, cost less in complexity, be cheaper to vibe code, and easier to read.

after 8 years working with Go i would not pick a single other language that i would prefer to write code in. sure there is a few quirks especially involving maps and slices but you get used to remembering that not all values are values. it also makes some constructions of structural typing difficult, it's best to do structural types always wrapped in struct. struct is just the same as a tuple except with typing, the data is squashed together and there is no overhead, just a map of symbol-name correspondences as offsets from byte zero.

people who love these "expressive" constructs like map/reduce and try/catch think their code is clever but it's just unecessary. in Go there doesn't have to be exceptions, any exception is fatal, and instead errors are considered to be intrinsic to almost all cases of a return value tuple - leaving open more flexible ways to deal with unexpected states such as "the best i can do is" style "this is the answer i got but i encountered errors getting this value and it may therefore be useless to you".

languages that don't have interfaces promote bad habits of interface design in general, and languages that don't have CSP style concurrency with first class select/channel and coroutines are a pain to write dynamic, server type code with. when you are used to thinking about implied satisfaction of an interface instead of explicit, wordy declarations that state that something implements an interface, means a lot less crap - but it's probably the one place in Go's design where maybe explicit would have been better, but for some time now most static analysis tools can trace interfaces to their concrete implementation easily enough.

anyhow. i'm sure that OpenAI and Google are loving it that most of their LLM customers are vibe coders working with the absolute worst shit... typescript/react and rust/C++. it's been patently obvious to me watching the LLM work that it's doing maybe as much as 2x as much thinking for react as svelte.

AI credits are a much too big part of my costs to not pay attention to how to mitigate this cost when i can.