The State of Javascript
Scott Sauyet
An Overview of Javascript
Where we've been
We're we are now
Where we're going
Where We've Been
Javascript Early History in a Single Slide
- Created in 1995 to offer a light-weight scripting language in Netscape 2.0
- The inventor was inspired by two very different languages, Self and Scheme
- Copied feature-for-feature, bug-for-bug by Microsoft
- Standardized before the kinks were worked out, named ECMAScript
- After two minor revisions, stood still for 10 years
- Looked down on for most of its existence as a toy language suitable only for hobbyists
- Got another look when Google started using it for impressive tools like GMail and Google Maps
- Gained more attention when someone coined "AJAX"
- Got some real respect when a respected Yahoo engineer started promoting it
Where We are Now
There are four major themes right now:
- The explosive growth of mobile
- The rapid adoption of server-side Javascript
- The number of tools using Javascript as a compilation target
- The huge variety of libraries being released for developing with Javascript
Javascript on the Go
Javascript on more devices than any other computing runtime... and has been for many years. It's only getting
more so with the growth of mobile devices.
Flash is disappearing. Applets are dead. JavaFX never got any traction. Silverlight's been
abandoned. There simply are no competitors standing except for the native device environments.
Not Just for The Client Anymore
Server-side Javascript has been around for years
- Bundled with early Netscape as a server component
- Included as part of .NET
- Rhino Java implementation
But none of that mattered much. Until...
Node.js
Created in 2009, based on the V8 Javscript engine behind Google Chrome, this has rapidly become a powerful
force in server-side development. Node features:
- non-blocking IO
- simple package and includes mechanism (no DLL/JAR hell)
- extremely high concurrency
- a very active community
Compiling to Javascript
A list maintained by altJS shows new languages that can be converted to JS
- Caffeine
- CoffeeScript
- CoffeeScript
- Coco
- Contracts.coffee
- GorillaScript
- Ham-Script
- heap.coffee
- IcedCoffeeScript
- Jack
- JMacro
- JS11
- Kaffeine
- LittleSmallscript
- LispyScript
- LiveScript
- LLJS
- Moescript
- Move
- pogoscript
- Sibilant
- ToffeeScript
- Parsec
- Uberscript
- Zedscript
Compiling to Javascript
The list of languages ported from existing languages is much longer
Ruby
- 8ball
- ColdRuby
- HotRuby
- Opal
- rb2js
- Red
- Quby
Ruby-related Libraries
Python
- Brython
- PYXC-PJ
- Pyjaco
- Pyjamas
- Pyjs
- PyCow
- PyvaScript
- RapydScript
- Skulpt
Perl
Java and JVM
- BicaVM
- Ceylon
- Doppio
- GrooScript
- GWT
- j2js
- Java2Script
- Kotlin
- Processing
- STJS
Scala
C#, F#, .NET related languages
- Apps in Motion
- Blade
- FunScript
- jsc
- JSIL
- NemerleWeb
- Pit
- Prefix
- Saltarelle
- SharpKit
- Script#
- WebSharper
Compiling to Javascript
Ported Languages (continued)
Lisp, Clojure & Scheme
- BiwaScheme
- Chlorinejs
- ClojureScript
- clojurejs
- EdgeLisp
- Fargo
- LispScript
- Moby
- nconc
- Oppo
- Outlet
- Parenscript
- Ralph
- scheme2js
- Scriptjure
- Spock
- Whalesong
OCaml/ML
- Ocamljs
- O'Browser
- Js_of_ocaml
- SMLtoJs
Haskell
- Fay
- ghcjs
- Haste
- jshaskell
- JSHC
- UHC
- YHC
Smalltalk
- Amber
- Clamato
- Lively Kernel
- Silver Smalltalk
C/C++
- Emscripten
- mala
- Mandreel
- Clue
BASIC
- NS Basic/App Studio
- qb.js
Pascal
- Smart Mobile Studio
- Elevate Web Builder
Go
Compiling to Javascript
Those lists are still only part of the story. altjs lists around 100 other
tools for
- Javascript Enhancements
- Security Enforcement
- Static Typing
- Synchronous to Asyncrhronous (CPS)
- Compiler Tools such as
- Parsers and Extenstions
- Optimizers
- Parser Generators
- Abstract Syntax Tree (AST) creators/manipulators
- Miscellaneous Other Related Projects
Library Development
There has been a recent change in how libraries are developed.
2000 - 2008: General-purpose libraries
- jQuery, Dojo, MooTools, YUI, etc
- Very large libraries
- Hard to get right (browsers are finicky)
- Slow to change
2009 - present: Smaller, more focused libraries
- For every conceivable purpose, but each one focused
- Nimble
- Easily interoperable on the server
- (Getting there on the client)
This has allowed for a huge number of alternative approaches, and a great deal of experimentation.
Where we're Headed
- Several
different
Javascript microcontrollers now available
- Several Javascript subsets for high-performance programming
- No slow-down in the performance improvements we've been seeing
- Isomorphic Javascript: same exact code client/server
- Multiple paradigms for programming: OO, functional, possibly even logic programming in one language
- Who knows?
←
→
/
#