MAGES adalah penerus resmi YAMP. Ini adalah pengurai dan penerjemah ekspresi yang sangat sederhana namun kuat. Anda dapat menggunakan MAGES untuk menyertakan mesin skrip yang canggih, mudah disesuaikan, dan ringan ke aplikasi Anda.
Di antara aplikasi lainnya, MAGES telah digunakan di PowerToys Microsoft.
MAGES baru saja diperbarui (v3.0.0) dengan metadata objek, dukungan daftar langsung, dan sintaksis JSX.
2023 :
MAGES telah diperbarui (v2.0.0) dengan dukungan untuk bilangan kompleks. Selain itu, target pembangunan dan waktu proses telah diperbarui untuk memanfaatkan kemungkinan-kemungkinan modern.
2018 :
Versi stabil pertama telah dirilis. Versi 1.6.0 saat ini berisi REPL yang ditingkatkan. Pustaka berisi segalanya untuk melakukan operasi skrip ringan di C#. Artikel CodeProject tentang perpustakaan (juga berisi beberapa perbandingan latar belakang dan kinerja) juga tersedia.
MAGES sendiri tidak memiliki ketergantungan apa pun, namun pengujiannya bergantung pada NUnit dan benchmarknya menggunakan BenchmarkDotNet. Biasanya, MAGES harus diinstal melalui sumber paket NuGet. Jika ini tidak berhasil untuk Anda, kloning sumbernya dan buat MAGES sendiri. Pastikan semua pengujian unit lulus.
Seluruh perpustakaan dirancang untuk digunakan dari aplikasi .NET Core 3.0 (atau lebih tinggi) / .NET 5.0 (atau lebih tinggi). Artinya (antara lain) kompatibel dengan Unity 2021.2 atau Mono 6.4. Paket NuGet tersedia melalui feed paket resmi.
Dalam kasus paling sederhana, Anda membuat mesin baru untuk memiliki cakupan global (untuk variabel dan fungsi) dan meluncurkan interpretasinya.
var engine = new Mages . Core . Engine ( ) ;
var result = engine . Interpret ( " sin(2) * cos(pi / 4) " ) ; // 0.642970376623918
Anda juga dapat melanjutkan dan membuat blok yang dapat digunakan kembali dari cuplikan.
var expOne = engine . Compile ( " exp(1) " ) ;
var result = expOne ( ) ; // 2.71828182845905
Atau Anda dapat berinteraksi dengan elemen yang dibuat oleh MAGES.
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Invoke ( new Object [ ] { 4.0 , 3.0 } ) ; // 18.0
Atau bahkan lebih sederhana (detailnya dijelaskan di dokumen memulai):
var func = engine . Interpret ( " (x, y) => x * y + 3 * sqrt(x) " ) as Mages . Core . Function ;
var result = func . Call ( 4 , 3 ) ; // 18.0
Ini hanyalah beberapa contoh yang lebih mendasar. Informasi lebih lanjut dapat ditemukan di dokumentasi.
Dokumentasi diberikan dalam bentuk dokumen Markdown yang ditempatkan di folder doc repositori ini. Tautan berikut patut untuk dicoba:
Jika ada yang kurang, tidak jelas, atau salah, kirimkan PR atau ajukan masalah. Lihat bagian kontribusi berikut untuk informasi lebih lanjut.
Kontribusi dalam bentuk implementasi fitur atau perbaikan bug sangat diharapkan, namun perlu dilakukan secara terorganisir dan konsisten. Pedoman kontribusi harus dibaca sebelum memulai pekerjaan apa pun.
Kontribusi juga dapat diberikan dalam bentuk laporan bug dan permintaan fitur. Pengembangan sumber terbuka yang berumur panjang!
Aturan semver adalah roti dan mentega kita. Singkatnya ini berarti:
Oleh karena itu: Jangan mengharapkan adanya perubahan yang dapat mengganggu dalam versi utama yang sama.
Perusahaan-perusahaan berikut mensponsori sebagian dari pengembangan MAGES.
Terima kasih atas semua dukungan dan kepercayaan pada proyek ini!
Lisensi MIT (MIT)
Hak Cipta (c) 2016-2024 Florian Rappl
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.