I have the following requirements
1. I need to work with complex data, so I need easy data transformation constructs (map, filter, lambdas etc.)
2. I need strongly statically typed language, as in my experience they are easier to debug, read and maintain
3. Binary compilation<p>I have worked with Go, Python, Scala and Kotlin, and seems now all of them fail somewhere.<p>Scala and Kotlin don't compile to Binary and my team doesn't want to maintain JVM dependency<p>Python is dynamically typed<p>Is C++ or any other language viable?
Have you tried Typed Racket <a href="https://docs.racket-lang.org/ts-guide/quick.html" rel="nofollow">https://docs.racket-lang.org/ts-guide/quick.html</a> ?<p>It's JIT-compiled, but it's doesn't use the JVM. And you can create an executable of your program if you wish.<p>It's generally faster than Python but not as fast as C. YMMV. <a href="https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/racket.html" rel="nofollow">https://benchmarksgame-team.pages.debian.net/benchmarksgame/...</a> The comparison use the (Untyped) Racket instead of Typed Racket. Typed Racket usually has a longer compilation time but a faster run time, because it has more optimizations. YMMV.
If the reason for static typing is debugging, then what matter is ease of debugging, not static typing. If the reason for binary compilation is speed and/or easy deployment, then what you need is speed and/or easy deployment not binary compilation. They smell like XY problems. [1] To the degree they are XY Problems, Erlang is worth looking into. Pattern matching against variable input is what it does with decades of real world business critical deployment at vast scale. It doesn't look like other languages because it isn't. Good luck.<p>[1]: <a href="https://en.wikipedia.org/wiki/XY_problem" rel="nofollow">https://en.wikipedia.org/wiki/XY_problem</a>