2 poin oleh GN⁺ 2025-07-11 | Belum ada komentar. | Bagikan ke WhatsApp
  • Flix adalah bahasa berorientasi efek yang dikembangkan oleh Aarhus University dan komunitas open source, menggabungkan pemrograman fungsional, imperatif, dan logika dalam satu bahasa
  • Intinya adalah sistem efek yang menangani efek samping di tingkat tipe, meningkatkan modularitas dan kemudahan penalaran melalui pelacakan kemurnian, efek buatan pengguna, handler, dan multi-shot resumptions
  • Permukaan bahasanya sangat luas, mencakup algebraic data types, pattern matching, record yang dapat diperluas, trait, higher-kinded types, associated types dan effects, konkurensi terstruktur, interoperabilitas Java, hingga Datalog bawaan
  • Pustaka standarnya menyediakan lebih dari 3.100 fungsi, dan juga dapat mengakses ekosistem Java melalui Maven, sehingga ditujukan untuk penggunaan yang lebih luas, bukan sekadar bahasa riset
  • Kompilernya menargetkan bytecode JVM serta memiliki arsitektur paralel dan inkremental, dengan klaim peningkatan kecepatan 5x–7x pada mesin 24-core dan throughput 60.159 lines/sec pada Apple M2 Pro/OpenJDK 21

Arah bahasa Flix

  • Flix adalah bahasa berorientasi efek berbasis prinsip, yang menggabungkan pemrograman fungsional, imperatif, dan logika
  • Pengembang utamanya adalah Aarhus University dan komunitas kontributor open source
  • Sistem efek memodelkan efek samping secara eksplisit dan menjadi poros utama bahasa bertipe statis untuk membantu modularitas dan penalaran program
  • Melalui efek buatan pengguna dan handler, programmer dapat mengimplementasikan sendiri struktur kontrol
  • Flix menonjolkan implementasi yang matang di antara bahasa berorientasi efek, pustaka standar yang luas, dokumentasi terperinci, dan dukungan alat yang kuat

Tipe, kemurnian, dan sistem efek

  • Flix mendukung algebraic data types dan pattern matching, elemen dasar pemrograman fungsional
  • Tuple dan record didukung secara bawaan, dengan record menggunakan structural typing dan dapat diperluas
  • Kompiler melacak kemurnian semua ekspresi dalam program secara presisi
    • Jika sebuah ekspresi murni, ada jaminan bahwa ia tidak memiliki efek samping dan bersifat referentially transparent
  • Bahkan pada fungsi tingkat tinggi, kemurnian tetap dilacak melalui polimorfisme efek
    • Misalnya, kemurnian List.map bergantung pada kemurnian fungsi f yang diterima sebagai argumen
  • Efek aljabar memungkinkan efek buatan pengguna dan handler
    • Flix secara khusus mendukung multi-shot resumptions
    • Effect handler digunakan untuk meningkatkan penalaran program, modularitas, dan kemudahan pengujian

Mutasi lokal berbasis region dan refleksi kemurnian

  • Flix mendukung mutasi lokal berbasis region, sehingga status yang dapat diubah dan operasi destruktif bisa digunakan secara internal namun tetap terlihat sebagai fungsi murni dari luar
  • Ini cocok untuk fungsi yang lebih alami ditulis dengan data mutable, atau ketika struktur data mutable lebih efisien, seperti pada algoritme pengurutan
  • Refleksi kemurnian adalah konstruksi metaprogramming di mana fungsi tingkat tinggi memeriksa kemurnian argumen fungsi dan mengubah perilakunya berdasarkan informasi tersebut
    • DelayList.map mengubah perilaku antara evaluasi langsung dan evaluasi tertunda tergantung pada kemurnian fungsi argumennya
    • Bahkan jika pustaka secara internal memilih evaluasi tertunda atau paralel, makna dari sudut pandang klien dapat tetap tidak berubah

Paralelisme, konkurensi, dan abstraksi

  • Flix memudahkan evaluasi kode murni secara paralel, dan implementasi paralel List.map dapat ditulis dengan konstruksi par
  • Konstruksi par secara internal menggunakan VirtualThread yang ringan
  • Flix mendukung konkurensi terstruktur, sehingga thread yang dibuat di dalam region tertentu tidak dapat bertahan melampaui siklus hidup region tersebut
    • Dalam contoh, dua thread dibuat di dalam region baru bernama rc
    • Alur kontrol tidak akan keluar dari region sebelum kedua thread selesai
  • Abstraksi tipe untuk operasi umum menggunakan trait
    • Trait Eq merepresentasikan konsep kesetaraan dan digunakan di seluruh pustaka standar
  • Higher-kinded types memungkinkan abstraksi atas type constructor
    • Option dan List sama-sama mengimplementasikan Foldable
    • Pustaka standar mencakup trait umum seperti Monoid, Functor, dan Foldable

Associated types, associated effects, dan for-yield

  • Flix mendukung associated types, yang memungkinkan tipe pada signature instance bergantung pada tipe instance
    • Contoh trait Coll menunjukkan bahwa associated type Elm memungkinkan setiap instance koleksi mendefinisikan tipe elemennya sendiri
  • Associated effects membuat efek dari anggota trait bergantung pada tipe instance
    • Ini memudahkan abstraksi bersama untuk operasi murni dan operasi berefek, serta struktur data mutable dan immutable
    • Jika associated effect Aef ditambahkan ke trait Coll, instance koleksi mutable dapat ditambahkan
  • forM-yield adalah konstruksi monadik yang mirip dengan for-comprehension di Scala dan notasi do di Haskell
    • Ini adalah gula sintaks untuk menggunakan point dan flatMap yang disediakan trait Monad
  • forA adalah ekspresi aplikatif berbasis trait Applicative
    • Ini membantu menulis kode penanganan error dengan mudah menggunakan tipe data Validation[e, t]

Interoperabilitas Java dan Datalog

  • Flix mendukung interoperabilitas Java sehingga dapat menggunakan kembali Java Standard Library dan kode dalam ekosistem Java
    • Termasuk akses ke ekosistem melalui Maven
    • Mendukung pembuatan objek, pemanggilan metode, exception, serta ekstensi class dan interface
  • Dukungan Datalog bawaan adalah salah satu fitur khas Flix
    • Datalog dapat mengekspresikan secara ringkas berbagai persoalan fixpoint, termasuk masalah keterjangkauan graf
  • Constraint Datalog adalah nilai kelas satu
    • Dapat diteruskan ke fungsi atau dikembalikan dari fungsi
    • Dapat disimpan dalam struktur data
    • Dapat dikomposisikan dengan constraint Datalog lain dan diselesaikan
    • Hal ini memungkinkan ekspresi keluarga program Datalog
  • Flix juga mendukung constraint Datalog dengan semantik lattice yang lebih kaya
    • Ada contoh perhitungan tanggal pengiriman untuk komponen dan subkomponen
    • Mobil bergantung pada chassis dan engine, dan hanya bisa dirakit setelah menunggu perakitan tiap komponen
    • Subkomponen juga bisa bergantung pada subkomponen lain, sehingga masalahnya bersifat rekursif
  • Constraint Datalog dengan semantik lattice adalah salah satu fitur lanjutan Flix dan membutuhkan pengetahuan latar tentang teori lattice dan fixpoint

Pustaka standar dan daftar fitur

  • Flix menyertakan pustaka standar dengan lebih dari 3.100 fungsi
    • Modul List menyediakan lebih dari 100 fungsi
    • Trait Foldable menyediakan lebih dari 47 fungsi
    • Seluruh pustaka dapat dijelajahi di api.flix.dev
  • Daftar fitur mencakup hal-hal berikut
    • Algebraic data types, pattern matching, fungsi kelas satu
    • Record yang dapat diperluas, polimorfisme parametrik
    • Trait, higher-kinded types, associated types dan effects
    • Polimorfisme efek dan sub-efek, refleksi kemurnian
    • Konkurensi gaya CSP, channel berbuffer dan tanpa buffer
    • Constraint Datalog kelas satu, interoperabilitas Java
    • Primitive type unboxed, sintaks berbasis kata kunci
    • forM, forA, expression hole
    • Kompilasi ke bytecode JVM, penghilangan tail call penuh
    • Arsitektur kompiler yang tangguh dan paralel, error yang mudah dibaca manusia

Arsitektur kompiler dan performa

  • Kompiler Flix memiliki arsitektur tangguh, inkremental, dan paralel
  • Semua tahap kompiler berjalan paralel dan dapat memanfaatkan peningkatan kecepatan tiap tahap pada mesin 24-core
  • Pada mesin multicore, peningkatan kecepatan 5x–7x dimungkinkan
  • Saat mengompilasi ulang kode yang sudah pernah dikompilasi dalam instance kompiler yang sama, kompilasi inkremental dapat memberikan peningkatan kecepatan yang signifikan
  • Angka performa berbasis Apple M2 Pro CPU 10-core dan OpenJDK 21 adalah sebagai berikut
    • Throughput kompiler keseluruhan: 60.159 lines/sec
    • Throughput frontend saja: 140.382 lines/sec
    • Perintah reproduksi adalah java -jar flix.jar Xperf --n 21 dan java -jar flix.jar Xperf --frontend --n 21
  • Performa ini dicapai sambil tetap mendukung fitur bahasa yang mahal secara komputasional seperti inferensi tipe dan efek, monomorphization, dan optimisasi seluruh program
  • Performa kompiler terutama ditentukan oleh performa CPU dan bandwidth memori

Dukungan Visual Studio Code dan integrasi alat

  • Kompiler Flix terintegrasi dengan Visual Studio Code untuk menyediakan lingkungan pengembangan
  • Ekstensi VSCode menggunakan kompiler Flix yang sebenarnya, sehingga ada korespondensi 1:1 antara ekstensi dan kompiler
    • Jika VSCode tidak melaporkan error, maka memang tidak ada error
    • Jika tidak ada error, VSCode juga tidak akan melaporkan error palsu
  • Ekstensi VSCode mendukung fitur berikut
    • Penyorotan sintaks berbasis semantik
    • Diagnostik error kompiler inline
    • Autocomplete saat mengetik, autocomplete sadar konteks, autocomplete instance trait, penyelesaian hole berbasis tipe
    • Snippet dan inlay hints
    • Hover yang menampilkan tipe dan efek ekspresi
    • Navigasi ke fungsi, variabel lokal, dan definisi enum
    • Pencarian referensi fungsi, variabel lokal, enum, dan implementasi trait
    • Daftar simbol dokumen dan workspace
    • Penggantian nama variabel lokal dan nama fungsi
    • Menjalankan main dan test dari editor
  • Flix menanamkan banyak alat langsung ke dalam kompiler
    • OCaml menggunakan ocaml-lsp untuk LSP, utop untuk REPL, dune sebagai build tool, dan opam sebagai package manager
    • Haskell menggunakan HLS untuk LSP, ghci untuk REPL, cabal dan stack sebagai build tool serta package manager, dan Hackage sebagai package repository
    • Flix menyediakan kompiler, LSP, REPL, build tool, dan package manager semuanya lewat flix, dengan GitHub sebagai package repository

Status pengembangan, target JVM, dan skala proyek

  • Flix dikembangkan dan dipelihara oleh para peneliti bahasa pemrograman di Aarhus University, Denmark
  • Institusi mitranya adalah University of Waterloo, University of Tubingen, Jerman, dan Copenhagen University, Denmark
  • Partisipasi pengembangan dari komunitas kontributor open source di seluruh dunia terus meningkat, dan kontribusi terbuka untuk siapa pun
  • Statistik proyek adalah sebagai berikut
    • Pull request yang telah di-merge: lebih dari 4.900
    • Issue yang telah diselesaikan: lebih dari 3.100
    • Kontributor: lebih dari 70 orang
    • Codebase kompiler: lebih dari 272.000 baris
  • Flix menargetkan JVM
    • JVM memiliki implementasi open source dan komersial yang telah terbukti seperti OpenJDK, J9, Azul, dan Graal
    • Dapat digunakan di Mac, Linux, dan Windows
    • JVM modern menyediakan berbagai garbage collector modern
    • Dukungan konkurensi dan paralelismenya baik, termasuk lightweight thread di Java 21
    • Tersedia dukungan alat seperti debugger dan profiler
    • Integrasi Maven memberi akses ke ekosistem paket Java platform yang kaya
  • Total pendanaan mencapai 1,1 juta euro, membantu menjamin keberlanjutan dan independensi proyek

Belum ada komentar.

Belum ada komentar.