4 ms·
In Nim, you can use the type `auto` for proc parameters & return types: http://nim-lang.org/docs/manual.html#types-auto-type http://nim-lang.org/docs/manual.htm
by jboy 11y ago
In Nim, you can use the type `auto` for proc parameters & return types: http://nim-lang.org/docs/manual.html#types-auto-type http://nim-lang.org/docs/manual.html#types-auto-type
When you use the `auto` type, the compiler will infer the type automatically from the context of the proc invocation or from the proc body. The inferred types can be different for the different parameters. So you can have a proc declaration that looks like:
proc inferTypes(a, b: auto) # `a` & `b` can accept different argument types
Within a proc, you can also create bindings & variables without needing to specify a type:
let iBinding = 1
var fVariable = 1.2
The following typeless code will compile & run without any complaints or problems:
import strutils # `%` operator
proc inferTypes(a, b: auto) =
echo "$1 $2" % [$a, $b]
proc main() =
inferTypes(25, 30)
inferTypes(1, "hello")
inferTypes(4.4, 7)
inferTypes("cat", 9.5)
main()
When the above code is compiled & run, it will produce the following output:
25 30
1 hello
4.4 7
cat 9.5
- jerf 11y agoHow does Nim hold up if you put "auto" everywhere you possibly can in a non-trivial program? (Tone note: Straight question. I have no idea and am honestly interested.) Context: Type inference is hard. Hindley-Milner is famous for making it possible, but the farther you stray from it, the harder it gets to do with no human-added annotations. I hope the authors of "Big Bang" are intimately familiar with the issues involved or they're going to be in trouble. If they aren't they ought to correct that. I'd also suggest that the Haskell community would be happy to share their experiences on that front if they are asked, and unless the authors are already experts, they really really should ask. Only good things can come from asking.
- jboy 11y agoI don't know, I'm sorry. (The majority of my professional & personal programming has been along the Shell-Python-C-C++ axis. My preference for static types increases approximately logarithmically with the size of the program; historically, I preferred Python for most quick scripting needs, but for larger programs, I was glad of static types, so I would switch to C++.) Now, Nim has replaced C++ for me completely (and also expanded downwards into the upper end of Python's territory). The work I'm currently doing in Nim is well into the "I prefer static types" area of the spectrum. Maybe some of the Nim core devs would have more experience with this situation. IIRC, several of the Nim core devs are familiar with Haskell, and consider it to be one of the reference languages guiding aspects of the Nim language design.
- ilaksh 11y agoYou wouldn't really do that. But Nim can do basic type inference. So to initialize string and numeric variables, you don't need to explicitly declare the type. https://nim-by-example.github.io/variables/ https://nim-by-example.github.io/variables/ The type inference extends to a few other situations I believe. Essentially it is a typed language, but it doesn't always make you declare things when they are obvious.