- 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.mapbergantung pada kemurnian fungsifyang diterima sebagai argumen
- Misalnya, kemurnian
- 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.mapmengubah 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.mapdapat ditulis dengan konstruksipar - Konstruksi
parsecara 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
- Dalam contoh, dua thread dibuat di dalam region baru bernama
- Abstraksi tipe untuk operasi umum menggunakan trait
- Trait
Eqmerepresentasikan konsep kesetaraan dan digunakan di seluruh pustaka standar
- Trait
- Higher-kinded types memungkinkan abstraksi atas type constructor
OptiondanListsama-sama mengimplementasikanFoldable- Pustaka standar mencakup trait umum seperti
Monoid,Functor, danFoldable
Associated types, associated effects, dan for-yield
- Flix mendukung associated types, yang memungkinkan tipe pada signature instance bergantung pada tipe instance
- Contoh trait
Collmenunjukkan bahwa associated typeElmmemungkinkan setiap instance koleksi mendefinisikan tipe elemennya sendiri
- Contoh trait
- 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
Aefditambahkan ke traitColl, instance koleksi mutable dapat ditambahkan
forM-yield adalah konstruksi monadik yang mirip denganfor-comprehension di Scala dan notasidodi Haskell- Ini adalah gula sintaks untuk menggunakan
pointdanflatMapyang disediakan traitMonad
- Ini adalah gula sintaks untuk menggunakan
forAadalah ekspresi aplikatif berbasis traitApplicative- Ini membantu menulis kode penanganan error dengan mudah menggunakan tipe data
Validation[e, t]
- Ini membantu menulis kode penanganan error dengan mudah menggunakan tipe data
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
Listmenyediakan lebih dari 100 fungsi - Trait
Foldablemenyediakan lebih dari 47 fungsi - Seluruh pustaka dapat dijelajahi di api.flix.dev
- Modul
- 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 21danjava -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-lspuntuk LSP,utopuntuk REPL,dunesebagai build tool, danopamsebagai package manager - Haskell menggunakan
HLSuntuk LSP,ghciuntuk REPL,cabaldanstacksebagai build tool serta package manager, danHackagesebagai package repository - Flix menyediakan kompiler, LSP, REPL, build tool, dan package manager semuanya lewat
flix, dengan GitHub sebagai package repository
- OCaml menggunakan
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.