Kotlin posiada słowo kluczowe fun do definiowania funkcji, Scala używa słowa def, a Java… W Javie nie ma słowa kluczowego. Ponadto – w Javie tworząc zmienną, jej typ jest po lewej stronie np:
int a = 20;
Ale już Scala i Kotlin mają konwencję odwrotną i najpierw mamy słowo kluczowe, potem nazwę zmiennej, a dopiero na samym końcu typ:
val a: Int = 20 // dla Kotlina
var a: Int = 20 // dla Scali
Między nimi jednak też są istotne różnice.
Ponadto te trzy języki programowania prezentują różne paradygmaty programowania. Java jest mocno obiektowa pomimo ogromnej liczby zabiegów ze strony twórców próbujących wkładać z nią elementy funkcyjne. Inaczej ma się sprawa z Kotlinem i Scalą – tutaj mamy już elementy nie tylko obiektowe, ale też funkcyjne, a nawet imperatywne!
W takim razie….
Spoiwem tych trzech technologii jest sposób uruchamiania kodu – każdy z tych trzech języków do uruchamiania programu wykorzystuję coś co nazywamy kodem pośrednim (ang. bytecode). Na pewno widzieliście tajemnicze pliki *.class? To właśnie o nich teraz mówimy. I to właśnie one pojawiają się w każdym w tych języków.
Kod pośredni to taki język programowania, który już jest znacznie mniej czytelny dla programisty niż wspomniane wcześniej języki. Wprowadzenie go pozwala na szereg optymalizacji. A przede wszystkim jest on jeden i ten sam dla każdego systemu operacyjnego, co sprawia że programy pisane w tych językach są przenośne pomiędzy różnymi systemami.
Popatrzmy na chwilę na język C++ – tutaj sytuacja z uruchomieniem wygląda tak, że musimy kod skompilować. Tzn. cały zamienić na jego reprezentację binarną i wtedy możemy ją uruchomić. Niestety jeśli chcemy uruchomić skompilowany kod na innym systemie – to niestety się to nie uda – trzeba kompilować od początku, a uwierzcie – ten proces spokojnie może trwać kilka godzin.
W językach opartych na kodzie pośrednim następuje kompilacja naszych programów do owego kodu pośredniego i tak skompilowany program jest nadal przenośmy. Jesteśmy w stanie spokojnie go uruchomić a to dzięki programowi który nazywa się….
Program ten to ekosystem pozwalający na uruchomienie kodu pośredniego niezależnie od architektury procesora czy systemu operacyjnego. Poza oczywistą funkcją uruchamiania kodu dokonuje on szereg optymalizacji, które zdejmują z programisty konieczność pewnych rzeczy, np.
i naprawdę – wiele, wiele innych ciekawych rzeczy.
Więcej ciekawostek na ten temat możecie usłyszeć, np. na YouTube.
Kod pośredni wygląda np. tak:
i dodaje on do siebie dwie liczby – 15 i 20. A wynik wyświetla na ekranie.
Jak widać, z pozoru odległe od siebie języki programowania mogą być w rzeczywistości dokładnie tym samym. Technika którą przedstawiłem nie jest nowa i nie jest dedykowana tylko dla języków “Javowych”. Możemy ją spotkać chociażby w .Necie gdzie nosi nazwę CIL (Common Intermediate Language). Mimo innej nazwy – pomysł i efekty są takie same.
“Programista z ponad 7letnim doświadczeniem budowanym na językach takich jak Java, Python, Kotlin, PHP, JavaScript, SQL czy nawet Elixir. Entuzjasta rozumienia tego jak działają mechanizmy z których na co dzień korzystamy i tego jak możemy tę wiedzę przekuć w solidnie działające oprogramowanie. Od 10 lat, z różną intensywnością, prowadzę bloga https://mmazurek.dev. Najczęściej czytam książki, jeżdżę na rowerze czy po prostu siedzę ze znajomymi.”