8 ms·
G# – A modern .NET language with Go, Kotlin, and Swift ergonomics
- ctenb 3mo agoLooking at the code and the commit log, this is a large pile of slop
- HeavyStorm 3mo agoLooks nice, congratulations. I feel like we've done full circle. Languages are back to being (mostly) procedural. I'm not sure I like it, but it seems that this is what people prefer. Personally, I'd rather see something like dependant types on a dotnet language. An addition, not just a simplification.
- demosthanos 3mo ago> I feel like we've done full circle. Languages are back to being (mostly) procedural. I'm not sure I like it, but it seems that this is what people prefer. Is this an actual shift, or is this just what happens when LLMs make it possible for anyone to build a language quickly? This one feels less like someone thought carefully about what semantics they wanted to have and more like someone without a lot of familiarity with the design space of programming languages decided to build one that had all their favorite features from the languages that they already know: > G# brings Go-, Kotlin-, and Swift-style ergonomics — packages, func, data class, nullable handling with if let, structured concurrency with scope — to the .NET runtime. Nothing wrong with that at all, I love to see the increased interest in language design, but I wouldn't read a shift in preferences into this wave of PLs. It's a shift in who is writing PLs, not a shift in preferences.
- chews 3mo agodupe: https://news.ycombinator.com/item?id=48876506 https://news.ycombinator.com/item?id=48876506
- gnabgib 3mo agoYou've been tricked by the SCP, this is the dupe - check the IDs (it's older than the one you linked to.. although there's also the one 31 days ago /w 9 points/2 comments from the OP)
- onlyrealcuzzo 3mo agoJust trying to offer some help here, not an attack: ``` G# brings Go-, Kotlin-, and Swift-style ergonomics — packages, func, data class, nullable handling with if let, structured concurrency with scope — to the .NET runtime. Source compiles directly to managed assemblies. ``` This is a decent description - but as someone also building a language in a similar space - who isn't super familiar with the .NET runtime... My first question is... Why not C#? I'm by no means a C# expert, but I thought most of this was supposed to be in C#. C# is not terribly un-ergonomic, and Go is simple, but not really ergonomic except for Goroutines... `packages` and `func` being the first two selling points is alarming. Sure, people probably prefer `fn foo() -> Dog` over `Dog foo()`. No one's picking a language for that. C# has namespaces... C# has `record` and `record struct`. C# has not-ideal nil handling, but it still has it. I'm not convinced `if let` is better enough to be a selling point - a lot of people don't like that! Your main selling point seems like `scope` and your concurrency model vs C#, but C#'s is not exactly terrible... Rich Hickey has a joke about semi-colons in language design, and your main pitch seems to sell yourself short. Btw, I think your GitHub page does your language a lot better justice.
- Syzygies 3mo ago> Rich Hickey has a joke about semi-colons in language design I didn't see semicolons, but I saw plenty of {} braces, and I can't explain why they're needed. https://github.com/Syzygies/Compare https://github.com/Syzygies/Compare "I'm already quite sure how I will die: I'll read another article on Hacker News about a new programming language where I see nothing new, and I'll read that they included {}; to make C programmers comfortable. I'll have a massive stroke."
- AdieuToLogic 3mo ago> I didn't see semicolons, but I saw plenty of {} braces, and I can't explain why they're needed. "Curly braces" (a.k.a. "{}") make lexicographical scope simpler to manage for lexers and parsers. Alternate grammars increase compiler complexity, excluding trivial token replacement. As for semicolons, they are only a linguistic requirement for supporting multiple executable statements on the same source-code line.
- Kuyawa 3mo agoI like it. I consider myself picky with regards to weird syntax in new languages and this is terse and very readable. Approved!
- achr2 3mo agoWhat is it bringing from those languages? The FAQ reads like it is just altered syntax for C#, no difference in semantics or function.
- gwbas1c 3mo agoHow is this different than C#? What new concepts does this bring that C# doesn't? 20 years ago there was some momentum behind Visual Basic .Net; but the language was so similar to C# that it just wasn't worth using. There was a joke that .Net was a "skinnable language." BTW, there's a whole nitpicky/semantic argument that C# isn't null safe because of the null forgiving operator. That will probably come into play with G# if the null forgiving operator can be used from C# to pass null into G# code that doesn't expect it.
- AdieuToLogic 3mo ago> 20 years ago there was some momentum behind Visual Basic .Net; but the language was so similar to C# that it just wasn't worth using. IronPython[0] and IronRuby[1] would like a word... Largely so they could be remembered. 0 - https://en.wikipedia.org/wiki/IronPython https://en.wikipedia.org/wiki/IronPython 1 - https://en.wikipedia.org/wiki/IronRuby https://en.wikipedia.org/wiki/IronRuby
- fulafel 3mo agoAnd F# - though that's alive and well.
- userbinator 3mo agoThere was a joke that .Net was a "skinnable language." I remember the MS documentation had sample code in all the variants of .NET languages they created (C#, F#, VB.NET), and of course there were decompilers that let you choose which one to target, with many other translation tools available between them.
- ygra 3mo agoThey still do.
- Foobar8568 3mo agoThe momentum behind VB.NET was mainly because most enterprises using VB6 assumed it was the natural replacement.
- truncate 3mo agoI wish README is clear whether they are using AI or not, and if so what the guidelines are. Not that anything wrong with using it, but given anyone with $$$ for tokens can do it, its nice to know what their process is etc etc. Gives me more confidence that its worth checking out.
- afavour 3mo agoAgreed... the commit log looks very much AI generated to me. And the project was started on May 22 so it's just under two months old. Not that either of these things is disqualifying but AI really has make it difficult to know how established a project actually is.
- Bnjoroge 3mo agoIt’s a pretty safe assumption that most recent projects use AI in some capacity. Models have gotten pretty good
- hbcdbff 3mo agoIt’s slop
- ed_elliott_asc 3mo agoCould you expand on that?
- derdi 3mo agoI don't know if they can expand, but I did last time this was posted: https://news.ycombinator.com/item?id=48884619 https://news.ycombinator.com/item?id=48884619
- IshKebab 3mo agoThis should be a standard section in READMEs now. I've started adding it to mine. Even if you don't use AI, please add a section saying that! It can be one sentence. # Use of AI No AI was used. / This is entirely written by Claude and I didn't even read the code. / ...
- Areading314 3mo agoNew programming languages? Doesn't seem needed anymore
- stevekemp 3mo agoThings like Zig, D, Odin, Rust, etc, are outliers. Most new programming languages are used only by their creators. It's hard for a new language to find its feet, and make a name for itself. Unless its created by a big company with a lot of clout and internal users. (e.g. Rust, Go). People keep creating new languages because it's educational, interesting, and sometimes even fun. Doesn't mean they'll get used, and it doesn't mean they're pointless. Of course you learn very little if you make an LLM write the damn thing. But that's a different story.
- phplovesong 3mo agoThere is gleam that is popular, and not backed by a huge company. Then there is also lisette for Go, thats very similar but targets Go instead of the beam. New languages have space, and its just stupid "to stick to the only one i ever tried", then you just end like a PHP dev who just refuses to learn anything other than PHP.
- stevekemp 3mo agoFor sure, learning new languages is helpful even if you don't use them. But that said there's also a significant difference between playing with new/toy languages for fun, and using them in production. Trying to hire Haskal programmers to keep your product alive will be significantly more effort than finding a C, Go, Java, Rust, or similar programmer instead. I like languages, I explore lots of them, but at work I stick to "obvious" choices because colleagues use them, know them, and it fits into the shared infrastrcture. It's okay to introduce new things, but it requires buy-in, and persuasion. Not just one dev saying "That new CLI we wanted? I started in Racket/Odin/Wren/Lua/whatever."
- seabrookmx 3mo agoHere I am wanting the opposite. I want C# compiled into a static binary like with the GoLang toolchain! Maybe .NET AOT will get there one day..
- sedatk 3mo agoWhat's missing in .NET AOT?
- seabrookmx 3mo agoLots of replies to this comment but a simple answer from my side: compatibility with ASP.NET attribute routing.
- dotschnet 3mo agoThat’s a dishonest question, take any code base >10000 slices, it will not work with aot ootb. Read the docs of what’s missing, if you are honestly interested in what’s missing. https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/fixing-warnings https://learn.microsoft.com/en-us/dotnet/core/deploying/nati... Reflection, is one thing. Of course some runtime stuff are missing, but the problem is that no one is using source generators before trying out aot, so as soon you try aot you just meet a wall of compilation errors. Most people just want to be able parse a json file without jumping through hoops. Bad DX
- littlecranky67 3mo agoIt is not so dishonest, and you explicity added the small "ootb" to your statement. That is the point, out-of-the-box it might not work and you will have to do some refactorings, but if you start a new project with AoT you will keep it in mind.
- vadersb 3mo agoThat heavily depends on the use case. Game developers that use C# adopt NativeAOT with zero friction, it's just a natural fit
- 3mo ago
- jdw64 3mo agoLooks pretty good to me.
- borland 3mo agoYuck. I like both Go and C# a lot, and use them both professionally. In my experience the strengths of Go are mostly - Deployability via single-file static binaries - Simple syntax that anyone can learn (no exceptions, no classes or inheritance) - Wicked fast compile times And the strengths of C# are - Powerful language with null-safety and lots of syntax sugar - Runtime-level coroutines so you don't need `async/await` everywhere G# seems like it has the _worst_ of both worlds, not the best. It's fun to write compilers, and good on them for doing it, but no thank you for real use
- rmuratov 3mo agoC# has single-file static binaries
- littlecranky67 3mo agoExactly. To add to this, is called ahead-of-time compilation, and bundles required parts of the .net runtime into the single-binary. Deployment targets thus don't need to ship any .net environment or libraries.
- fabian2k 3mo agoAOT is entirely independent of single file binaries. And self-contained binaries that run without the framework installed are again a separate concept. There are some dependencies between these, but they are not the same thing. AOT is not all that useful yet for many applications as important libraries still don't support it. So more something for things like CLI tools with a small scope. It's not quite the same as with Go, the binaries get large if you can't trim them. But creating single-file self-contained executables is very much usable and works well otherwise.
- littlecranky67 3mo ago> AOT is entirely independent of single file binaries. splitting hairs, but its is not independent. AoT is a required pre-requisite for single-binary creation. You can't create single-binaries with JIT. And that is the big hurdle, lot of libraries do not support AoT and that is the blocker to create single-file binary. Once you have the AoT figured out, the single-binary creation is easy.
- aryehof 3mo agoDoes this support new programming abstractions, or just another remix of existing ones?
- captainbland 3mo agoI'm less familiar with Swift but from a design point of view Go and Kotlin have really different ergonomics. Kotlin leans in really hard to creating DSLs etc. whereas Go avoids all that stuff like the plague. To me this makes the tag line a little confusing, like what does this imply for the design of this language?
- Kitajima 3mo agoI lived long enough to see a programming language called G#. What a great era.
- andyferris 3mo agoI was hoping from the tagline it would have sum types (rust-like payloads on enums, like Swift).
- hbcdbff 3mo ago“Width-bearing”, wow, Claude really loves that “bearing” suffix doesn’t he
- vivzkestrel 3mo ago- stupid question: how do you make a programming language like this from scratch? - what is the thought process that goes into making a programming language - what is this field of study or discipline called? - why do we have so many programming languages? what purpose do they intend to solve and how do we know what purpose a programming language was made for? - for example, why was swift made if objective c exists and why was objective c made if c++ exists?
- tinco 3mo agoWhen I was in university the course was called compiler construction. Making a language like G# is very simple and about the level that the final project of the course would be if the team was working together really well and went for maximum bonus points. We have so many programming languages because it's a fun and relatively easy thing to start, and lots of people have differing opinions of how it should be done. Also making a programming language seems like a difficult thing from the outside so it has a certain allure. Swift exists because objective c has archaic language design that modern developers reject. Objective C exists because as far as I know at the time smalltalk style object oriented programming was hip and C++ made the wrong decisions in their eyes. It could also be that C++ wasn't popular enough yet at that point for Apple to commit to it. In that period basically all major operating systems went different ways. The Unix derivatives went all in on plain C, Microsoft went C++ and Apple objective c, though I think OSX itself is plain C for the most part.
- Scaevolus 3mo ago- it's easy to prompt an LLM to do it for you, especially if you're targeting a pre-existing runtime like CLR or transpiling to another language. previously you'd have to grind out the parser and compiler for a new language, but a lot of that work is mechanical - "I want a language that works a little differently" - programming language theory (PLT), generally - languages are tools. the authors should explain what their languages are best suited for - Obj C and C++ were both developed around the same time as extensions of C. Obj C was focused on message passing and Smalltalk's object system, while C++ was focused on adding as many abstractions as possible to C. Neither language has good support for avoiding null pointer dereferences, one of the primary things Swift addresses with its richer type system and Optionals.
- raphinou 3mo agoIs the familiar syntax so important? I learnt f# being used to algol syntax, and the syntax was not a hurdle.
- peter_retief 3mo agoI love Go but am not a fan of .NET Have to ask what is the point of .NET is it even needed being the navel gazing MS fraternity?
- tuwtuwtuwtuw 3mo agoC# is a great programming language. It's cross platform, and I personally find it fun and efficient to use. According to Tiobe index and stack overflow developer survey, it's also a lot more used than Go, so there's that.
- peter_retief 3mo agoYes even I have used C# My anti MS is a reflex from many years of torment!
- mapcars 3mo agoGo, C# and .Net? And here I am wishing for typescript-like language for backend systems.
- psd1 3mo agoF# is nice, i like it.
- mapcars 3mo agoInteresting, I have been skeptical about .net as a platform, is it really open and doesn't lock you with microsoft in any way?
- orphea 3mo ago.NET is Open Source (MIT) but Microsoft is a major - it's probably safe to say the largest - contributor. Maybe similar to OpenJDK and Oracle?
- WorldMaker 3mo agoPotentially viewable as better than OpenJDK and Oracle (and OracleJDK) from what I've seen. A lot of .NET governance moved to the Dotnet Foundation which is built along the lines of things like the Linux Foundation. Microsoft is the major contributor to .NET and a major sponsor of the Dotnet Foundation, but most of their contributions are still flow through the Foundation legal/governance structure and subject to the same governance as anyone else today. .NET is almost entirely planned and developed openly on GitHub including things like meeting minutes for all in person meetings.
- psd1 3mo agoYou can infer direction from observable actions, and Microsoft is visibly going for dev mindshare with e.g. Typescript and VS Code. They recognise that they lost the battle for the dev desktop and the server OS, hence the pivot to xplat. You can code in strictly vim or JetBrains with no friction, and run on mono with no friction in the happy case. It is possible for the SDK to be the only Microsoft product in your stack. I don't see a way for Microsoft to return to funnelling users to their own ecosystem via dev-ex, and they seem to recognise that.
- YuechenLi 3mo agoSo... the verbosity of Go without the compile speed of Go? Go is not a language I would associate with ergonomics, and this doesn't even have most of modern C#'s best features: does xUnit.NET work? Does immutable records work? Do collection expressions work? Does LINQ work? Calling a language with `let` instead of `const` and async/await and iterators and classes "Go" is plain just incorrect. This G# is more similar to TypeScript than Go. The ONE feature that C# really needs is payload enums with `match` instead of C#'s current pattern matching with `switch` anyways, and Rust is more similar to Go anyways so why not copy from Rust instead? I'm honestly baffled.
- orphea 3mo agomodern C#'s best features: does xUnit.NET work? Does immutable records work? Do collection expressions work? Does LINQ work? xUnit and LINQ are not C# features, why should they not work in another .NET language?
- tcfhgj 3mo agoMicro$oft's wiki: > Language-Integrated Query (LINQ) is the name for a set of technologies based on the integration of query capabilities directly into the C# language.
- YoshiRulz 3mo agoGenerally when people say LINQ they're referring to the IEnumerable/IQueryable APIs in the BCL, not to C#'s little-used query syntax.
- deleted 3mo ago[deleted]
- torginus 3mo agoI don't find Go especially verbose - in fact, due to the economy of syntax, Go code without the usual syntax sugar features ends up similar in length to other curly brace languages. I tested this with C# and Typescript, where I migrated projects from these languages to Go - the overall volume of code stayed roughly the same.
- cmoski 3mo agofor i in 1 ... 5 { sum = sum + i } Means "for 1 to 4". Kill me now.
- bjoli 3mo agoif the language specifies all ranges to be the same this matters very little. if a ranges are inclusive, you get used to it. if it is arbitrary it is awful.
- bjoli 3mo agowhy doesn't anyone just jump the gun and introduce proper parallelism primitives? SML/NJ got it right in 1991. ocaml5.0 has domains and effect handlers. why do people still accept CSP? It is simple to do some things in it, bit please just give me concurrentML with "simple" channels for that kind of work , and proper channels for any kind of hard stuff. I have had to write things in go that took me days to get straight that would have been 20 trivial lines in any concurrentML implementation.