Hacker News new | ask | show | jobs
by protomyth 4009 days ago
Here the example on the site:

  func main(): int {
      mut i := 0;

      for i < 5 {
          printf("i: %d\n", i);
          i = i + 1;
      }

      return 0;
  }
I'm really curious about 2 things: that for seems to really be a while. Why := in the declare and = in the assignment?
2 comments

Perhaps the author was inspired by the Go language, as those are both Go-isms: Go's only loop is a for loop, and := tells the compiler to infer the variable type when initializing.

In fact, this snippet is only a few deviations away from being valid Go code.

Their compiler is written in Go.

See https://github.com/ark-lang/ark

You also need to remember that at one point Go's compiler was written in C, as with rust. It's all apart of the language evolution.
I'm not blaming them, just saying there's evidence the authors are quite familiar with Go. =P
:= isn't really stating to infer the type (although this happens) but a way to differentiate variable initialization with assignment. When using := the variable is created while = is just a regular assignment. Having these as separate operators prevents errors like this:

    foo := 3
    fooo = 4
The second line is invalid because fooo does not exist.
Indeed it is written in Go, after all.
Hi, for is basically a while loop yes. We haven't implemented ranges yet, so this is the example we chose since it works, and it's fairly concise to fit on the website.

I chose `:=` and `=` mostly because of personal preference.