Obsypało nam w zeszłym tygodniu Kotlinowymi nowościami, dlatego w tym tygodniu mamy edycje poświęconą temu językowi.
1. Premiera Kotlin 1.9
Zacznijmy od największego ogłoszenia – ukazał się bowiem Kotlin 1.9.0 oferujący poza nowymi funkcjami znaczne ulepszenia dla nowego kompilatora K2.
Kompilator K2 dla JVM wyszdł z fazy alfa do fazy beta, wchodzi więc w fazę finalnych testów przed wersją Kotlin 2.0 – twórcy zachęcają do testowania własnych buildów Warto jednak zauważyć, że przy użyciu kompilatora K2 z wtyczką procesora adnotacji kapt, mimo ustawienia languageVersion
na 2.0, kapt będzie nadal korzystać ze starego kompilatora, automatycznie przełączając się na 1.9 i wyłączy niektóre kontrole kompatybilności wersji. Kontrole te są wyłączane tylko dla zadań kapt, podczas gdy wszystkie inne zadania kompilacji nadal korzystają z nowego kompilatora K2.
Aby zacząć eksperymentować z kompilatorem K2 w swoim projekcie, najlepiej ustawić properties Gradle kotlin.experimental.tryK2=true
, a całość komendy
./gradlew assemble -Pkotlin.experimental.tryK2=true
Ta nie tylko ustawia wersję języka na 2.0, ale aktualizuje również dane wynikowe kompilacji, dając dostęp do informacji, gdzie realnie udało się użyć K2.
Poza samą K2, jedną z najważniejszych zmian jest znaczne zmniejszenie rozmiaru kompilacji WebAssembly; podstawowy przykład Hello World w WebAssembly zajmuje rzekomo dziesięć razy mniej miejsca niż w Kotlin 1.8.20. A jak już mowa o WebAssembly, Kotlin 1.9.0 znacznie poprawia interoperacyjność WASM JavaScript, zachęcając do przejścia z typu Dynamic na JsAny. Jeśli chcecie spróbować jak to wszystko działa w praktyce, Kotlin Playground umożliwia zaś teraz testowanie kompilacji WebAssembly również online.
W samym języku pojawiło się również kilka zmian, z których największa to chyba stabilizacja propertiesa .entries
dostępnego teraz dla enumów jako bardziej wydajna alternatywa dla metody .values()
:
enum class Color(val colorName: String, val rgb: String) {
RED("Red", "#FF0000"),
ORANGE("Orange", "#FF7F00"),
YELLOW("Yellow", "#FFFF00")
}
fun findByRgb(rgb: String): Color? = Color.entries.find { it.rgb == rgb }
Wszystkie zmiany jak zwykle znajdziecie w oryginalnym ogłoszeniu oraz towarzyszącym mu jak zawsze video:
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Premiera Kotlin Notebook
Na początku odrobina teorii dla tych, co nie mieli okazji pracować z zespołami DataScience, które temat mają zwykle najbardziej obcykany – Notatniki programistyczne są narzędziami, które pozwalają na łączenie kodu, wizualizacji i opisowego tekstu w jednym, żywym dokumencie. Są używane głównie do eksploracji danych, notatniki tworzą interaktywne środowisko programowania, w którym programiści mogą szybko prototypować swój kod i na bieżąco widzieć wyniki, przeplatając go tekstowymi adnotacjami i wizualizacjami, aby dokumentować swój proces myślowy. Najpopularniejszym rozwiązaniem tego typu jest Jupyter Notebook, ale z różnych stron wyrasta mu konkurencja – również z tych nieco mniej oczekiwanych.
KotlinConf przyniosło bowiem ogłoszenie wtyczki Kotlin Notebook dla IntelliJ IDEA. W zeszłym tygodniu doszło zaś do oficjalnej premiery. Zaletą nad Jupyterem (przynajmniej z perspektywy fanów Intellij) jest bardzo mocna integracja z IDE, przy równoczesnej kompatybilności z środowiskiem Jupytera, dzięki wsparciu dla standardowego dla niego formatu plików .ipynb
, co umożliwia natywnym wsparciem renderowania na platformach takich jak GitHub czy Datalore JetBrains. Ponad standardowe możliwości jakie dają Notebooki, wtyczka ułatwia korzystanie z zależności, oferując wiele sposobów na dołączanie zewnętrznych bibliotek do projektu za pomocą dyrektywy %use
.
Sam bawiłem się rozwiązaniem wczoraj i muszą przyznać, że mając historycznie doświadczenie z Notebookami bardzo doceniam rozwiązanie Kotlina. Wszystko wydaje się działać out-of-the-box, a całość opiera się na udostępniony otwarcie Kotlin Kernel, którego można używać również ze zwykłym Jupyterem. Nie mamy więc do czynienia z niestety dość popularnym w świecie Kotlina Vendor Lock-inem.
Jak całość prezentuje się w akcji dobrze pokazuje towarzyszące premierze wideo:
3. Zestaw oficjalnych Kotlinowych edukacyjnych materiałów
Edukacja jest ważna. Dużo mówi się o tym, że piractwo Windows pomogło Microsoftowi zdominować rynek komputerów osobistych, uzależniając ludzi od swojego systemu już na wczesnym etapie pracy z komputerami, a darmowe oprogramowanie Autodesk dla studentów studiów inżynierskich pomogło uczynić z ich rozwiązań standard. Tak samo zespół Kotlina od samego początku stawia na edukację, dostarczając edukatorom odpowiednich narzędzi i zasobów do kształcenia nowej fali programistów Kotlin, walcząc z wyzwaniem (nie problemem!) jajka i kury.
Istotnym elementem tej inicjatywy jest zestaw materiałów zebranych w bezpłatny, semestralny program nauczania „Programming in Kotlin”, który jest prawdziwym skarbcem wiedzy i ćwiczeń, opracowany ponoć przez zespół ekspertów przez prawie rok. Kurs pokrywa wszystko, od podstaw Kotlin, po zaawansowane koncepcje takie jak programowanie równoległe, asynchroniczne i testowanie. Co więcej, materiały mają być aktualizowane i dostosowywane do ewolucji Kotlin, odpada więc potrzeba maintenance, a więc i ryzyka, że ktoś będzie uczyć jakiejś prehistorycznej wersji języka.
Przyznam, że w przeszłości sam kiedyś chciałem stworzyć warsztat lub kurs na temat Kotlin na potrzeby koła naukowego z mojej Alma Mater, ale bądźmy szczerzy, to jest dużo pracy i całość rozbiła się o długość doby – w końcu kurs od JetBrains tworzony był ponoć przez rok. Teraz, z tymi oficjalnymi zasobami, mam wrażenie, że cała inicjatywa mogłaby być dużo prostsza.
Zainstaluj teraz i czytaj tylko dobre teksty!
Oficjalny Kotlinowy sterownik do MongoDB
Ale żeby nie było, że tylko przepisuje Feed JetBrains, na końcu jeszcze jedna mała perełka spoza głównego offeringu twórców Kotlina. MongoDB ogłosiło bowiem wydanie ich własnego, oficjalnego sterownika do Kotlina.
Z jednej strony to nie jest tak, że nowe rozwiązanie otwiera drzwi przed jakimiś nowymi typami aplikacji, bo możliwość używania MongoDB w Kotlinowych aplikacjach było zawsze (o kilku alternatywach zresztą za chwilę). Jednocześnie jednak, Kotlin jest językiem na tyle odmiennym od Javy, że używanie rozwiązań przygotowanych dla takowej zawsze wiąże się z poczuciem pewnego „efektu Frankensteina”.
Sterownik dla Kotlina umożliwia bowiem np. użycie Data Class przy zwrotkach obiektów z MongoDB, kluczową cechą nowego sterownika jest też kompleksowa obsługa kotlinx.serialization
i serializera bson-kotlinx
, a także Korutyn – w przypadku tych ostatnich jednak trzeba uważać, bo jednak współbieżność nie za bardzo lubi się z bazami danych. Przeglądając dokumentacje projektu, jest w nim całkiem sporo asynchronicznych wywołań:
- wszelkie warianty
collect
, - wszystkie operacje w klasie
MongoCollection
, więc CRUDy oraz Bulk CRUDy startSession
,abortTransaction()
icommitTransaction()
i kilka innych.
Zanim zakończymy, dla porównania warto wspomnieć o alternatywnych rozwiązaniach, takich jak KMongo (dość popularny nieoficjalny kotlinowy wrapper nad javowy sterownik) oraz oczywiście oficjalny sterownik Java MongoDB. KMongo zapewnia obsługę korutyn oraz posiada DSL do obsługi MongoDB idiomatyczny dla Kotlina, ale jako biblioteka third-party nie raz pozostawał (i chyba nawet teraz pozostaje) w tyle za nowymi możliwościami MongoDB. Sterownik Java MongoDB oferuje obszerną dokumentację i większą bazę użytkowników, ale on znowu nie zapewnia API idiomatycznego dla Kotlin. Dlatego też nie zdziwię się, jeśli migracja do oficjalnego sterownika wyląduje na niejednym backlogu tech-debtowym.