CoffeeScript

język programowania

CoffeeScriptję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
Logo języka CoffeeScript
Logo języka
Pojawienie się

13 grudnia 2009; ponad 15 lat temu

Paradygmat

wieloparadygmatowy: bazujący na prototypach, imperatywny, funkcyjny, skryptowy

Typowanie

dynamiczne, słabe

Aktualna wersja stabilna

2.7.0
(24 kwietnia 2022) [±]

Twórca

Jeremy Ashkenas

Licencja

Licencja MIT

Platforma sprzętowa

wieloplatformowy

Platforma systemowa

wieloplatformowy

Strona internetowa

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

edytuj

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

edytuj

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

edytuj

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ż

edytuj

Przypisy

edytuj
  1. a b c d CoffeeScript [online], jashkenas.github.com, 1 marca 2010 [dostęp 2023-12-09] [zarchiwizowane z adresu 2010-03-01] (ang.).
  2. a b Jeremy Ashkenas, initial commit of the mystery language · jashkenas/coffeescript [online], GitHub, 13 grudnia 2009 [dostęp 2023-12-09] (ang.).
  3. Tags 0.1.x · jashkenas/coffeescript [online], GitHub [dostęp 2023-12-09] (ang.).
  4. zaach's jison at master - GitHub [online], github.com, 22 lutego 2010 [dostęp 2023-12-09] [zarchiwizowane z adresu 2010-02-22] (ang.).
  5. Carson, Ryan. „New Rails-like Framework from 37signals for HTML5 Mobile Apps”, Think Vitamin blog, Nov 8, 2010.
  6. Hacker News. CoffeeScript 1.0.0 announcement zamieszczone przez Jeremy Ashkenas 24 grudnia 2010 roku
  7. Hacker News. Original CoffeeScript announcement zamieszczone przez Jeremy Ashkenas 24 grudnia 2009 roku
  8. Ruby on Rails 3.1 Release Notes [online], Ruby on Rails Guides, 2011 [dostęp 2023-12-09] (ang.).
  9. a b c Brendan Eich, Harmony Of My Dreams [online], brendaneich.com, 2011 [dostęp 2023-12-09].
  10. Funkcje, [w:] Nicholas C. Zakas, ECMAScript 6 : przewodnik po nowym standardzie języka JavaScript, Helion, 2016, s. 59-93 (pol.).
  11. ECMAScript® 2024 Language Specification [online], tc39.es [dostęp 2023-12-09].
  12. Dan Wheeler, Ziga Mahkovec, Chris Varenhorst, Dropbox dives into CoffeeScript [online], 13 września 2012 [dostęp 2013-05-11] (ang.).
  13. David Goldstein, The Great CoffeeScript to Typescript Migration of 2017 [online], Dropbox.Tech, 13 maja 2020 [dostęp 2020-06-30] (ang.).
  14. Announcing CoffeeScript 2 [online], coffeescript.org [dostęp 2023-12-09].
  15. Jeremy Ashkenas, CoffeeScript [online], jashkenas.github.com, 27 kwietnia 2012 [dostęp 2023-12-09] [zarchiwizowane z adresu 2012-04-27] (ang.).
  16. Mark Derricutt, talios/coffee-maven-plugin [online], 4 listopada 2022 [dostęp 2023-12-09].
  17. Jeremy Ashkenas, Joshua Peek, Sam Stephenson, coffee-script - RubyGems [online], rubygems.org [dostęp 2023-12-09] (ang.).
  18. CoffeeScript [online], coffeescript.org [dostęp 2023-12-09].

Linki zewnętrzne

edytuj