CoffeeScript – język programowania transpilowany do JavaScriptu. CoffeeScript dodaje lukier składniowy zainspirowany przez Ruby’ego i Pythona, aby zwiększyć łatwość użycia[1]. Język oferuje także bardziej wyrafinowane możliwości, takie jak przetwarzanie tablic i dopasowywanie do wzorców.
CoffeeScript cieszy się stosunkowo dużą popularnością w społeczności programistów Ruby’ego. Twórcy Ruby on Rails stworzyli na jego bazie system szablonów i sam CoffeeScript był również jedną z bibliotek dostarczanych z Ruby on Rails od wersji 3.1. Brendan Eich stwierdził, że CoffeeScript miał wpływ na wersje ES6 języka JavaScript.
Historia
W dniu 13 grudnia 2009 roku Jeremy Ashkenas(inne języki) wykonał pierwszy commit (Git) dla CoffeeScript z komentarzem: „initial commit of the mystery language”[2]. Transpilator (parser i lekser) został napisany w języku Ruby[2]. Oficjalne, wstępne wydanie pojawiło się 24 grudnia tego samego roku[3].
Na początku 2010 roku Ashkenas wydał wersję 0.5, w której kluczową zmianą było zastąpienie Ruby'ego przez transpilator pisany w CoffeeScript z nakładką utworzoną za pomocą generatora parserów Jison (podobnego do Bisona)[1]. Jison tworzył kod JavaScript, więc możliwe stało się uruchomienie CS w Node.js[4]. Na tym etapie autor ostrzegał jeszcze o niestabilności CS, w szczególności o możliwych, znacznych zmianach składni CS[1].
W listopadzie 2010 twórcy Ruby on Rails wydali nowy system szablonów bazujący na CoffeScript[5]. Natomiast 24 grudnia 2010 roku Ashkenas na portalu Hacker News(inne języki) ogłosił wydanie stabilnej wersji 1.0.0[6][7]. W sierpniu 2011, wraz z wydaniem Ruby on Rails w wersji 3.1, CoffeeScript stał się jedną z bibliotek dostarczanych w ramach platformy RoR[8].
W 2011 Brendan Eich, jeden z członków komitetu TC39, przyznał, że CoffeScript jest „dobrze wykonany i wygodniejszy w użyciu niż JS” (wówczas ES5)[9]. Jednocześnie zauważył, że CS jako swoisty polyfill nie będzie miał szans osiągnąć podobnej wydajności do JS i to JS powinien się zmieniać w kierunku wygody użycia znanej z CS[9]. W swoim artykule porównywał CS z propozycjami, które zamierza przedstawić TC39 w pracach nad „Harmony” (wersja JS, która później przerodziła się w ES6)[9]. Parametry resztkowe oraz wyrażenia lambda (funkcje strzałkowe) znane z CS pojawiły się później w podobnej formie w JS, w tym w wersji ES6 znanej później jako ES2015[1][10][11].
13 września 2012 roku Dropbox ogłosił, że ich kod po stronie przeglądarki został przepisany z JavaScript na CoffeeScript, jednak w maju 2017 roku przeniesiono go do TypeScript[12][13].
18 września 2017 roku wydano wersję 2.0.0, która „ma na celu przyniesienie CoffeeScript do współczesnej ery JavaScript, zamykając luki w kompatybilności z JavaScript i jednocześnie zachowując czystą składnię, która jest znakiem rozpoznawczym CoffeeScript”[14].
Dystrybucja
Kompilator CoffeeScript jest self-hosting(inne języki) od wersji 0.5 i jest dostępny jako pakiet Node.js; jednak rdzeń transpilatora nie wymaga Node.js do działania i można go uruchomić w dowolnym środowisku JavaScript[15]. Jedną z alternatyw dla Node.js jest Coffee Maven Plugin, plugin dla systemu budowania Apache Maven[16]. Istnieje również oficjalny gem Ruby, który jest narzędziem pomostowym do kompilacji CS[17].
Oficjalna strona na CoffeeScript.org zawiera pola tekstowe, które nie tylko na żywo kompilują CoffeeScript do kodu JavaScript, ale również umożliwiają uruchomienie go bezpośrednio w przeglądarce[18].
Przykłady
Typowy fragment kodu JavaScript z użyciem biblioteki jQuery:
$(document).ready(function() {
// Kod inicjalizacyjny
});
W CoffeeScript słowo kluczowe function
jest zastąpione przez symbol ->
. Wcięcia zastępują nawiasy klamrowe, podobnie jak w Pythonie. Dodatkowo, najczęściej nawiasy mogą być pominięte. Analogiczny do powyższego fragment kodu w CoffeeScript wygląda następująco:
$(document).ready ->
# Kod inicjalizacyjny
Lub krócej, co wynika z definicji skróconego użycia kodu $(document).ready()
:
$ ->
# Kod inicjalizacyjny
Od ES2015 ten sam kod w JavaScript można zapisać tak:
$(() => {
// Kod inicjalizacyjny
});
Zobacz też
Przypisy
- ↑ a b c d CoffeeScript [online], jashkenas.github.com, 1 marca 2010 [dostęp 2023-12-09] [zarchiwizowane z adresu 2010-03-01] (ang.).
- ↑ a b JeremyJ. Ashkenas JeremyJ., initial commit of the mystery language · jashkenas/coffeescript [online], GitHub, 13 grudnia 2009 [dostęp 2023-12-09] (ang.).
- ↑ Tags 0.1.x · jashkenas/coffeescript [online], GitHub [dostęp 2023-12-09] (ang.).
- ↑ zaach's jison at master - GitHub [online], github.com, 22 lutego 2010 [dostęp 2023-12-09] [zarchiwizowane z adresu 2010-02-22] (ang.).
- ↑ Carson, Ryan. „New Rails-like Framework from 37signals for HTML5 Mobile Apps”, Think Vitamin blog, Nov 8, 2010.
- ↑ Hacker News. CoffeeScript 1.0.0 announcement zamieszczone przez Jeremy Ashkenas 24 grudnia 2010 roku
- ↑ Hacker News. Original CoffeeScript announcement zamieszczone przez Jeremy Ashkenas 24 grudnia 2009 roku
- ↑ Ruby on Rails 3.1 Release Notes [online], Ruby on Rails Guides, 2011 [dostęp 2023-12-09] (ang.).
- ↑ a b c BrendanB. Eich BrendanB., Harmony Of My Dreams [online], brendaneich.com, 2011 [dostęp 2023-12-09] .
- ↑ Funkcje, [w:] Nicholas C.N.C. Zakas Nicholas C.N.C., ECMAScript 6 : przewodnik po nowym standardzie języka JavaScript, Helion, 2016, s. 59-93 (pol.).
- ↑ ECMAScript® 2024 Language Specification [online], tc39.es [dostęp 2023-12-09] .
- ↑ DanD. Wheeler DanD., ZigaZ. Mahkovec ZigaZ., ChrisCh. Varenhorst ChrisCh., Dropbox dives into CoffeeScript [online], 13 września 2012 [dostęp 2013-05-11] (ang.).
- ↑ DavidD. Goldstein DavidD., The Great CoffeeScript to Typescript Migration of 2017 [online], Dropbox.Tech, 13 maja 2020 [dostęp 2020-06-30] (ang.).
- ↑ Announcing CoffeeScript 2 [online], coffeescript.org [dostęp 2023-12-09] .
- ↑ JeremyJ. Ashkenas JeremyJ., CoffeeScript [online], jashkenas.github.com, 27 kwietnia 2012 [dostęp 2023-12-09] [zarchiwizowane z adresu 2012-04-27] (ang.).
- ↑ MarkM. Derricutt MarkM., talios/coffee-maven-plugin [online], 4 listopada 2022 [dostęp 2023-12-09] .
- ↑ JeremyJ. Ashkenas JeremyJ., JoshuaJ. Peek JoshuaJ., SamS. Stephenson SamS., coffee-script - RubyGems [online], rubygems.org [dostęp 2023-12-09] (ang.).
- ↑ CoffeeScript [online], coffeescript.org [dostęp 2023-12-09] .
Linki zewnętrzne