Jump to content

LiveScript (programming language)

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by 4.34.20.194 (talk) at 17:53, 18 October 2015 (Pipes: fixed code to reflect what it actually does (minor)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
LiveScript
Paradigmmulti-paradigm, functional, object-oriented
Designed byJeremy Ashkenas, Satoshi Murakami, George Zahariev
DeveloperJeremy Ashkenas, Satoshi Murakami, George Zahariev
First appeared2011; 14 years ago (2011)
Stable release
LiveScript 1.4.0 / 11 May 2015; 10 years ago (2015-05-11)[1]
Typing disciplinedynamic, weak, strong
OSCross-platform
LicenseMIT
Filename extensions.ls
Websitelivescript.net
Influenced by
JavaScript, Haskell, CoffeeScript, F#

LiveScript is a functional 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] Notably, LiveScript was briefly the name of JavaScript in 1990s.[3]

Syntax

LiveScript is an indirect descendant of and is partly compatible with Coffeescript.[4] The following is a fully Coffeescript-compatible hello-world example of LiveScript syntax.

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 dashed variable- 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 the first argument to the expression on the right of it.

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

Typing

By default, LiveScript shares the weak, dynamic typing of Coffee- and JavaScript. However, the LiveScript compiler provides optional strong typing through the --const flag.

num = 1
fun = (non-string) ->
  non-string = non-string.to-string!
fun num

While perfectly permissible by default, when the --const flag is used, the above will cause a compiler error of: [SyntaxError: redeclaration of constant "num" on line 4]. This happens because the --const option simply treats all values as if they were declared as constants, at compile time, without using the not widely supported const keyword in the output JavaScript.

References

  1. ^ LiveScript website http://livescript.net/blog/livescript-1.4.0-source-maps-more.html. Retrieved 20 June 2015. {{cite web}}: Missing or empty |title= (help)
  2. ^ LiveScript contributors page https://github.com/gkz/LiveScript/graphs/contributors. Retrieved 20 June 2015. {{cite web}}: Missing or empty |title= (help)
  3. ^ W3 Web Education Community Group https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript. Retrieved 20 June 2015. {{cite web}}: Missing or empty |title= (help)
  4. ^ http://livescript.net/
  5. ^ http://www.preludels.com/