Created
March 25, 2020 13:35
-
-
Save onpaws/92362b2cb99871666d3c4626e373bfd5 to your computer and use it in GitHub Desktop.
Why JavaScript?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Why JavaScript? | |
Main strengths: | |
* The ecosystem is pretty strong and constantly evolving. Lots of companies and individuals are putting a serious amount of work into making high-quality tooling and libraries. (Although with that also comes a lot of lower quality stuff and its sometimes hard to tell) | |
* The language isn't owned by any single company and is well specified | |
* TypeScript provides a powerful and flexible type system with advanced dependant-types like features. Lets you gradually evolve from a messy JS prototype to well-organized code with fairly strict type checking | |
* Fastest dynamic language. The performance is also quite comparable to statically typed GCed languages. (For example, you can probably get to 50%-90% of Java performance on most single-threaded workloads) | |
* wasm support in the runtime a promising escape hatch to the integration with other languages should that become needed. (Similarly not owned by a single company and well-specified) | |
* sharing code and types between client and server, including interfaces, validation and data models. | |
* particularly well suited to handling heterogeneous structured data due to how cheap it is to define new object types (even in typescript) | |
* Async-IO-first (in fact, async-only IO for the most part) | |
Main weaknesses: | |
* Poor standard library with an anemic set of classes, anemic set of implementable protocols/interfaces (more stuff like Symbol.asyncIterable needed) and lacking convenience functions. E.g. see https://api.dart.dev/stable/2.7.1/dart-async/Stream-class.ht... and compare with... well nothing in the language! The official node streams have a terrible API. | |
* Combining lack of both protocols and standard library leads to pretty bad userspace library fragmentation. (What is the go-to stream library?) | |
* Restricted data sharing between threads (only SharedArrayBuffer) makes it quite limited for multi-threaded problems. | |
* (mainly TypeScript) - Insufficient reflection capabilities | |
* Rigid (non-configurable) node_modules resolution algorithm accepted as standard limits flexibility when organizing projects | |
Mythical weaknesses that don't matter that much: | |
* Implicit conversions - largely irrelevant since TypeScript | |
* DOM/Browser related weirdness - often attributed to the language but actually problems with browser APIs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment