Le 23/08/2013 19:38, J B a écrit :
So the defacto response for large scale JS development will always be: Use X?
Even if so, why would it be a big deal?

Just to clarify a point, I read interesting definitions of what "weak", "strong", "static" and "dynamic" typing means [1]. Not sure how they are grounded with more formal definitions. Anyway, according to this definition, JavaScript is dynamically strongly typed.

I imagine your question is then "why can't we have optional static typing in JS?". And I'm not entirely sure what the benefits would be for the entire language. Static typing has huge benefits at development time (early errors, errors more meaningful than "undefined is not a function"! Had a 5 week experience with TypeScript on a real-life project that'll ship soon. That made a difference). The downside of JS types is that JS engines will have to verify them and that adds to total runtime cost, especially load time, which we don't need to be slower than it is now (something about a 1000ms time to glass barrier [2]). Just to be clear, the main problem isn't JS engines ability to compile JS with optional static type, but more our practice to load too much code (that will have to be verified before running). Hopefully that trend will change, but the web isn't ready to add another static verification step I believe.

If the JS engine had knowledge of static types, *maybe* they could go faster (after the slower load time). But how much faster? Current JS engines go really fast after doing type inference when the code is type stable. The interesting part is that the instrumentation/JIT-compilation costs only for long-running code (and not all the code we've loaded! especially not the unused paths!!), but practice shows that the cost is very small compared to the gains it provides.

On a related note, I've recently been asked whether TypeScript compiled more efficient JS (cc'ing Luke Hoban to be sure I'm not spreading misinformation). My answer was that no, it doesn't by itself. TypeScript is very respectful of the input JS (and that's a feature!). However, the JS subset the TypeScript compiler encourages to write to has stable types and has a very strong chance to run faster in current engines.

An interesting approach to static typing is asm.js. The interesting part is that the statically compiled part is very localized (and not whole-language-scoped), so its cost is localized. Brendan suggests [3] that ahead of time compilation can only provide better performance. I wonder what's the cost of the static verification is and how much it hurts load time. I'm especially wondering whether this cost will not hurt performance too much when people will load lots of unnecessary asm.js code (cc'ing Dave Herman in case he has answers on that topic), which is obviously not measured by current benchmarks.

Anyway, whole-language static typing sounds like a bad idea and "use X" seems to be to good way forward. The compile-to-JS battle has just started. Let's be patient.

David

[1] http://coding.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
[2] https://www.youtube.com/watch?v=Il4swGfTOSM
[3] http://www.youtube.com/watch?feature=player_detailpage&v=O83-d0t0Ldw#t=797
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to