Skip to content

Fomo Bareng ke Gleam v1.0.0

Updated: at 07.00

Daftar Isi

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?

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:

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:

  1. Open-source: Model pengembangan software yang membuka akses ke source code-nya, memungkinkan kolaborasi dari komunitas.

  2. Syntax: Aturan struktur kode yang valid dalam sebuah bahasa pemrograman.

  3. Statically typed: Properti bahasa di mana tipe variabel diperiksa saat compile time.

  4. Type system: Aturan yang menentukan properti tipe dalam bahasa.

  5. Runtime: Lingkungan saat program dieksekusi, bukan saat dikompilasi.

  6. Virtual machine: Program yang berjalan di atas sistem operasi dan mengeksekusi program lain.

  7. Package manager: Tool untuk menginstal, mengonfigurasi, dan mengelola dependencies (library, framework, tools).

  8. Build tool: Tool untuk mengotomasi kompilasi, linking, testing, deployment aplikasi.

  9. Compiler: Program yang menerjemahkan kode dari bahasa pemrograman ke bahasa lain yang bisa dijalankan komputer.

  10. Language server: Program yang menyediakan fitur IDE seperti autocomplete, definisi simbol, dan refactoring.

  11. WASM (WebAssembly): Format biner untuk mengeksekusi kode di web browser.

  12. Binding: Wrapper yang memungkinkan kode dalam satu bahasa memanggil kode dalam bahasa lain.

  13. Standard library: Koleksi modul dasar yang disertakan dengan instalasi bahasa.

  14. Breaking change: Perubahan yang membuat kode yang sebelumnya valid menjadi tidak bisa dikompilasi/berjalan.

  15. Backward compatibility: Kemampuan sistem, produk, atau teknologi untuk kompatibel dengan input, data, atau hardware/software versi sebelumnya.

  16. Semantic versioning: Konvensi penamaan versi software yang mengindikasikan tingkat backward compatibility.

  17. Language bloat: Fenomena penambahan fitur yang berlebihan hingga membuat bahasa jadi terlalu kompleks.

  18. Beta release: Rilis software yang biasanya masih memiliki bugs dan belum lengkap fiturnya.

  19. Stable release: Versi akhir software yang dirilis ke publik setelah masa pengembangan dan pengujian ekstensif.

  20. Markup language: Sistem untuk anotasi dokumen dengan syntax yang dibedakan dari konten, seperti HTML atau Markdown.

  21. Search engine optimization (SEO): Praktik meningkatkan kuantitas dan kualitas traffic ke website melalui hasil pencarian organik.

  22. Cohesion: Sejauh mana elemen dalam modul/kelas/fungsi saling terkait dan fokus menjalankan tugas tunggal.