The Big Bang project aims to create a typed language with the feel of scripting
pl.cs.jhu.edu
pl.cs.jhu.edu
If you haven't checked out Julia yet, it's a beautiful language. There's a reason why Graydon (the guy who made the very early versions of Rust) likens it to a Goldilocks language [2].
[1] https://stackoverflow.com/questions/28078089/is-julia-dynami...
Edit: (Disclaimer, I work on big bang)
(Disclaimer I'm working on big bang, so I'm a bit biased)
I don't think Go achieves the look and feel of working with Python and the like.
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.5Context: 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.
(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.
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.