Kotlin pertama kali muncul pada tahun 2011, dan menggemparkan dunia coding — Saya pertama kali mendengar bahasa ini setahun yang lalu, yang secara kebetulan terjadi tak lama setelah Google mendeklarasikan Kotlin sebagai bahasa resmi Android. Beberapa “ledakan besar” telah terjadi sejak saat itu, dan proyeksi saat ini memperkirakan penggunaan global akan terus meningkat. Di bawah ini adalah rincian repositori Github berdasarkan bahasa tahun ini:

Dikembangkan oleh tim kecil JetBrains di St. Petersburg, Kotlin adalah bahasa dengan tipe statis yang:

  • Berjalan di JVM
  • Dapat dioperasikan dengan Java
  • Mengungkapkan ketidakstabilan antara paradigma berorientasi objek dan fungsional

Saya selalu menganggap diri saya sebagai pembuat kode dengan latar belakang imperatif, dan saya tidak akan pernah mencapai status pemrograman fungsional. Tentu saja, selalu ada lelucon bahwa jika Anda benar-benar memahami pemrograman fungsional, Anda tidak dapat menjelaskannya kepada orang lain. Saya tidak pernah membayangkan bahasa yang memungkinkan fluiditas dan berubah menjadi versi dua dunia yang pragmatis dan kompatibel.

Hasilnya adalah ada lebih banyak pengguna di komunitas yang berupaya memahami kedua dunia tersebut. Dukungan institusi telah membantu menanggung beban dalam memberikan dukungan bagi komunitas yang berkembang pesat dan membantu memenangkan kepercayaan industri dalam menggunakan Kotlin dalam perangkat lunak skala besar sistem dari perusahaan menyukai:

  • Pinterest
  • Kelas
  • Uber
  • Penting
  • Atlas

Saya cukup beruntung bisa menghadiri KotlinConf tahun ini, namun bukan konten saya sendiri yang membuat saya bersemangat. Dalam setiap ceramah yang saya hadiri, saya menyadari sedikit demi sedikit bahwa karena Kotlin adalah bahasa yang kuat, orang-orang telah mampu mengatasi dan melampaui batasan yang sebelumnya ditetapkan dalam ilmu komputer.

Mungkin hal ini disebabkan oleh semakin banyaknya komunitas yang berkembang: mungkin hal ini terbukti dari evolusi konten KotlinConf — namun saya merasa bahwa Kotlin mungkin merupakan kumpulan ilmu data berikutnya.

Saya menyesal harus mengatakan bahwa sangat menyiksa harus memilih antara pembicaraan mana yang dapat saya hadiri (untungnya, semua pembicaraan telah direkam).

Kevin Most menemukan bahwa, tidak seperti pemroses anotasi, menulis plugin kompiler Anda sendiri memungkinkan Anda mengubah kode yang ada saat runtime.

Thomas Nield menemukan cara untuk memecahkan masalah penjadwalan: beralih antara optimasi dan algoritma serakah dengan memanaskan kembali suhu setelah mencapai suhu minimum lokal.

Roman Elizarov menunjukkan bagaimana fitur baru Kotlin 1.3 Coroutine dapat membantu mengelola masalah konkurensi dan penjadwalan di kehidupan nyata.

FP membantu memelihara perangkat lunak yang dapat diskalakan

Pemrograman Fungsional (FP) memiliki manfaat yang menciptakan tumpukan data yang lebih stabil untuk perangkat lunak yang semakin besar ukuran dan kompleksitasnya:

  1. Fungsi murni mudah untuk diuji. Karena fungsi murni dapat bertindak independen terhadap fungsi murni lainnya, menulis pengujian unit untuk algoritme menjadi lebih mudah dari sebelumnya.
  2. Pemrograman fungsional cocok untuk pemrograman konkurensi dan terdistribusi karena sifatnya yang deterministik. Fitur-fitur ini juga sangat berguna untuk pembelajaran mesin!

Pengetikan statis & keamanan nol meningkatkan stabilitas waktu proses

Keamanan tipe dan keamanan nol sangat penting untuk aplikasi skala perusahaan besar. Sebagai bahasa yang diketik secara statis, Kotlin sudah memiliki keunggulan dalam menjadi lebih aman dari kegagalan dengan compiler untuk pemeriksaan tipe, yang memberi jalan bagi sistem yang lebih stabil. Bahasa yang dikompilasi juga memberikan kinerja yang lebih baik untuk menangani sistem data besar.

Kotlin juga memiliki keamanan nol, kesalahan bernilai miliaran dolar yang masih dialami Java hingga saat ini dengan NPE yang menyebabkan crash runtime.

Sabuk pengaman? Memeriksa. Helm? Memeriksa.

Kotlin cocok untuk konkurensi & paralelisme

Konkurensi dan paralelisme sangat penting untuk kesehatan data dan efisiensi dalam sistem perangkat lunak besar. Konkurensi mendeskripsikan sistem yang dapat menangani beberapa thread sekaligus dan kemampuannya menjalankan fungsi yang tidak sesuai urutan serta mengharapkan masukan yang sama.

Setahun yang lalu, saya akan terkejut dengan gagasan bahwa orang-orang berusaha untuk menggunakan val secara eksklusif dibandingkan var — namun kekekalan dapat membuat bekerja dengan thread bersamaan jauh lebih mudah dikelola.

Katakanlah Anda sedang dalam penerbangan panjang dan Anda harus berbagi kamar kecil dengan kru dan penumpang lainnya. Biasanya, aturan satu kamar mandi adalah hanya satu orang yang boleh berada di kamar kecil dalam satu waktu. Dan mungkin mencuci tangan.

Anda tidak ingin orang lain mendatangi Anda saat menggunakan kamar kecil. Beberapa pemrogram mungkin mengelola konkurensi dengan TDD (Apakah kamar kecil terisi?). Orang lain mungkin menggunakan kunci (kunci pintu) atau semaphore (VACANT/IN USE memberi tahu orang-orang untuk mencoba membuka pintu atau tidak) untuk menangani banyak thread, atau orang, mengakses satu thread sumber.

Demikian pula, jika dua thread mengakses sumber daya yang sama dan bersifat mutable, ada kemungkinan sumber daya tersebut dimodifikasi sedemikian rupa sehingga menyebabkan kegagalan dalam mengakses sesuatu yang tidak lagi tersedia, mendapatkan hasil yang berbeda untuk masukan yang sama, atau bahkan keluar dari jalur. membatasi pengecualian dari perhitungan.

Konkurensi tidak sama dengan paralelisme: meskipun konkurensi berkaitan dengan determinisme, paralelisme berkaitan dengan bagaimana banyak tugas diselesaikan secara bersamaan.

Fitur baru Kotlin yang menarik coroutinemembantu mengelola paralelisme dalam lingkungan asinkron. Coroutine mengelola paralelisme dengan pengoptimalan penjadwalan otomatis. Mereka juga dapat menyusun konkurensi dengan cakupan. Thread reguler memiliki jumlah thread yang terbatas, sehingga dapat diblokir tanpa penjadwalan. Dengan coroutine, kita tidak perlu khawatir tentang status bersama yang dapat diubah dan sinkronisasi, dan Anda dapat memisahkan coroutine sebanyak yang Anda inginkan.

Terus gimana?

Jika Anda penasaran, ada daftar perpustakaan dan kerangka kerja populer di Kotlin di mana Anda dapat menjelajahi apa pun yang mungkin Anda minati.

Fakta bahwa para pembuat kode berupaya memecahkan hal-hal yang mustahil dengan Kotlin bukanlah suatu kebetulan. Kami belum siap untuk menyebut diri kami sebagai tumpukan data, namun Kotlin telah mulai menangani komponen-komponen yang diperlukan untuk perangkat lunak yang kuat dan stabil yang diperlukan untuk menangani sistem data yang besar. Saya tidak dapat memahami di mana Kotlin berada. mungkin satu tahun dari sekarang, tapi saya tentu saja menantikan untuk terus berkembang bersama komunitas dan berkontribusi semampu saya!