Programmering

Kule verktøy for kompilering til JavaScript

Hver programmerer har et favoritt språk eller to. JavaScript-elskere er de heldigste i disse dager fordi språket deres tar over Internett og Internett overtar verden. De som har sitt hjerte andre steder i programmeringsspråkverdenen, sitter imidlertid fast. De kan enten holde seg på sidelinjen og forbanne den ubarmhjertige juggernaut av HTML, CSS, JavaScript og Node.js, eller de kan finne en måte å elske den på.

Heldigvis er det en tredje måte som lar deg nyte gledene til favorittspråket ditt mens du fortsatt distribuerer koden din til den stadig voksende JavaScript-verdenen: Bare konverter koden din, noe som kan være overraskende enkelt. Ytelse kan lide litt, men ofte mye mindre enn du kanskje forestiller deg. Deretter kan du sende koden din til nettlesere og slutte å prøve å få folk til å installere kjørbare filer.

Den standhaftige vil føle at dette er ondskaplig kapitulasjon, et bittert tilbaketrekning fra prinsippene som binder deg til din favorittsyntaks. Noen kan til og med føle at det er litt svik, en handling så forræderisk at du må skjule det for kollegene dine. Andre vil ganske riktig antyde at det ikke er så enkelt. Å få koden til å kjøre er en ting. Å lime delene sammen og lage et brukergrensesnitt er mye ekstra arbeid.

Du er velkommen til å velte deg i synd, men det er mange rasjonaliseringer som gjør ideen mer velsmakende. For det første kjører JavaScript-motorer mye, mye raskere enn de gjorde tidligere. For det andre har det aldri vært enklere å lage et web-brukergrensesnitt, takket være rammer og rikelig med HTML / CSS-talent. For det tredje blir JavaScript litt av en lingua franca. Hvis du kan konvertere alle disse språkene til JavaScript, og listen er overraskende lang, kan du også koble dem alle sammen.

Her ser vi på mengden av små språk som gjør det mulig for noen av de mest populære programmeringsspråkene å kompilere for JavaScript. En fremtidig artikkel vil undersøke hvordan falmende språk blir gjenfødt ved å bringe dem til nettleseren. Det er ingen grunn til å bli fast i medlidenhet eller hat. Disse teknikkene lar deg nyte favorittspråket ditt og kjøre hvor som helst JavaScript gjør.

Rubin

Det er en rekke alternativer som lar deg tenke som en Ruby-programmerer mens du kjører i et JavaScript-miljø.

RubyJS, for eksempel, er et JavaScript-bibliotek som legger til mange av de grunnleggende primitivene i ett JavaScript-objekt. Det du skriver er teknisk JavaScript, men det spesielle Ruby-objektet oppfører seg som Ruby-kode mesteparten av tiden. Strenger, tall, Iteratorer og Enumerators venter på deg.

Hvis det ikke er nok å skrive JavaScript som fungerer som Ruby, vil Opal oversette Ruby-kildekoden direkte til JavaScript. Det oppfører seg ofte som en Ruby VM, men noen ganger gjør det ikke det. Rubys mutable Strings, for eksempel, konverteres direkte til JavaScript's uforanderlige, noe som ikke burde være et problem for noen applikasjoner, men som kan gjøre noen få vanvittige. Andre små effekter som dette kan føre til frekke overraskelser i kantsaker.

For de som ønsker mer, tilbyr HotRuby en mer komplett løsning, en virtuell JavaScript-maskin som kureres gjennom Ruby op-koder. Kodebasen blir litt gammel, men den gir sanne troende et annet alternativ.

Java

Det er vanskelig å vite hva som inspirerte Google til å lage Google Web Toolkit, en forprosessor som konverterer Java til JavaScript. Kanskje elsket lederen Java og ville ikke at den skulle dø. Kanskje de hadde ekstra Java-genier som satt og ventet på å kjøre Internett.

Uansett årsak, gjorde de det, og de bruker det ofte til sine mest sofistikerte webprodukter. Det er en flott gave til alle med en haug med Java og ikke tid til å omskrive den. Innvollene til språket er der, men noen av de mindre vanlige klassene som BigInteger mangler; når det er sagt, kan du vanligvis finne en måte å legge dem til. Brukergrensesnittets rammeverk er i stor grad lånt fra Swing, slik at Swing-utviklere vil føle seg som hjemme. Andre vil ikke finne det for vanskelig å lære.

Google Web Toolkit er langt fra det eneste valget for Java-programmerere. Java2Script er fullt integrert med Eclipse, og GrooScript konverterer Java's kyssende fetter, Groovy.

Det er flere verktøy som kjører JVM-byte-kode med JavaScript, en smart idé som lar deg distribuere JAR-filer selv om du ikke har Java-kilden. Noen, som Doppio og Node-jvm, er tolker; andre, som TeaVM eller Dragome, vil konvertere bytekoden til JavaScript permanent.

Erlang

Erlang elskere har flere alternativer. En løsning er å bruke Erjang, et verktøy som kjører Erlang på JVM, som deretter brukes til å kjøre Java-byte-kode med et av Java-alternativene ovenfor. Det høres enkelt ut, ikke sant?

Shen er en kompilator som konverterer Erlang og fettere, som Elixir, Joxa og Lol, til JavaScript. Hvis du vil kjøre denne koden i Node.js, er det også en pakke erlang-shen-js.

Et tredje alternativ er å bruke LuvvieScript, en streng delmengde av Erlang som har fått kroker for å få tilgang til alle DOM-objektene. Du bruker Erlang-strukturen du elsker, og den oversetter instruksjonene dine til noe DOM forstår. Det er ikke akkurat det samme, men det vil gjøre.

C

Mange mennesker er overrasket over å finne ut at de kan bruke C- eller C-lignende språk med JavaScript. Visst, den grunnleggende JavaScript-syntaksen er ganske lik C, men innvollene er forskjellige. C lar deg berøre minne direkte, men JavaScript skjuler alle disse detaljene. C lar deg manipulere pekere, men JavaScript beskytter deg mot deres farlige kraft. Likevel er disse forskjellene overkommelige med litt smart hacking.

Det er kanskje ikke greit å kalle LLJS en versjon av C, men denne versjonen av JavaScript tilbyr statisk typede variabler og programmererstyring av minnet - vel, ikke minnet i seg selv, men en JavaScript-versjon av det. Dokumentasjonen lover å utføre pausefri utførelse fordi det ikke er noe søppel.

Hvis du vil jobbe med standard C, vil Clue konvertere C til JavaScript og en rekke andre skriptspråk som Perl eller Lua. Utviklerne hevder til og med at noen koder faktisk vil kjøre raskere i JIT for disse dynamiske språkene enn det vil være når de kompileres til innfødte binære filer. Hemmeligheten er at JIT-ene kan legge merke til ting i løpet av kjøretiden som de grunnleggende kompilatorene ikke kunne fordi de kan se programmet kjøre.

Det største navnet kan være Emscripten, en modifisert versjon av LLVM som er om kablet for å spytte ut instruksjoner for asm.js i stedet for maskinkode. Hemmeligheten er at asm.js er et smalt delsett av JavaScript designet for å være enkelt optimalisert av de nyeste JavaScript-motorene, som SpiderMonkey. Resultatene er imponerende, og noe av det beste beviset kommer fra spillmiljøet. Både Unity- og Unreal-motorene kan kjøre spill i HTML5-kompatible nettlesere.

Python

Python er et annet populært dynamisk språk som enkelt kan kartlegges til JavaScript. Mange av de interne funksjonene er like, og noen av de største forskjellene er i syntaksen.

Enklere alternativer, som RapydScript og PyvaScript, tilbyr bare Python-lignende syntaks som er oversatt ganske direkte til JavaScript. De vil gjøre noen få transformasjoner, som å sette inn krøllete parenteser for å matche de hvite mellomrommene, og voilà - den kjører i en nettleser. Dette er mer for programmerere som tenker i JavaScript, men som vil skrive pythonisk, som språkelskerne sier.

Mer komplekse versjoner, som PYXC-PJ og Pyjs, vil aktivt konvertere Python til JavaScript, og ofte skape noe som er ganske lesbart - eller minst like lesbart som den originale koden. Pyjs kommer også med et widgetverktøy som gjør det ganske likt Google Web Toolkit.

Det morsomste kan imidlertid være PyPy, en utrolig bragd med programvareteknikk med nesten Rube Goldbergian-proporsjoner. Python går inn og kjører på en Python-tolk skrevet i RPython, en delmengde av Python designet for å være lett å kompilere. Denne RPython blir deretter samlet til noe som ser ut som C som kan mates inn i Emscripten. Utviklerne hevder at de kan vise noen Python-referanser som kjører raskere i SpiderMonkey enn CPython.

Hvis de kan gjøre det med Python og C, kan du også.

JavaScript, i en annen drakt

Selvfølgelig, selv når det gjelder JavaScript, har du alternativer. Tross alt, noen mennesker liker skilletegn, og andre ikke. CoffeeScript er for folk som ikke gjør det. Hvis du trenger å programmere i JavaScript, men liker å skrive så mange semikolon eller krøllete parenteser, så er CoffeeScript noe for deg.

Tarmene til CoffeeScript er de samme som JavaScript fordi det egentlig ikke er et språk. Det er en forprosessor som legger til semikolonene og krøllete parentesene, slik at du ikke trenger å gjøre det. Du skriver ut programmet ditt i Ruby-lignende enkelhet, og CoffeeScript konverterer det til en minifisert versjon av JavaScript.

Dette er ikke det samme som å programmere på et annet språk, fordi variablene og funksjonene du definerer fremdeles vil oppføre seg som JavaScript-variabler og funksjoner. Variablene vil fortsatt bli skrevet dynamisk, og alle de små forverringene vil fortsatt være der. Matematikken og den ekornede, overbelastede oppførselen til plussoperatøren vil fortsatt slite deg, men du sparer litt tid på å skrive.

CoffeeScript-verdenen er bemerkelsesverdig mangfoldig. Når verden først innså at den kunne bearbeide koden sin, kom mange inn i spillet. Iced CoffeeScript er for eksempel som vanlig CoffeeScript, men med noen få ekstra konstruksjoner som gjør asynkrone anrop litt renere og enklere å skrive og lese. Det kan være minst et dusin kusiner som tilbyr å forenkle din spesielle programmeringsstil.

Relaterte artikler

  • 7 grunner til at rammeverk er de nye programmeringsspråkene
  • 7 tidløse leksjoner for programmering av 'gråskjegg'
  • 9 banebrytende språk som er verdt å lære nå
  • Nedlasting: Den profesjonelle programmererens virksomhetsoverlevelsesguide
  • Nedlasting: 2015 Award of the Year
  • Nedlasting: 29 tips for å lykkes som uavhengig utvikler
  • Anmeldelse: De fire store Java IDEene sammenlignet
  • Nedlasting: Praktisk med 10 JavaScript-redaktører og IDEer
  • 10 kamper raser for utviklerens hjerter og sinn
  • Angrep av programmeringsspråkene på en bokstav
  • PHP vs Node.js: En episk kamp for utviklerens tankedel
  • 15 teknologier som endrer hvordan utviklere jobber
  • 12 spådommer for fremtiden for programmering
  • 15 varme programmeringstrender - og 15 blir kalde
  • Dev-olution: Saluting 19 generasjoner av dataprogrammerere
  • 10 muligheter vi vil se i HTML6
$config[zx-auto] not found$config[zx-overlay] not found