@clacke I think they are good arguments, if static typing takes 4 hours and boils the oceans to do the same work a dynamic program can do in seconds, then you should prefer dynamic.
The fastest static language I know is Julia, and it has a 4-60s startup time depending on what you load, even in the latest versions which are down from 120s startups by not loading as much; it's not any faster at the static compiling.
Julia's much faster than Python at runtime, but always loses from cold start.
@clacke Those are pre-compiling, and the static ones (C is not static!) take vastly longer to compile. Swift (very static) takes exponential time longer than Objective-C (very dynamic); a 100-class project in Obj-C can compile in 10s, while the same in Swift will take minutes to hours.
Do a clean build & run to compare languages, not just runtime speed.
@clacke C compilers have warnings as an option: -Wall (or -Wfoo for specific warnings). If you don't have that, it behaves exactly like a dynamic language, you can pass anything to anything. And even with -Wall, you can cast anything to void and pass it wherever you want.
C's also weakly-typed, in that objects don't know anything about themselves, so you can't interrogate an int or string to see what it is.
- "wasting build time" is a shit argument sorry. most dynamic languages just waste that at runtime, exploding spectacularly if they hit an error because there isn't another way to handle things.
- no one in their right mind would say it's correct if it passes the type checker. static typing just removes type mismatch errors, not every error. with good static typing you can _prove_ that you won't get type errors though. if you then define good types, you can prevent many logic errors, not everything of course. 3/4 of programming is to get the data structures right.
- if the only thing you have is testing, everything looks like a testcase.
- i haven't used it extensively, but ocaml doesn't have shit compile times, there is a REPL and it is statically typed.