V desetih dneh
O izumih na področju programskih jezikov ne pišemo pogosto. A ob 25. obletnici objave prve spletne strani vendarle ne moremo mimo javascripta, ene izmed temeljnih tehnologij, ki poganja svetovni splet.
Vse se je začelo 9. avgusta 1991, ko je podjetje CERN (European Organization for Nuclear Research) objavilo prvo spletno stran, info.cern.ch/hypertext/WWW/TheProject.html. Takrat izjemen dosežek je bil napisan v tehnologijah, ki se uporabljajo še danes – HTTP, HTML, DOM. Prvo spletišče tistikrat še ni vsebovalo programske kode javascript, temveč je bilo zgolj običajen dokument HTML, ki je vseboval informacije, kako zgraditi spletno stran, kako postaviti spletni strežnik in podobno. Toda temelji so bili postavljeni.
Začetki razvoja spleta
Temelji razvoja svetovnega spleta segajo v leto 1993 z nastankom brskalnika Mosaic. Ta velja za prvi grafični spletni brskalnik, podpiral je več protokolov, kot so FTP, Telnet, gopher. Na njegov nastanek je pomembno vplival Applov HyperCard, ki velja za eno prvih uspešnih interaktivnih aplikacij pred začetkom svetovnega spleta.
Kljub močnemu vplivu v spletu se je začel tržni delež Mosaica leta 1994 zmanjševati, predvsem zato, ker ga je nadgradil Netscape Navigator, skorajšnji sinonim za svetovni splet. Prehod z Mosaica na Netscape je logičen, če se spomnimo, da so bili avtorji obeh (večinoma) isti, le da so prvega napisal v okviru organizacije NCSA (National Center for Supercomputing Applications), drugega pa v okviru lastnega podjetja. Sicer pa je bil ravno Netscape kraj, kjer se je rodil javascript.
Želja po dinamičnosti spleta
Podjetje Netscape je sodelovalo s podjetjem Sun Microsystems, ki je bilo lastnik (in avtor) programskega jezika java. Četudi je java veljala za programski jezik prihodnosti, z uporabo v spletu niso mogli doseči enakega učinka kot s krajevnimi aplikacijami za namizje (čas nalaganja spletnih strani je bil zelo dolg, javanski »appleti« so bili zelo neučinkoviti), zato so se v podjetju Netscape Communications odločili, da je čas za razvoj jezika, ki bi omogočal večjo interaktivnost, predvsem pa pohitril prikazovanje spletnih strani.
Želeli so ustvariti programski jezik po vzoru jave, ki naj bi bil nekakšno »lepilo« med spletnimi komponentami in javanskimi appleti. Brendan Eich je menil, da je java nekoliko prezahtevna za učenje, zato je ustvaril jezik, ki naj bi bil enostavnejši za razvoj. Za nov programski jezik je podjetje Netscape Communications zahtevalo, naj bo izdelan v desetih dneh, in Brendan Eich je pričakovanje izpolnil.
Nastanek javascripta
Brendan Eich se je razvoja novega programskega jezika lotil tako, da je spojil dobre lastnosti treh takrat zelo vplivnih programskih jezikov – jave, schema in selfa. Iz programskega jezika java je vzel sintakso, podporo funkcijskemu programiranju je naredil po vzoru schema, od tam je pridobil tudi koncept objektnega programiranja in prototipiranja.
Javascript je bil objavljen 23. maja 1995. Objekten, dinamičen, interpretiran in funkcijski skriptni jezik je bil resda popolnoma nov izum, a je zaradi kratkotrajnega razvoja vseboval tudi precej napak in bil zato deležen številnih kritik.
Univerzalnost javascripta se je pokazala že ob samem nastanku, ko je bil v tem jeziku napisan prvi spletni strežnik, LiveWire.
Sprva se je programski jezik imenoval mocha, leta 1995 so ga preimenovali v livescript. Na koncu je prevzel ime javascript – ustanovitelji so želeli izpostaviti pomembnost jave. Pri tem je zanimivo, da javascript razen nekaterih sintaktičnih pravil nima nobenih skupnih lastnosti z javo in je ime za nepoznavalca lahko zelo zavajajoče.
Univerzalnost javascripta se je pokazala že ob samem nastanku, ko je bil v tem jeziku napisan prvi spletni strežnik, LiveWire. Ta je vseboval precej hroščev, zato ga je kasneje nadomestil spletni strežnik, napisan v programskem jeziku java. Danes je Netscapov LiveWire skoraj povsem utonil v pozabo.
Boj za prevlado v spletu
Netscape Navigator je bil do sredine leta 1995 de facto brskalnik, vzpon spleta pa je vzbudil večje zanimanje s strani velikana – Microsofta. Microsoft je sicer videl prihodnost računalniškega razvoja v smeri namiznih aplikacij, faksov, CDjev, TVja, zato v sam svetovni splet ni vlagal moči, dokler ga ni Netscape presenetil z izumom novega programskega jezika. Microsoft je v strahu, da bo izgubil svoj delež na trgu, začel ponujati svoj programski jezik: vzel je model javascripta, ga obratno razbral (reverse engineering) in ponudil svoj izdelek, imenovan jscript. Hkrati je tudi Internet Explorer 1.0 začel ponujati kot del operacijskega sistema Windows. To je bila za Microsoft presenetljiva odločitev, saj že od vsega začetka velja za podjetje, ki izdelkov ne ponuja brezplačno. Nazadnje se je izkazala za zelo dobro.
Človek, ki je v desetih dneh razvil programski jezik
Brendan Eich je v svetu najbolj znan kot izumitelj javascripta in soustanovitelj Mozilla Foundation in Mozilla Corporation. Rodil se je leta 1961 in leta 1985 končal magisterij iz računalništva in matematike.
Kariero je začel v podjetju Silicon Graphics, kjer se je ukvarjal z operacijskimi sistemi, nato se je zaposlil kot programer mikrokrmilnikov v podjetju MicroUnity
Systems Engineering.
Aprila 1995 ga je podjetje Netscape Communicatons najelo za razvoj programskega jezika javascript.
Danes je Brendan Eich CEO podjetja Brave Software, ki se ukvarja z računalniško varnostjo (več na www.brave.com).
Ecmascript, skupno ime za javascript, jscript in actionscript
Vnel se je tudi boj za standard javascripta. Novo izumljeni jezik je bilo treba standardizirati, imena javascript pa niso mogli uporabiti, saj je bila blagovna znamka že v lasti podjetja Sun Microsystems. Pri uveljavljanju standardov je Netscape naletel na kar nekaj težav – poskusa standardizacije pri podjetju ISO in W3C mu nista uspela, zato je poskusil srečo pri podjetju ECMA (European Computer Manufacture Association). Tu mu je končno uspelo uveljaviti standard, ki se je imenoval ecmascript. Dandanes bi morali javascript praviloma imenovati ecmascript, saj je uradni standard – imena jscript, javascript in actionscript so samo implementacije tega standarda. Actionscript se uporablja za dvodimenzionalne animacije v flashu, a je zaradi opustitve podpore flashu pri številnih brskalnikih začel počasi izginjati iz rabe.
Microsoftov preboj v ospredje
V času objave prvih različic ecmascripta je bil svetovni splet precej nestabilen in poln napak. Prevladujoča brskalnika sta bila Internet Explorer in Netscape Navigator. Objavljala sta precej različic, ki so vsebovale večinoma nove funkcionalnosti, stare napake pa velikokrat niso bile odpravljene.
Netscape je bil zelo aktiven pri razvoju – vselej je prvi ponudil novosti v brskalniku, a je Microsoft takoj zatem ponovil potezo in ponudil še boljše funkcionalnosti. V vojni brskalnikov je imel veliko več prednosti: lahko si je privoščil ponuditi brezplačen brskalnik v paketu z operacijskim sistemom Windows 95, saj je imel (veliko) boljše finančne vire kot Netscape.
Še do leta 1997 je Netscape med brskalniki obvladoval kar 72 % tržni delež. Istega leta oktobra je Microsoft objavil Internet Explorer 4.0, ki je v vojni brskalnikov zaobrnil igro in postal prevladujoč brskalnik. Uporaba Netscape Navigatorja in s tem javascripta je takrat začela usihati.
Kaj je rešilo javascript
Glede na vse težave bi lahko pričakovali, da bo javascript umrl skupaj z upadanjem rabe brskalnika Netscape Navigator. Toda leta 2009 je James Jesse Garret izumil pomembno orodje za lažji razvoj spletnih strani – AJAX.
AJAX (Asynchronous JavaScript and XML) je skupina tehnologij, ki kombinira HTML, DOM, CSS, JSON/XML in XMLHttpRequest, vse naštete tehnologije pa se povezujejo z javascriptom. Namen AJAXa je, da lahko spletne aplikacije asinhrono pošiljajo oziroma prejemajo podatke iz strežnika. Če to dodamo v kontekst prikazovanja spletne strani, nam uporaba AJAXa prihrani veliko virov, saj lahko osvežujemo posamezne segmente, ne da bi sprožili vnovično nalaganje celotne strani, stran pa posledično »oživi« in postane »animirana«. Za izvajanje klicev se uporablja knjižnica XMLHttpRequest, ki jo je razvil Microsoft, leto zatem pa se je uveljavila kot spletni standard. Pri obdelavi podatkov ob pomoči AJAXa se podatki z asinhronim klicem preberejo v obliki XML ali JSON in se nato neposredno vstavijo v HTML.
AJAX je povzročil izjemen napredek v delovanju spleta, saj so se časi nalaganja spletnih strani drastično zmanjšali. Pomembna mejnika v tej tehnologiji je postavil tudi Google in leta 2004 povzročil, da je postal AJAX nepogrešljiv v svetovnem spletu – z uporabo AJAXa je bil napisan Gmail, leta 2006 pa še Google Maps.
Razvoj javascriptnih knjižnic (library) in ogrodij (framework)
V modernih časih razvoja programske opreme stremimo k čimbolj enostavni gradnji aplikacij. Temu primerno se kaže tudi povečanje številnih knjižnic in ogrodij, ki bistveno olajšajo pisanje kode. Omenimo samo jquery, angular, backbone, react, coffescript, ember ... Te z enostavno rabo zagotavljajo hitrejši razvoj in nam prihranijo veliko vrstic kode. Zelo primerne so za prototipiranje spletnih strani in za razne demo projekte. A na trgu je bolj malo knjižnic, ki so primerne oziroma zrele za uporabo v produkcijskem okolju.
Tudi zato, ker ima visokonivojska abstrakcija programske kode tudi slabosti, kot so zakrivanje implementacije, nepoznavanje dejanskega dogajanja v kodi, dolgotrajno razhroščevanje (debugging). Kadar govorimo o javascriptu, kjer ne uporabljamo nobenih posrednih klicev prek raznih knjižnic, uporabljamo izraz Vanilla JavaScript, a tega je vse manj …
Javascript in strežniške aplikacije
Javascript je vse bolj v rabi tudi zato, ker se povečuje uporaba strežniške različice (server-side JavaScript). Dokaz, da lahko koda javascripta deluje tudi na zalednih (back-end) aplikacijah, je podal že Netscape, ki je kmalu po izidu javascripta napisal spletni strežnik LiveWire. Ta je zaradi številnih pomanjkljivosti v kodi resda izumrl, a je strežniški (server-side) javascript med razvijalci kasneje spet zaživel.
V razvoju strežniških aplikacij vsekakor ne smemo izpustiti trenutno najbolj priljubljene knjižnice Node.JS. Zamisel o izdelavi tega ogrodja se je leta 2009 porodila Ryan Dahlu, ki je želel izumiti preprostejši način za operacije iz vhodno/izhodnih sistemov (I/O operations). Nastalo je ogrodje, s katerim lahko za zaledne aplikacije pišemo kodo tudi v javascriptu.
Druge pogosto rabljene knjižnice za strežniški javascript so še Node.JS, MongoDB, Silk.JS, CouchDB, Wakanda itd.
Javascript in IOT
Javascript se je v enaindvajsetih letih od nastanka dotaknil že praktično vseh področij v svetu programiranja. Opaziti je, da je začel razvoj nizkonivojskih aplikacij z IOT (Internet Of Things) postajati vse bolj podoben razvoju visokonivojske programske opreme. Javascriptni APIji so se preselili tudi na naprave, kot so Arduino, Raspberry PI in podobne mikrokrmilnike. Pri pisanju programov zanje potrebujemo vedno manj znanja iz elektronike – še priročneje je, ker se nam ni treba učiti novega programskega jezika – uporabimo znanje javascripta. Nastale so številne knjižnice, kjer se koda javascripta prevede neposredno v strojni jezik. Zgled takih knjižnic so Tessel, Espurino, JohnnyFive, NodeRED, KinomaJS ...
Javascript kot zbirnik za splet?
Po mnenju gurujev javascripta, kot so Douglas Crockford (izumitelj JSONa in JSLinta), je javascript dobil »status« zbirnega jezika za splet.
Ta analogija se je razvila iz dejstva, da je javascript postal cilj za prevajanje kode drugih programskih jezikov, saj je marsikateremu razvijalcu lažje razvijati v jeziku, kjer je sintaksa elegantnejša in berljivost programov večja. Zatorej je v zadnjem času nastalo kar nekaj popolnoma novih jezikov, ki izhajajo iz javascripta. Najbolj znani zgledi tega so typescript, dart in coffeescript – koda iz teh jezikov se prevede v javascript. Že uveljavljen zgled takega koncepta je tudi ogrodje GWT (Google Web Toolkit) in Script#.
Utemeljitev izjave, da je javascript zbirni jezik za splet, je že pred tremi leti potrdila Mozilla z objavo nove knjižnice asm.js. Ta omogoča, da se koda iz jezikov, kot so C, C++, perl, python, ruby, lahko prikazuje v brskalniku. Za igričarje in druge navdušence je zanimivo, da so ob pomoči javascripta prenesli jedro za razvoj videoiger Unreal 4 v spletni brskalnik, ne da bi uporabljali kakršnekoli vtičnike (plug-in) ali dodatne knjižnice.
Prihodnost
Razvoj novih programskih jezikov, ki temeljijo na javascriptu, še ne bo omilil težav pri razvoju svetovnega spleta. Ta že od vsega začetka temelji na tehnologijah HTTP, HTML, CSS, ki že v osnovi niso bile napisane za razvoj interaktivnih aplikacij, temveč je bil njihov prvotni namen prikazovanje statičnih dokumentov. Med spletno evolucijo so se tehnologije obdržale, zato je bila uporaba javascripta nujno zlo, ki se je trdo zakoreninilo v uporabo svetovnega spleta.
JavaScript bo verjetno še precej časa ohranjal svoj delež pri razvoju spletnih tehnologij. Po podatkih www.w3techs.com ga uporablja kar 93,7 % vseh spletnih strani. Poleg prehoda na strežniški del aplikacij ima pred seboj zagotovo še prihodnost pri delu z mikrokrmilniki, tipali, senzorji ipd. Le vprašanje časa je, kdaj se bomo naveličali uporabljati trenutne spletne tehnologije in postavili enostavnejše in elegantnejše koncepte razvoja v svetovnem spletu. Ob tem pa upamo, da se bodo izumitelji novega programskega jezika učili tudi iz napak, ki jih je odkril javascript, in da bodo imeli za razvoj na voljo več kot le deset dni časa ...
Tim Berners Lee – ustanovitelj spleta
Ta programer, fizik in dobitnik številnih nagrad se je rodil leta 1955. Študiral je na The Queen's Collegeu na oxfordski univerzi in leta 1976 diplomiral iz fizike. Decembra 1980 se je zaposlil v podjetju CERN in leta 1989 »izumil« temelje spleta. Leta 1990 je napisal spletni strežnik ter s tem vzpostavil prvo povezavo odjemalec-strežnik, tehnologije pa so se uveljavile kot temelj delovanja spleta, kot ga poznamo še danes.
Pomembnejši mejnik v nadaljnjem razvoju spleta, za katerega je prav tako zaslužen Tim Berners-Lee, je leta 1994 ustanovljeno podjetje W3C (World Wide Web Consortium), ki skrbi za uskladitev standardov v spletu.
Trenutno je Tim Berners Lee predsednik podjetja Open Data Institute (več na www.theodi.org).
Časovnica razvoja ecmascripta
Ecmascript se razvija pod nadzorom ECMA Technical Comitee 39 (katerega član je trenutno tudi Brendan Eich). Funkcionalnosti, ki še čakajo na objavo v naslednjih različicah, spadajo pod tako imenovano različico ES.Next.
ECMAScript 1 – junij 1997
Prva različica ecmascripta je vsebovala osnovne koncepte, kot so tipi, objekti, operatorji, funkcije, komentarji, izrazi (expressions).
ECMAScript 2 – junij 1998
Druga različica ecmascripta je bila usmerjena v standardizacijo in združljivost s standardom ISO/IEC 16262.
ECMAScript 3 – december 1999
Ta različica je bila podprta s strani vseh brskalnikov, glavne novosti so bile:
- podpora regularnim izrazom (regular expressions)
- lovljenje izjem (exception handling)
- podrobnejša definicija napak (errors)
ECMAScript 4 – opuščena različica
Objavljena naj bi bila oktobra 2008, a so jo opustili zaradi bojazni do sprememb, ki bi lahko vodile do konfliktov v standardu, saj naj bi bile spremembe nezdružljive s prejšnjimi različicami. Obsegala naj bi kup novosti, med drugim naj bi podpirala programming in the large: način programiranja, ki vključuje večje skupine razvijalcev oziroma manjše skupine v sklopu daljših obdobij – vključuje module (modules), razrede (classes) in statično tipiranje (static typing).
ECMAScript 5 – december 2009
Po šele desetih letih objavljena različica je imela kar nekaj novih funkcionalnosti. To so:
- strict mode: način za lažje odkrivanje napak
- podpora knjižnici za JSON (JavaScript Object Notation). To je standard, ki se uporablja za strukturiran prikaz podatkov in naj bi bil alternativa veliko bolj kompleksnemu formatu XML.
- nove metode za polja (arrays) in objekte (objects): forEach, filter, reduce,
- getter in setter na objektih
ECMAScript 6 – junij 2015
Vsebuje precej novosti na področju sintakse in standardov kodiranja. Slabost te različice je, da veliko brskalnikov ne podpira določenih funkcij. Omenimo nekaj bistvenih značilnosti te različice:
- novi koncepti, dodana določila (keywords), kot so class, module, static in getter/setter
- inicializacija spremenljivk in funkcij v bloku (block scoping)
- arrow functions: nova sintaksa pisanja funkcij, ki nam prihrani kup pisanja kode.
- Zgled:
x => x; // se uporablja namesto prejšnje sintakse:
function(x){
return x;
}
- obljube (promise): uporabljajo se pri asinhronih klicih. Predstavljajo objekt oziroma vrednost, ki je lahko na voljo v istem trenutku ali nikoli.
- internacionalizacija in lokalizacija
- polja s tipi (typed arrays): uporabni predvsem za delo s slikami, binarnimi datotekami itd. Zgledi novih funkcij: Int8Array, Int32Array, Float32Array, Float64Array
- podpora funkcijskemu programiranju (metaprogramming) in še kup drugih novosti
ECMAScript 7 – junij 2016
Aktualna različica ecmascripta je sklop manjših novosti in popravkov. Omenimo:
- nove funkcije na Array.prototype
- operator za računanje potenc (**)
Za naslednjo različico ES.Next se predvideva, da se bo razvoj funkcionalnosti večinoma odvijal v smeri objektno usmerjenega programiranja, boljše podpore funkcijskemu programiranju, asinhronim klicem …