Hei, itu! 👋

Pada postingan kali ini saya ingin memperkenalkan bahasa pemrograman baru yang telah saya kerjakan sejak beberapa bulan terakhir. Saya ingin Anda bertemu *tolong bayangkan drum roll di sini, tolong cantik? Terima kasih :-)*:

Lihat di sini: https://souris-dev.github.io/samosac-jvm/

Anda juga dapat mencobanya di sini di browser: http://playground.samosa-lang.org (harap dicatat bahwa taman bermain mungkin tidak berfungsi dengan baik di ponsel karena editor kode yang digunakan di dalamnya, monaco, tidak resmi kompatibel dengan browser ponsel pintar).

Untuk sumber kompiler, kunjungi repositori GitHub: https://github.com/souris-dev/samosac-jvm (masalah, kontribusi, dan saran dipersilakan :-)).

Mengapa diberi nama “samosa”?

Samosa (diucapkan “some-o-saah”; “saah” di sini diucapkan seperti kata “asam”, tetapi tanpa “r”) adalah camilan khas India. Itu bisa dimakan dan rasanya enak. Samosa enak dengan chai. Apakah kita memerlukan alasan lain? :-)

Saya akui, mungkin saya sedikit lapar saat menamainya.

Tapi, ada berbagai macam kerangka kerja dan perpustakaan yang tidak bisa dimakan, jadi menurut saya akan lebih baik jika memiliki bahasa yang membuat Anda lapar dan memiliki nama yang menyenangkan. Dan karenanya, camilannya.

Awalnya, proyek ini diberi nama slang,tetapi kemudian saya mengetahui bahwa sudah ada bahasa yang disebut slangyang digunakan oleh Goldman Sachs secara internal. Hal ini mendorong perubahan nama proyek menjadi samosa,atau alternatifnya, samosa-lang.

Catatan: Nama kompilernya adalah samosac, dan bahasanya diberi nama samosa.

Tentang Bahasa

Samosa adalah ketik statis bahasa pemrograman tujuan umum sumber terbuka yang berjalan di JVM (ya, Mesin Virtual Java lama kami yang bagus). Ia bekerja dengan cara yang sama seperti bahasa berbasis JVM lainnya.

Kompilernya, samosac ditulis dalam Kotlin dan Java, dan saat ini tersedia sebagai JAR yang dapat dieksekusi. Opsi instalasi yang lebih mudah akan segera tersedia.

Bahasa ini saat ini masih dalam tahap primitif (dalam rilis alfa pertama) dan mendukung sebagian besar konstruksi dasar dan beberapa fungsi bawaan.

Anda dapat memeriksa dokumen di https://souris-dev.github.io/samosac-jvm/ untuk melihat daftar terbaru fitur yang didukung oleh bahasa tersebut. Untuk mencobanya di browser, kunjungi http://playground.samosa-lang.org.

Tetapi mengapa?

Saya membuat bahasa pemrograman ini karena saya ingin menantang diri saya sendiri, dan karena saya cukup tertarik dengan desain compiler akhir-akhir ini. Saya awalnya memulai ini untuk memahami cara kerja kompiler. Saya yakin hasilnya sudah cukup baik, meski masih memerlukan banyak perbaikan.

Samosa saat ini berbasis JVM sehingga dapat mendukung interoperabilitas dengan Java (ini adalah fitur yang akan datang.) Hal ini akan memungkinkan bahasa tersebut menggunakan ekosistem Java yang sudah matang di masa depan. Karena bytecode JVM bersifat lintas platform, kode samosa dapat berjalan pada sistem operasi yang dapat menjalankan JRE.

Bagaimana tampilannya?

Jika Anda ingin tahu seperti apa samosa, camilan itu, maka Google adalah teman terbaik Anda (Saya tidak pandai menggambar atau saya akan menaruh gambarnya di sini.)

Sintaks samosa, bagaimanapun bahasa pemrogramannya, akan terasa sangat familiar bagi siapa saja yang pernah menggunakan C++, Java, atau bahasa pemrograman lain dengan sintaks serupa. Sebagai gambaran, berikut adalah contoh program yang menampilkan N angka pertama dari deret Fibonacci (di mana N adalah input yang diambil dari pengguna):

(Contoh di atas menggunakan rekursi, tapi tentu saja Anda bisa menggunakan implementasi berulang juga.)

Apa yang baru?

Itu pertanyaan yang bagus.

Saat ini, hal yang paling menonjol dari samosa adalah dukungan bawaan untuk eksekusi pernyataan probabilistik.

Artinya bagi kita, kita dapat menentukan probabilitas suatu pernyataan dieksekusi (saat runtime) dalam kode. Probabilitasnya bisa berupa konstanta atau sesuatu yang dievaluasi saat runtime. Samosa menyebut pernyataan-pernyataan sederhana yang mungkin ini.

Sebagai alternatif, kita dapat menentukan pernyataan lain yang dieksekusi secara probabilistik jika pernyataan pertama tidak dieksekusi. Samosa menyebut pernyataan sederhana yang mungkin ini dengan alternatif.

Lihat dokumen untuk detail lebih lanjut: https://souris-dev.github.io/samosac-jvm/probables/.

Kedua jenis pernyataan kemungkinan ini dapat dicampur dan disarangkan (lihat https://souris-dev.github.io/samosac-jvm/probables/nested_probables.html untuk contohnya). Penggunaan kemungkinan pernyataan majemuk seperti kemungkinan perulangan while dan kemungkinan pernyataan if juga akan dimungkinkan dalam waktu dekat (fitur ini sedang dalam pengembangan).

Rilis mendatang, di antara fitur-fitur lainnya, juga akan menambahkan dukungan untuk pernyataan kemungkinan bersyarat yang akan memungkinkan faktor probabilitas suatu pernyataan bergantung pada apakah beberapa pernyataan kemungkinan sebelumnya dieksekusi atau tidak.

Hal ini memberi kita cara baru dalam memperkenalkan pengacakan terkontrol dalam program. Satu kemungkinan pernyataan sederhana mungkin tidak terlalu menyenangkan, tetapi kemampuan menyusunnya dengan mudah akan membuka pintu menuju banyak kesenangan!

Dan sekarang Anda akhirnya bisa menyalahkan keberuntungan Anda jika program Anda tidak memberikan hasil yang diinginkan :-)

Apa yang akan terjadi?

Ada banyak sekali fitur yang direncanakan untuk rilis mendatang. Peta jalan fitur belum diselesaikan, namun beberapa fitur yang perlu dipertimbangkan adalah:

  1. Pernyataan kemungkinan bersyarat
  2. Pernyataan majemuk yang mungkin
  3. Pernyataan yang ditangguhkan (terinspirasi dari Go)
  4. Perulangan For (saat ini hanya perulangan while yang tersedia)
  5. Array
  6. Pernyataan yang dapat disimpan/pernyataan gabungan, yang memungkinkan Anda menyimpan pernyataan atau pernyataan gabungan sebagai templat dalam sebuah variabel dan menempatkannya di tempat-tempat dalam program dengan modifikasi pada parameter templat.
  7. Operator idk yang memungkinkan Anda mengkompilasi versi berbeda dari program yang sama.

Beberapa perbaikan yang direncanakan untuk masa depan adalah:

  1. Dukungan debugging menggunakan jdb (masih dapat dilakukan secara teknis, tetapi tidak didukung secara eksplisit).
  2. Pesan kesalahan yang lebih baik.

Serangkaian postingan blog yang menjelaskan arsitektur dan desain kompiler samosa akan segera hadir :-)

Saya harap Anda menikmati postingannya. Komentar dan saran dipersilakan! Tinggalkan tepuk tangan dan bintang di repositori GitHub (https://github.com/souris-dev/samosac-jvm) jika menurut Anda ini menarik :-)

Saya menantikan untuk menulis posting saya berikutnya di mana saya mulai menjelaskan kompilernya.

Sampai saat itu, selamat tinggal!