LiveScript
Paradigm | multi-paradigm, functional, object-oriented |
---|---|
Designed by | Jeremy Ashkenas, Satoshi Murakami, George Zahariev |
Developer | Jeremy Ashkenas, Satoshi Murakami, George Zahariev |
First appeared | 2011 |
Stable release | LiveScript 1.6.1
/ 14 July 2020[1] |
Typing discipline | dynamic, weak |
OS | Cross-platform |
License | MIT |
Filename extensions | .ls |
Website | livescript |
Influenced by | |
JavaScript, Haskell, CoffeeScript, F# |
LiveScript is a functional programming language that compiles to JavaScript. It was created by Jeremy Ashkenas—the creator of CoffeeScript—along with Satoshi Muramaki, George Zahariev, and many others.[2] Not to be confused with JavaScript (for a brief period in the 1990s, LiveScript was the name of JavaScript).[3]
Syntax
LiveScript is an indirect descendant of CoffeeScript.[4] The following hello world program is written in LiveScript, but is also compatible with Coffeescript:
hello = -> console.log 'hello, world!'
While calling a function can be done with empty parens, hello()
, LiveScript treats the exclamation mark as a single-character shorthand for function calls with zero arguments: hello!
LiveScript introduces a number of other incompatible idioms:
Name mangling
At compile time, the LiveScript parser implicitly converts kebab case (dashed variables and function names) to camelcase.
hello-world = -> console.log 'Hello, World!'
With this definition, both the following calls are valid. However, calling using the same dashed syntax is recommended.
hello-world! helloWorld!
This does not preclude developers from using camelcase explicitly or using snakecase. Dashed naming is however, common in idiomatic LiveScript[5]
Pipes
Like a number of other functional programming languages such as F# and Elixir, LiveScript supports the pipe operator, |>
which passes the result of the expression on the left of the operator as an argument to the expression on the right of it. Note that in F# the argument passed is the last argument, while in Elixir it is the first.
"hello!" |> capitalize |> console.log # > Hello!
Operators as functions
When parenthesized, operators such as not
or +
can be included in pipelines or called as if they were functions.
111 |> (+) 222 # > 333 (+) 1 2 # > 3
References
- ↑ "LiveScript Releases". https://github.com/gkz/LiveScript/tags.
- ↑ "LiveScript contributors page". https://github.com/gkz/LiveScript/graphs/contributors.
- ↑ "W3 Web Education Community Group". https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript.
- ↑ "LiveScript - a language which compiles to JavaScript". http://livescript.net/.
- ↑ "prelude.ls - a functionally oriented utility library in LiveScript". http://www.preludels.com/.
External links