Hacker Newsnew | past | comments | ask | show | jobs | submit | alain_gilbert's commentslogin

reminds me of an project I made many years ago to manage dependencies in between repositories. So if project A was waiting for a fix in project B to be in production, you could draw a line between the two commits (from project A to project B) and get notified when the commit in project B gets into the "production" branch. And then merge and deploy your feature branch from project A.


I worked on a toy programming language (that compile down to golang), which is a fork of the go lexer/parser, but it changes how functions can only return one value allowing the use of Result[T]/Option[T] and error propagation operators `!` and `?`.

It has enums (sum type), tuple, built-in Set[T], and good Iterator methods. It has very nice type inferred lambda function (heavily inspired by the swift syntax)... lots of good stuff!

https://github.com/alaingilbert/agl


@tinfoilhatter if that's the example of an `hostile and abrasive member of the Nim community` looks to me like the nim community is doing just fine.


I guess accusing someone of being someone they are not, then accusing them of lying, then demanding they dig up old forum posts for you to prove a point that other individuals have echoed, isn't considered being hostile or abrasive to you?

By all means, believe whatever you want regarding the health of the Nim community. Just don't expect me to share your sentiments.


> ...and views he expressed to me regarding climate change...

Is that for real? I bet I can find some chocolate chip cookie recipe that the Go team would disagree with me. I ain't ever using Go again.


> Even after reading the article, it's not clear why that particular expression is so egregiously poor.

I'm glad I'm not the only one wondering why this is not instant to type check.


I like how he kept "tabs" (and display it as 9 spaces) to make it as ugly as possible for the bad example, then proceed to use 4 spaces for the other examples.


I suspect this is substacks default styling. It actually doesn’t set the tab-size which defaults to 8. However there seems to be some funky font-rendering going on so it adds an extra half (or maybe three-quarters) of a space per tab-character.

You can see this your self if you edit the markup in your browser’s inspector and add `contenteditable` attribute to the surrounding <pre>, then navigate down a line... it will jump forward just by slightly less then a column per indent level.


Tabs are the recommended indentation method for Go code. It is interesting that they switched after the first example, though.


I'm well aware of it. But I don't think I have ever seen an editor/website which would display it as 9 spaces. Github for example default to 4 spaces width.


Yes, this is very weird. But Go Playground[1] has always been using 8 spaces per tab for some reason. I always found that very jarring, particularly where almost every other editor or documentation has settled on 4 spaces per tab.

[1] https://go.dev/play/


Seems like it got fixed just now. Thanks for doing it. It looks much better now :)


> Honestly, who cares about the difference between 1s vs 100ms vs 10ms for a build though?

I definitely do. Not necessarily because of the 10ms vs 1s. But because of the later stage when it becomes 600ms vs 60s.


> But because of the later stage when it becomes 600ms vs 60s.

What later stage though, as I said I worked with big code bases on old hardware without issues.

I'm simply not convinced that there exist a situation where incremental rebuild of the crate you're working on is going to take 60s, at all, especially if you're using hardware from this decade.


I must be doing something wrong because incremental builds regularly take 30-60 seconds for me. Much more if I add a dependency. And I try to keep my crates small.


As a sibling comment points out, it's likely to be mostly link time, not compilation time.

The most recent Rust version ships with `lld` so it shouldn't be the case anymore (afaik `lld` is a bit slower than the `mold` linker, but it's close, much closer than the system linker that was previously being used by default).


PSA: try https://github.com/rui314/mold

(Not affiliated with the project. Just switched to it and never looked back.)


I have a fairly small go project (100k loc) and it takes ~30sec to build.

I'd be thrilled to have it build in 300ms.

(Using a macbook pro 2019)


That's strange. Humongous k8s Go projects (>500k LOC) build in a third of that time. Do you have lots of deps in your `go.mod` ? Is the project abusing codegen ?


61 dependencies, no codegen. Nothing special really.


On a Macbook M2 Pro, on a project with loads of services, 210k loc, a full rebuild takes 70 seconds. Incremental takes 36s. For one service, full rebuild in 16s and incremental 0.6s. It's not blazing fast but considering the scale of the project, it's not that bad, especially since I rarely rebuild every service at the same time.


Consider upgrading your hardware if/when you get a chance to (obviously this is expensive). My builds (Rust not Go, but it might well be similar?) got 10x faster when I upgraded from a 2015 MBP to an M1. I suspect 2019 to M4 might be similar.


> I have a fairly small go project (100k loc) and it takes ~30sec to build.

Wait, aren't Go builds supposed to be fast?


Are you using CGo? C compilation slowness doesn't count.


Apparently Bevy doesn't need that big tutorial on how to customise Rust toolchains for usable builds then.


Come on.

There's no “big tutorial” though. There's a section about compilation time performance[1] but it's arguably not “big”, and the most impactful parts of it is about linking time, not compilation time. And half of the section is now obsolete since rust uses `lld` by default.

[1] https://bevy.org/learn/quick-start/getting-started/setup/#en...


Only if you happen to be on a platform where lld is supported.


Which platform does that description excludes?

Edit: oh I get it you probably meant “where lld is set as default ” which is currently Linux only.

Lld is supported by the other platforms though, so you can just copy-paste the three lines of configuration given on the Bevy page and call it a day.


I made winsweeper, which will move the mine if there is no safe tile left for you to discover.

https://github.com/alaingilbert/winsweeper


For case like this, I'd say your text editor should definitely just be able to tell you right away that this variable is a "string" when you mouse over it.


It shouldn't require a fancy forward-lookup-capable editor / language-server to show type. That is the point I am trying to make

var/declare x;

25 lines later

call f(x); // ** Reader has no idea what x is ... even though compiler has **

25 lines later

if (....)

     x = "world" // infer type as string - this is bad


Or if he was to use any kind of decent text editor, he could also just place his mouse over the variable and see the type it has.

Then comes the hard part "where is it defined"... he could even press "command" and then click on it.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: