Daftar Isi
- Daftar Isi
- Mengapa Fomo ke Gleam?
- Artikel ini terjemahan dari News dari GLEAM
- Apa itu Gleam?
- Apa Keuntungan Menggunakan Gleam?
- Contoh kode Gleam dan Dongeng di dalamnya
- Apa yang Termasuk dalam Gleam v1?
- Apa Arti v1?
- Apa Rencana Gleam Setelah v1?
- Jargon Pemrograman
Mengapa Fomo ke Gleam?
Karena pengen gaya baru untuk provide server sistem tapi tetap scaleable, gak ke rust dulu karena aku liat bakal banyak PR yang harus aku pelajari jadi kita pelan-pelan menuju kesana dan mahami bener dibalik alasan para sepuh itu nge-rust. Di Gleam ini mungkin jadi safe place untuk orang2 yg gak pinter-pinter amat tapi pengen perfomance mayan mantap (Maksudku gak banyak Senior yang Galak-galak)
Gleam juga punya fitur-fitur yang bikin kita makin produktif. Contohnya nih, Gleam punya analisis statis dan sistem tipe yang terinspirasi dari bahasa-bahasa Nerdy kayak Elm, OCaml, sama Rust. Jadi kompilernya tuh bakal jadi kayak asisten coding pribadi gitu, ngasih masukan-masukan biar kita gak bingung. Mantep kan ada yang bantuin.
Oh iya, Gleam juga jalan di Erlang VM yang udah mature teruji jos buat ngejalanin sistem paling andal dan scalable di dunia, macam WhatsApp gitu. Enaknya lagi nih… Gleam bisa jalan di runtime JavaScript juga loh. Jadi kode Gleam bisa dipake di browser, app mobile. Satu bahasa buat semua.
Terakhir, Kok Rame di Twitter? Kok Punya Icon Imut? oke
Nah, kemarinkan Gleam udah rilis v1.0.0, jadi aku coba ulik. Nah itu aja sih alasan-alasanku FOMO ke Gleam. Kalo lu tertarik belajar bareng, gue siap nemenin bro. Kita eksplorasi Gleam sama-sama yuk. Gimana? Gas?
Artikel ini terjemahan dari News dari GLEAM
Apa itu Gleam?
Gleam adalah bahasa pemrograman open-source yang dirancang untuk membuat penulisan dan pengelolaan sistem perangkat lunak lebih mudah diprediksi, minim stres, dan menyenangkan.
Apa Keuntungan Menggunakan Gleam?
- Kesederhanaan: Syntax Gleam konsisten dan mudah dipelajari. Ia menghindari “magic” dan hanya menyediakan satu cara melakukan sesuatu, sehingga kode mudah dibaca dan dipahami.
- Analisis statis dan sistem tipe: Terinspirasi bahasa seperti Elm, OCaml, Rust. Kompiler berfungsi sebagai asisten pemrograman.
- Berjalan di Erlang VM: Gleam bisa menggerakkan sistem paling andal dan scalable seperti WhatsApp.
- Berjalan di runtime JavaScript: Kode Gleam bisa dipakai di browser, perangkat mobile, dll.
Louis Pilfold, lead developer Gleam mengatakan:
Gleam punya analisis statis yang robust dan sistem tipe yang terinspirasi bahasa seperti Elm, OCaml, dan Rust. Kompilernya berfungsi sebagai asisten pemrograman yang memberi Anda konteks tambahan. Dengan Gleam, refactoring menjadi minim risiko dan minim stres sehingga Anda bisa terus menyempurnakan kode seiring bertambahnya insight tentang problem yang dihadapi.
Gleam berjalan pada Erlang virtual machine (EVM) yang sudah mantap terujinya dalam menggerakkan beberapa sistem paling andal dan scalable di dunia, seperti WhatsApp. Gleam juga bisa jalan di runtime JavaScript sehingga kode Gleam dapat dipakai di browser, perangkat mobile, dan platform lainnya.
Contoh kode Gleam dan Dongeng di dalamnya
import gleam/json
import gleam/result.{try}
import my_app/person
import wisp.{type Request, type Response}
pub fn handle_request(req: Request, ctx: Context) -> Response {
use json <- wisp.require_json(req)
let result = {
use data <- try(person.decode(json))
use row <- try(person.insert(ctx.db, data))
Ok(person.to_json(row))
}
case result {
Ok(json) -> wisp.json_response(json, 201)
Error(_) -> wisp.unprocessable_entity()
}
}
Dongengnya
Mukashi Mukashi ~~~ pertama-tama kita impor beberapa modul yang dibutuhkan, seperti gleam/json
untuk menangani JSON, gleam/result
untuk menangani hasil operasi, my_app/person
yang mungkin berisi definisi tipe data dan fungsi terkait orang, dan wisp
untuk menangani request dan response.
Fungsi handle_request
ini menerima dua parameter: req
yang merupakan request dan ctx
yang merupakan konteks. Tujuannya adalah untuk menangani request yang masuk dan memberikan response yang sesuai.
Pertama, kita menggunakan wisp.require_json
untuk mengambil data JSON dari request. Kalau berhasil, kita lanjutkan prosesnya. Kalau tidak, ya sudah, kita berhenti di situ.
Selanjutnya, kita masuk ke blok let result
. Di sini, kita mencoba melakukan beberapa operasi. Pertama, kita coba decode data JSON menjadi tipe data person
menggunakan fungsi person.decode
. Kalau berhasil, kita lanjutkan. Kalau tidak, kita tangkap errornya.
Setelah itu, kita coba memasukkan data person
yang sudah di-decode ke dalam database menggunakan fungsi person.insert
. Konteks database diambil dari ctx.db
. Kalau berhasil, kita dapatkan baris data yang baru diinsert.
Terakhir, kita konversi baris data tersebut menjadi JSON menggunakan fungsi person.to_json
dan kita bungkus hasilnya dengan Ok
untuk menandakan operasi berhasil.
Nah, sekarang kita punya result
yang bisa berisi Ok(json)
kalau semuanya lancar, atau Error(_)
kalau ada yang tidak beres. Kita gunakan case
untuk menangani kedua kemungkinan tersebut.
Kalau result
berisi Ok(json)
, artinya semuanya berjalan mulus. Kita bisa memberikan response JSON dengan status 201 (Created) menggunakan wisp.json_response
.
Kalau result
berisi Error(_)
, berarti ada yang tidak beres. Kita bisa memberikan response “Unprocessable Entity” menggunakan wisp.unprocessable_entity()
untuk menandakan ada kesalahan dalam request.
Arigatou Gozaimasu ~~~
Apa yang Termasuk dalam Gleam v1?
Gleam v1 mencakup semua public API di repositori utama Gleam di GitHub, yaitu:
- Desain bahasa Gleam
- Kompiler Gleam
- Build tool Gleam
- Package manager Gleam
- Code formatter Gleam
- Language server Gleam
- Gleam compiler WASM API dan JavaScript binding
Standard library Gleam dan package lain yang dikelola tim inti juga akan segera merilis v1.
Apa Arti v1?
v1 adalah pernyataan tentang stabilitas Gleam dan kesiapannya untuk sistem produksi. Gleam mengikuti semantic versioning dan akan menjaga backward compatibility sebisa mungkin, kecuali untuk masalah keamanan atau soundness yang kritis.
Apa Rencana Gleam Setelah v1?
Fokus Gleam setelah v1 adalah produktivitas pengguna dan keberlanjutan proyek. Untuk produktivitas, Gleam akan menghindari breaking changes dan language bloat, serta meningkatkan developer experience terutama di language server, pengembangan library, dan dokumentasi.
Untuk sustainability, sebagai proyek komunitas dengan tim kecil, efisiensi sangat penting. Dokumentasi internal juga diperhatikan agar kontributor mudah menambah kode. Diversifikasi pendanaan dari sponsor dan revenue stream lain juga diupayakan, serta memberi reward kepada kontributor reguler.
Jargon Pemrograman
Berikut adalah daftar dan penjelasan singkat jargon pemrograman yang muncul dalam artikel:
-
Open-source: Model pengembangan software yang membuka akses ke source code-nya, memungkinkan kolaborasi dari komunitas.
-
Syntax: Aturan struktur kode yang valid dalam sebuah bahasa pemrograman.
-
Statically typed: Properti bahasa di mana tipe variabel diperiksa saat compile time.
-
Type system: Aturan yang menentukan properti tipe dalam bahasa.
-
Runtime: Lingkungan saat program dieksekusi, bukan saat dikompilasi.
-
Virtual machine: Program yang berjalan di atas sistem operasi dan mengeksekusi program lain.
-
Package manager: Tool untuk menginstal, mengonfigurasi, dan mengelola dependencies (library, framework, tools).
-
Build tool: Tool untuk mengotomasi kompilasi, linking, testing, deployment aplikasi.
-
Compiler: Program yang menerjemahkan kode dari bahasa pemrograman ke bahasa lain yang bisa dijalankan komputer.
-
Language server: Program yang menyediakan fitur IDE seperti autocomplete, definisi simbol, dan refactoring.
-
WASM (WebAssembly): Format biner untuk mengeksekusi kode di web browser.
-
Binding: Wrapper yang memungkinkan kode dalam satu bahasa memanggil kode dalam bahasa lain.
-
Standard library: Koleksi modul dasar yang disertakan dengan instalasi bahasa.
-
Breaking change: Perubahan yang membuat kode yang sebelumnya valid menjadi tidak bisa dikompilasi/berjalan.
-
Backward compatibility: Kemampuan sistem, produk, atau teknologi untuk kompatibel dengan input, data, atau hardware/software versi sebelumnya.
-
Semantic versioning: Konvensi penamaan versi software yang mengindikasikan tingkat backward compatibility.
-
Language bloat: Fenomena penambahan fitur yang berlebihan hingga membuat bahasa jadi terlalu kompleks.
-
Beta release: Rilis software yang biasanya masih memiliki bugs dan belum lengkap fiturnya.
-
Stable release: Versi akhir software yang dirilis ke publik setelah masa pengembangan dan pengujian ekstensif.
-
Markup language: Sistem untuk anotasi dokumen dengan syntax yang dibedakan dari konten, seperti HTML atau Markdown.
-
Search engine optimization (SEO): Praktik meningkatkan kuantitas dan kualitas traffic ke website melalui hasil pencarian organik.
-
Cohesion: Sejauh mana elemen dalam modul/kelas/fungsi saling terkait dan fokus menjalankan tugas tunggal.