Kratki vodič za JVM jezike

1. Uvod

Osim Jave, na Java virtualnom stroju mogu se izvoditi i drugi jezici poput Scala, Kotlin, Groovy, Clojure.

U sljedećim ćemo odjeljcima pogledati najpopularnije JVM jezike na visokoj razini.

Naravno, započet ćemo s pretečom JVM jezika - Javom.

2. Java

2.1. Pregled

Java je programski jezik opće namjene koji obuhvaća objektno orijentiranu paradigmu.

Osnovna značajka jezika je prenosivost na više platformi, što znači da su programi napisani na jednoj platformi izvršni na bilo kojoj kombinaciji softvera i hardvera s odgovarajućom podrškom za vrijeme izvođenja. To se postiže tako da se prvo kompajlira kôd u bytecode, umjesto izravno u strojni kod specifičan za platformu.

Upute za Java bajt kod analogne su strojnom kodu, ali ih tumači Java virtualni stroj (JVM) specifičan za kombinaciju operativnog sustava i hardvera hosta.

Iako je izvorno objektno orijentirani jezik, Java je počeo usvajati koncepte iz drugih programskih paradigmi poput funkcionalnog programiranja.

Kratko ćemo pogledati neke od glavnih značajki Jave:

  • Objektno orijentirano
  • Snažno statički otkucan
  • Neovisno o platformi
  • Skupljeno smeće
  • Višenitni

2.2. Primjeri

Pogledajmo kako jednostavan "Hello, World!" primjer izgleda ovako:

javna klasa HelloWorld {public static void main (String [] args) {System.out.println ("Hello, World!"); }}

U ovom smo primjeru stvorili razred s imenom Pozdrav svijete i definirao glavnu metodu koja ispisuje poruku na konzoli.

Sljedeći, koristit ćemo javac naredba za generiranje bajtkoda koji se mogu izvršiti na JVM-u:

javac HelloWorld.java

Konačno, the Java naredba izvršava generirani bytecode na JVM:

java HelloWorld

Za više primjera Jave pogledajte naš popis tutorijala.

3. Scala

3.1. Pregled

Scala označava "skalabilni jezik". Scala je statički otkucan jezik koji kombinira dvije važne programske paradigme, a to su objektno orijentirano i funkcionalno programiranje.

Jezik je nastao 2004. godine, ali je posljednjih godina postao popularniji.

Scala je čisti objektno orijentirani jezik kao ne podržava primitivce. Scala pruža mogućnost definiranja klasa, objekata, metoda zajedno sa značajkama funkcionalnog programiranja poput osobina, algebarskih tipova podataka ili klasa tipova.

Nekoliko važnih značajki Scale su:

  • Funkcionalno, objektno orijentirano
  • Snažno statički otkucan
  • Algebarski tipovi podataka
  • Usklađivanje uzoraka
  • Poboljšana podrška za nepromjenjivost
  • Lijeno računanje
  • Višenitni

3.2. Primjeri

Prvo, pogledajmo isto "Zdravo, Svijete!" primjer kao prije, ovaj put u Scali:

objekt HelloWorld {def main (args: Array [String]): Unit = println ("Hello, world!")}

U ovom smo primjeru stvorili singleton objekt s imenom Pozdrav svijete i glavni metoda.

Dalje, za sastavljanje ovoga, možemo koristiti skalac:

skalac HelloWorld.scala

The skala naredba izvršava generirani bytecode na JVM:

scala HelloWorld

4. Kotlin

4.1. Pregled

Kotlin je statički upisan jezik opće namjene s otvorenim kodom koji je razvio tim JetBrains, koji okuplja objektno orijentiranu i funkcionalnu paradigmu.

Glavni fokus tijekom razvoja Kotlina bila je interoperabilnost Java, sigurnost (rukovanje iznimkama), sažetost i bolja podrška za alate.

Od izdavanja Android Studija 3.0, Kotlin je potpuno podržani Googleov programski jezik na Android platformi. Također je uključen u Android Studio IDE paket kao alternativa standardnom Java kompajleru.

Neke važne značajke Kotlina:

  • Objektno orijentirano + Funkcionalno
  • Snažno statički otkucan
  • Sažet
  • Interoperabilan s Javom

Naš uvod u Kotlin također sadrži više specifičnosti o značajkama.

4.2. Primjeri

Pogledajmo "Zdravo, svijet!" primjer u Kotlinu:

zabavno glavno (args: Array) {println ("Zdravo, Svijete!")}

Gornji kod možemo napisati u novu datoteku pod nazivom pozdravSvijet.kt.

Zatim, koristit ćemo kotlinc naredba za sastavljanje ovoga i generira bytecode koji se može izvršiti na JVM-u:

kotlinc helloWorld.kt -include-runtime -d helloWorld.jar

The -d opcija se koristi za označavanje izlazne datoteke za razred datoteke ili a .jar naziv datoteke. The -uključi-vrijeme izvođenja opcija čini rezultirajuće .jar datoteka samostalna i može se izvoditi tako da u nju uključite runtime knjižnicu Kotlin.

Onda Java naredba izvršava generirani bytecode na JVM:

java -jar pozdravSvijet.jar

Pogledajmo i drugi primjer ispisa popisa predmeta pomoću a za petlja:

fun main (args: Array) {val items = listOf (1, 2, 3, 4) for (i in items) println (i)}

5. Groovy

5.1. Pregled

Groovy je objektno orijentirani, neobavezno upisani, dinamički jezik specifičan za domenu (DSL), s podrškom za mogućnosti statičkog tipkanja i statičke kompilacije. Cilj mu je poboljšati produktivnost programera uz sintaksu koja se lako nauči.

Groovy se lako integrira s bilo kojim Java programom i odmah dodaje moćne značajke, poput mogućnosti skriptiranja, metaprogramiranja i funkcionalnog programiranja tijekom izvođenja i vremena kompajliranja.

Istaknimo nekoliko važnih značajki:

  • Objektno orijentiran s funkcionalnim značajkama poput funkcija višeg reda, curryja, zatvarača
  • Tipkanje - dinamično, statično, snažno, patka
  • Jezik specifičan za domenu
  • Interoperabilnost s Javom
  • Produktivnost sažetošću
  • Preopterećenje operatera

5.2. Primjeri

Prvo, pogledajmo naš "Hello, World!" primjer u Groovyju:

println ("Pozdrav svijetu")

Gornji kod napisali smo u novu datoteku pod nazivom HelloWorld.groovy. Sada ovaj kôd možemo pokrenuti na dva načina: kompajliranjem, zatim izvršavanjem ili samo pokretanjem nekompiliranog koda.

Možemo sastaviti a .groovy datoteku pomoću groovyc naredba kako slijedi:

groovyc HelloWorld.groovy

Zatim ćemo upotrijebiti Java naredba za izvršavanje groovy koda:

java -cp \ embeddable \ groovy-all-.jar ;. Pozdrav svijete

Na primjer, naredba iznad mogla bi izgledati ovako:

java -cp C: \ utils \ groovy-1.8.1 \ embedvable \ groovy-all-1.8.1.jar ;. Pozdrav svijete

Pogledajmo i kako možemo koristiti groovy naredba za izvršavanje .groovy datoteka bez kompajliranja:

groovy HelloWorld.groovy

Na kraju, evo još jednog primjera ispisa popisa predmeta s indeksom:

popis = [1, 2, 3, 4, 5, 6, 7, 8, 9] list.eachWithIndex {it, i -> println "$ i: $ it"}

Pogledajte još Groovyjevih primjera u našem uvodnom članku.

6. Clojure

6.1. Pregled

Clojure je funkcionalni programski jezik opće namjene. Jezik radi na JVM-u, kao i Microsoftovo uobičajeno vrijeme izvođenja. Clojure je još uvijek kompajlirani jezik, i dalje je dinamičan, jer su njegove značajke podržane u vrijeme izvođenja.

Dizajneri Clojurea željeli su dizajnirati moderni Lisp koji može raditi na JVM-u. Zbog toga je poznat i kao dijalekt programskog jezika Lisp. Slično Lispsu, Clojure kôd tretira kao podatke, a ima i makro sustav.

Neke važne značajke Clojurea:

  • Funkcionalni
  • Tipkanje - Dinamično, snažno, nedavno je počelo podržavati postupno tipkanje
  • Dizajniran za istodobnost
  • Izvršni polimorfizam

6.2. Primjeri

Za razliku od ostalih JVM jezika, nije tako jednostavno stvoriti jednostavno "Hello, World!" program u Clojureu.

Za pokretanje našeg primjera koristit ćemo alat Leiningen.

Prvo ćemo stvoriti jednostavan projekt sa zadanim predloškom pomoću sljedeće naredbe:

lein novi zdravo svijet

Projekt će biti kreiran sa sljedećom strukturom datoteka:

./project.clj ./src ./src/hello-world ./src/hello-world/core.clj

Sada moramo ažurirati ./project.ctj datoteka sa sljedećim sadržajem za postavljanje glavne izvorne datoteke:

(defproject hello-world "0.1.0-SNAPSHOT": glavni hello-world.core: ovisnosti [[org.clojure / clojure "1.5.1"]])

Sada smo spremni ažurirati naš kôd tako da ispiše "Hello, World!" u ./src/hello-world/core.clj datoteka:

(ns hello-world.core) (defn -main [& args] (println "Zdravo, svijet!"))

Napokon ćemo upotrijebiti lein naredba za izvršavanje gornjeg koda, nakon premještanja u korijenski direktorij projekta:

cd zdravo-svijet lein run

7. Ostali JVM jezici

7.1. Jython

Jython je implementacija Java platforme Python koji radi na JVM.

Ovaj je jezik u početku osmišljen kako bi omogućio pisanje aplikacija visokih performansi bez žrtvovanja interaktivnosti. Jython je objektno orijentiran, višenitni i koristi Javin sakupljač smeća za učinkovito čišćenje memorije.

Jython uključuje većinu modula koji su dio jezika Python. Također može uvoziti i koristiti bilo koje klase iz Java knjižnica.

Pogledajmo brzo "Zdravo, Svijete!" primjer:

print "Zdravo, svijete!"

7.2. JRuby

JRuby je implementacija programskog jezika Ruby koji se izvodi na Java virtualnom stroju.

Jezik JRuby ima visoke performanse i višenitni je, s širokim rasponom dostupnih knjižnica iz Jave i Rubyja. Također, kombinira značajke iz oba jezika poput objektno orijentiranog programiranja i tipkanja patki.

Otisnimo “Hello, World!” u JRuby:

zahtijeva "java" stringHello = "Hello World" stavlja "# {stringHello.to_s}"

8. Zaključak

U ovom smo članku proučavali mnoge popularne JVM jezike zajedno s osnovnim primjerima koda. Ovi jezici implementiraju razne programske paradigme poput objektno orijentiranog, funkcionalnog, statičkog tipkanja, dinamičkog tipkanja.

Do sada pokazuje da čak i s JVM-om iz 1995. godine i dalje stoji kao izuzetno relevantna i uvjerljiva platforma za moderne programske jezike.


$config[zx-auto] not found$config[zx-overlay] not found