PGO adalah sumber kompiler sumber yang menerjemahkan spesifikasi modular pluscal (yang menggunakan superset pluscal) ke dalam program GO.
Selain kompiler PGO, pohon sumber ini meliputi:
distsys
, yang digunakan oleh kode GO yang dihasilkan PGO, tersedia di distsys/
folder.systems/
folder, termasuk toko nilai kunci berbasis rakit.syntax/
folder.Anda dapat membaca lebih lanjut tentang aspek penelitian dari pekerjaan kami di makalah ASPLOS'23 kami, salinannya termasuk dalam repositori ini. Evaluasi kami terhadap PGO Distinguished Artefact Award di konferensi itu?
Kami juga memiliki beberapa video yang dapat Anda tonton:
PlusCal adalah bahasa untuk menentukan/memodelkan sistem bersamaan. Itu dirancang untuk membuatnya lebih mudah untuk menulis TLA+. Secara khusus, pluscal dapat dikompilasi ke dalam TLA+, yang dapat diperiksa terhadap properti sistem yang berguna (menggunakan Pemeriksa Model TLC). Misalnya, berikut adalah gudang formulasi solusi pluscal untuk masalah eksklusi timbal balik.
GO adalah bahasa berbasis C yang dikembangkan oleh Google untuk membangun sistem terdistribusi. Ini telah membangun dukungan untuk konkurensi dengan saluran, dan goroutine, yang membuatnya bagus untuk mengembangkan sistem terdistribusi.
Saat ini tidak ada alat yang sesuai dengan spec pluscal/tla+ dengan implementasi spec. PGO adalah alat yang bertujuan untuk menghubungkan spesifikasi dengan implementasi dengan menghasilkan kode GO berdasarkan spesifikasi yang ditulis dalam modular pluscal. Awalan "modular" berasal dari kebutuhan untuk membedakan deskripsi sistem dari model lingkungannya, yang diperlukan untuk pemeriksaan model. PGO memungkinkan terjemahan deskripsi modular pluscal dari sistem terdistribusi ke pluscal yang dapat diverifikasi, serta ke program GO yang setara secara semantik.
Aktif di bawah pengembangan. PGO mendukung kompilasi semua konstruksi aliran kontrol pluscal. PGO juga mendukung sebagian besar TLA+ tingkat nilai yang didukung oleh TLC. Lihat permintaan tarik dan masalah untuk dokumentasi pekerjaan yang sedang berlangsung.
Dalam keadaan pengembangan aktifnya, kami tidak memberikan rilis yang stabil. Untuk menjalankan PGO, cara terbaik adalah mengkloning repositori, dan, di cabang master, menjalankannya melalui alat pembuatan SBT:
$ sbt
> run [command-line arguments]
Lihat catatan penggunaan di bawah ini untuk argumen apa yang diterima program. Catatan: Jika Anda menjalankannya pada satu baris, maka Anda harus mengutip argumen, seperti dalam sbt run "[command-line arguments]"
.
Untuk mempelajari cara menggunakan PGO selama verifikasi, lihat halaman Penggunaan PGO (Peringatan: Pembaruan sedang berlangsung).
Untuk mode kompilasi alat dan bendera pada level tinggi, lihat di bawah.
Teks bantuan alat PGO dibaca:
PGo compiler
-h, --help Show help message
Subcommand: gogen
-o, --out-file <arg>
-p, --package-name <arg>
-s, --spec-file <arg>
-h, --help Show help message
Subcommand: pcalgen
-s, --spec-file <arg>
-h, --help Show help message
Sub-perintah gogen
meminta PGO menghasilkan file GO dari modul TLA+ MPCal yang mengandung MPCal. Sebagian besar penyesuaian tahap ini harus dilakukan dengan memilih parameter spesifik saat memanggil kode GO yang dihasilkan, jadi hanya ada beberapa opsi untuk dipertimbangkan.
--out-file
menentukan jalur ke file output Go, seperti -o
di GCC.--spec-file
Menentukan jalur ke file input TLA+--package-name
memungkinkan kustomisasi nama paket file output GO. Ini default ke versi sanitasi dari nama algoritma MPCAL. Sub-perintah pcalgen
meminta agar PGO menulis ulang file input TLA+ yang mengandung MPCal, sehingga berisi terjemahan pluscal dari algoritma MPCAL. Satu-satunya opsi, --spec-file
, adalah jalur ke file spesifikasi, yang akan ditulis ulang.
Untuk memasukkan terjemahan pluscal, PGO akan mencari komentar seperti, memberi atau mengambil Whitespace:
* BEGIN PLUSCAL TRANSLATION
... any number of lines may go here
* END PLUSCAL TRANSLATION
Jika tidak dapat menemukan salah satu dari kedua komentar ini dalam urutan itu, itu akan menyerah dengan pesan kesalahan yang menggambarkan masalah, dan tidak akan menulis output apa pun.
PGO adalah sumber kompiler sumber yang ditulis dalam Scala. Ini mengkompilasi spesifikasi yang ditulis dalam ekstensi pluscal, yang disebut modular pluscal (lihat halaman modular pluscal untuk detail lebih lanjut), untuk pergi program.
Kode Scala PGO dibangun melalui proyek SBT, dengan ketergantungannya dikelola oleh Maven. PGO juga menyediakan pustaka dukungan runtime untuk kode Go yang dihasilkan, yang hidup di distsys/
Subfolder. Kode GO ini adalah modul GO standar, yang dapat diimpor melalui URL https://github.com/distcompiler/pgo/distss.
Skrip build utama adalah build.sbt tingkat atas. Untuk membangun dari terminal, jalankan sbt
di direktori root dan gunakan perintah standar yang disediakan oleh konsol SBT. Ini termasuk run <command-line args>
ke (re-re) mengkompilasi dan menjalankan PGO, dan test
untuk menjalankan semua tes, termasuk tes GO (TODO: Tambahkan pelari untuk tes GO berdiri bebas; yang itu, khususnya, hilang).
Bangunan SBT juga dapat diimpor secara otomatis oleh plugin IntelliJ Scala, serta kemungkinan IDE lain dengan dukungan Scala.
Kode Scala PGO telah mengelola dependensi pada seperangkat kecil perpustakaan utilitas:
Suite tes PGO juga bergantung pada:
go
yang dapat dieksekusi. Tes akan berusaha untuk menemukan ini, mungkin pada $PATH
atau yang setara, melalui proses pencarian default JVM.Perpustakaan Runtime PGO tergantung pada:
PGO diuji menggunakan OpenJDK 1.11 hingga 1.16, dan pergi 1.18. OpenJDK 1.11+ diperlukan karena penggunaan API standar. GO> = 1.18 diperlukan karena obat generik.