Nimrod merupakan open source, bebas, statis diketik, bahasa pemrograman imperatif dirancang untuk mendukung prosedural, object-oriented, gaya pemrograman generik dan fungsional, namun tetap efisien dan sederhana.
Nimrod mampu pohon abstrak sintaks (AST) sebagai bagian dari spesifikasi, yang memungkinkan sistem makro yang kuat yang dapat digunakan untuk membuat domain bahasa tertentu. Fitur A diwarisi dari Lisp.
Perangkat lunak ini memiliki generasi asli kode, pengumpulan sampah, iterator nol-biaya overhead, operator-defineable pengguna, tipe data tingkat tinggi, kompilasi evaluasi waktu, maju Compability, GTK2, Windows API, POSIX binding API, sistem parser plugable, generator dokumentasi, dan a Pascal ke Nimrod utilitas konversi.
Nimrod adalah portable, yang berarti bahwa itu dapat berjalan di Linux, BSD, Mac OS & nbsp; X & nbsp; dan sistem operasi Windows
Apa yang baru dalam rilis ini:.
- Perbaikan bug:
- GC tua tidak pernah dikumpulkan siklus benar. Tetap tetapi dapat menyebabkan regresi kinerja. Namun Anda dapat menonaktifkan kolektor siklus dengan GC_disableMarkAndSweep dan menjalankannya secara eksplisit pada waktu yang tepat atau tidak sama sekali. Ada juga GC baru Anda dapat mengaktifkan dengan --gc:. MarkAndSweep yang tidak memiliki masalah ini, tetapi lebih lambat pada umumnya dan tidak memiliki jaminan realtime
- cor untuk floating jenis titik sekarang melakukan bitcast sebagaimana ditentukan dalam manual. Hal ini melanggar kode yang keliru menggunakan cor untuk mengkonversi nilai floating point yang berbeda.
- kinerja SCGI modul telah meningkat pesat, tidak akan lagi memblokir banyak permintaan bersamaan.
- Total tetap lebih dari 70 isu github dan bergabung lebih dari 60 permintaan tarik.
- Perpustakaan Penambahan:
- Ada tanda & menyapu eksperimental GC baru yang dapat lebih cepat (atau jauh lebih lambat) dibandingkan dengan GC default. Aktifkan dengan --gc:. MarkAndSweep
- Ditambahkan system.onRaise untuk mendukung sistem kondisi.
- system.locals Ditambahkan yang menyediakan akses ke penduduk setempat proc itu.
- Ditambahkan macros.quote untuk AST kuasi-mengutip.
- Ditambahkan system.unsafeNew untuk mendukung Hacky variabel obyek panjang.
- system.fields dan objek system.fieldPairs dukungan juga; mereka digunakan hanya tupel dukungan.
- Ditambahkan system.CurrentSourcePath kembali path file sistem lengkap dari file sumber arus.
- macro modul sekarang berisi banyak pembantu yang berguna untuk membangun pohon sintaks abstrak.
- Perubahan yang mempengaruhi kompatibilitas mundur:
- bersama adalah kata kunci sekarang.
- Usang sockets.recvLine dan asyncio.recvLine, tambah readLine gantinya.
- Cara lekukan ditangani dalam parser berubah secara signifikan. Namun, hal ini mempengaruhi sangat sedikit (jika ada) kode dunia nyata.
- Ekspresi / pernyataan unifikasi telah dilaksanakan. Sekali lagi ini hanya mempengaruhi kasus tepi dan tidak ada yang diketahui kode dunia nyata.
- Berubah antarmuka async modul Scgi.
- widestrings sekarang sampah yang dikumpulkan seperti jenis string lain.
- Compiler Penambahan:
- Perintah doc2 tidak menghasilkan output untuk keseluruhan proyek lagi. Gunakan saklar --project baru untuk mengaktifkan perilaku ini.
- Compiler sekarang dapat memperingatkan tentang variabel lokal gelap. Namun, ini perlu dihidupkan secara eksplisit melalui --warning [ShadowIdent]:. On
- Compiler sekarang mendukung hampir setiap pragma dalam mendorong pragma.
- konverter Generik telah dilaksanakan.
- Ditambahkan noforward pragma yang sangat eksperimental memungkinkan modus kompilasi khusus yang sebagian besar menghilangkan kebutuhan untuk deklarasi maju.
- Penambahan Bahasa:
- ekspresi kasus sekarang didukung.
- Tabel konstruktor sekarang meniru lebih dekat sintaks dari pernyataan kasus.
- Nimrod sekarang dapat menyimpulkan jenis kembalinya proc dari tubuhnya.
- Ditambahkan deklarasi mixin mempengaruhi simbol yang mengikat aturan dalam obat generik.
- pelacakan Exception telah ditambahkan dan perintah doc2 menambahkan catatan mungkin pengecualian untuk Anda.
- Ditentukan pengguna efek (& quot; tag & quot;). Pelacakan telah ditambahkan dan perintah doc2 menambahkan catatan mungkin tag untuk Anda
- Jenis dapat dijelaskan dengan sintaks baru tidak nil secara eksplisit menyatakan nil yang tidak diperbolehkan. Namun saat ini compiler melakukan tidak statis canggih memeriksa ini; untuk saat ini hanya untuk keperluan dokumentasi.
- Sebuah pernyataan ekspor telah ditambahkan ke bahasa: Hal ini dapat digunakan untuk simbol forwarding sehingga modul klien tidak perlu mengimpor dependensi modul secara eksplisit .
- Overloading berdasarkan AST telah dilaksanakan.
- Generik sekarang didukung untuk multi metode.
- Objek dapat diinisialisasi melalui ekspresi objek konstruktor.
- Ada konstruksi sintaksis yang baru (;) ekspresi pemersatu dan pernyataan .
- Anda sekarang dapat menggunakan modul dari impor nihil jika Anda ingin mengimpor modul tetapi ingin menegakkan akses yang memenuhi syarat untuk setiap simbol dalam modul.
Apa yang baru dalam versi 0.8.14:.
- Fixed korupsi memori yang serius tentang pesan lewat
- Fixed bug serius tentang instantiations yang berbeda dari proc generik.
- Fixed bug baru diperkenalkan di mana EIO pengecualian yang salah dibangkitkan akhir file untuk file teks yang tidak diakhiri dengan baris baru.
- c2nim Bugfix, c2pas: opsi --out tidak pernah bekerja dengan benar .
- Bugfix:. Forwarding procs generik pernah bekerja
- Beberapa perbaikan bug lebih untuk macro dan waktu kompilasi evaluasi .
- GC sekarang memperhitungkan pointer interior pada stack yang mungkin diperkenalkan oleh pengoptimalan C agresif.
- pengalokasi asli Nimrod / GC sekarang bekerja pada PowerPC.
- Banyak perbaikan bug lainnya. Terlalu banyak untuk daftar mereka semua
Apa yang baru dalam versi 0.8.6:
- Perbaikan bug:
- pragmas petunjuk [X]: off dan peringatan [X]: off sekarang bekerja .
- Cara sintaks panggilan untuk iterator bekerja lagi (untuk x di lines.split ()).
- Fixed kesalahan ketik pada removeDir untuk POSIX yang mengarah ke rekursi tak terbatas.
- compiler akan memeriksa bahwa nama file modul adalah pengidentifikasi yang valid.
- pola Kosong untuk pragma dynlib sekarang mungkin.
- os.parseCmdLine kembali hasil yang salah untuk trailing spasi.
- penggunaan tuple ngawur (menggunakan tuple yang sama dengan dan tanpa bidang bernama) tidak crash generator kode lagi.
- Sebuah pesan kesalahan yang lebih baik disediakan saat pemuatan proc dalam lib dinamis gagal.
- Penambahan:
- system.contains Ditambahkan untuk array terbuka.
- The PEG Modul sekarang mendukung pencarian Operator lingkaran @.
- Grammar / parser: SAD | IND diperbolehkan sebelum segala jenis penutupan braket. Hal ini memungkinkan untuk lebih fleksibel formating kode sumber.
- Compiler sekarang menggunakan tabel mengikat untuk simbol lookup dalam konteks mengikat. (Lihat manual.html # template untuk rincian.)
- membuang & quot; & quot; & quot; komentar saya panjang & quot; & quot; & quot; sekarang dioptimalkan pergi.
- --floatChecks Baru: on | off switch dan pragmas untuk debugging yang lebih baik operasi floating point. (Lihat manual.html # pra-ditentukan-floating-point-jenis untuk rincian.)
- Panduan telah diperbaiki. (Banyak terima kasih kepada Philippe Lhoste!)
- Perubahan yang mempengaruhi kompatibilitas mundur:
- Compiler tidak melewatkan langkah menghubungkan lagi bahkan jika tidak ada file telah berubah.
- os.splitFile (& quot; Xyz & quot;) sekarang kembali (& quot; & quot ;, & quot; Xyz & quot ;, & quot; & quot;) bukan (& quot; & quot ;, & quot; & quot ;, & quot; Xyz & quot; ). Nama file yang dimulai dengan titik ditangani secara berbeda.
- strutils.split (s: string, SEP: set [Char]) tidak pernah menghasilkan string kosong lagi. Perilaku ini mungkin lebih tepat untuk membelah spasi.
- Compiler sekarang berhenti setelah version perintah saklar baris.
- dukungan Dihapus untuk enum warisan dalam parser; warisan enum belum pernah didokumentasikan pula.
- Bidang msg dari system.E_base memiliki sekarang tipe string, bukan cstring. Hal ini meningkatkan keamanan memori.
Apa yang baru dalam versi 0.8.2:
- Perbaikan bug:
- Melewati --hint [X]: off atau --warning [X]:. Off sebagai argumen baris perintah untuk compiler sekarang bekerja
- parameter default untuk template saat bekerja.
- masalah keamanan tetap dalam system.copy.
- String kasus tanpa bagian lain yang dihasilkan kode yang salah.
- Berbagai perbaikan untuk modul osproc; sekarang bekerja pada Windows.
- Penambahan:
- Diimplementasikan multi-metode.
- compiler sekarang mendeteksi jumlah prosesor yang tersedia dan mengeksekusi compiler C secara bersamaan. Hal ini dapat disesuaikan dengan --parallel_build:. Beralih number_of_processors baris perintah
- pola PEG berbasis pencocokan melalui modul pasak.
- Ditambahkan system.definedInScope .
- Ditambahkan system.accumulateResult .
- Ditambahkan os.walkDirRec .
- Ditambahkan osproc.countProcessors.
- Ditambahkan osproc.execProcesses .
- Konfigurasi sistem sekarang mendukung $ cc.options.linker.
- Digabung expr dan typeDesc dalam tata bahasa / parser:. Ini akan memungkinkan untuk procs anonim tanpa lambda
- Banyak skrip tidak perlu untuk GC: The --gc baru: tidak ada saklar baris perintah dapat digunakan untuk mengecualikan GC dari executable .
- Perubahan yang mempengaruhi mundur Compability:
- Mengambil alamat dari sebuah objek diskriminan sekarang tidak valid.
- Melewati proc untuk var proc hanya diperbolehkan untuk procs ditandai dengan procvar atau konvensi pemanggilan! = Nimcall. Untuk saat ini hanya menyebabkan peringatan, tapi ini akan berubah menjadi kesalahan segera.
- sistem. & Dan system.add kini menerima openArray bukan parameter seq.
- Dihapus strutils.findSubStr dan strutils.findChars. Mereka telah usang selama 3 versi.
- Modul unicode menggunakan jenis yang berbeda untuk TRune.
- Usang strutils.toString: gunakan $ gantinya .
- Usang os.splitPath:. Penggunaan os.splitPath yang mengembalikan tuple sebagai gantinya
- Usang os.extractDir: menggunakan splitFile (path) .dir gantinya.
- Usang os.splitFilename: menggunakan splitFile bukan .
- Usang os.extractFileExt: menggunakan splitFile bukan .
- Usang os.extractFileTrunk: menggunakan splitFile bukan .
- Usang os.appendFileExt: menggunakan os.addFileExt bukan .
- Usang os.executeShellCommand: menggunakan os.execShellCmd bukan .
- Usang os.iterOverEnvironment:. Menggunakan os.envPairs bukan
- Usang parseopt.init: menggunakan parseopt.initOptParser bukan .
- Usang parseopt.getRestOfCommandLine: menggunakan parseopt.cmdLineRest bukan .
- Usang os.pcDirectory: menggunakan os.pcDir bukan .
- Usang os.pcLinkToDirectory: menggunakan os.pcLinkToDir bukan .
- Usang osproc.executeProcess: menggunakan osproc.execProcess bukan .
- Usang osproc.executeCommand: menggunakan osproc.execCmd bukan .
Apa yang baru dalam versi 0.8.0:
- Perbaikan bug:
- tetap bug kecil yang menyebabkan compiler untuk tidak melaporkan simbol kelebihan beban terpakai
- tetap bug kecil mengenai simbol overloading
- tetap salah ketik: itu & quot; & quot ;, ambigu tidak & quot; ambigious & quot; ; -)
- compiler sekarang mendeteksi rekursif menyertakan file
- system.card harus bekerja lagi
- item untuk set [Char] dan array [char, T] harus bekerja sekarang
- Penambahan:
- jenis generik diterapkan dan simbol dua fase pencarian dalam rutinitas generik
- parameter template sekarang dapat jenis nyata li>
- dilaksanakan umum string literal baku: ident & quot; abc & quot; adalah cara pintas untuk ident (r & quot; abc & quot;)
- dalam overloading iterator resolusi dipisahkan dari procs; iterator sekarang dapat memiliki nama yang sama + tanda tangan sebagai procs
- simbol lookup di template dapat dipengaruhi oleh baru mengikat kata kunci
- compiler sekarang menerima saklar --no_main untuk interoperabilitas link yang lebih baik dengan bahasa dikompilasi lainnya
- dilaksanakan tuple membongkar pada bagian var
- generator kode memancarkan default: __assume (0); untuk Visual C ++ (untuk optimasi)
- compiler sekarang memeriksa apakah proc memiliki efek samping; procs yang dinyatakan tidak memiliki efek samping yang ditolak jika compiler tidak dapat memverifikasi ini
- strutils Operator Format.% Sekarang mendukung $ # untuk menghitung argumen otomatis
- dilaksanakan strutils.join
- Perubahan yang mempengaruhi mundur Compability:
- dua fase simbol lookup dilakukan dalam rutinitas generik
- mengikat sekarang menjadi kata cipta; pengecualian ada kata yang dicadangkan lagi
- jenis abstrak telah berganti nama menjadi jenis yang berbeda; sehingga berbeda sekarang menjadi kata cipta; abstrak ada kata yang dicadangkan lagi
- system.openFile usang: penggunaan system.open bukan
- system.closeFile usang: penggunaan system.close bukan
- strutils.replaceStr usang: penggunaan strutils.replace bukan
- strutils.deleteStr usang: penggunaan strutils.delete bukan
- strutils.splitSeq usang: penggunaan strutils.split bukan
- strutils.splitLinesSeq usang: gunakan strutils.splitLines bukan
- strutils.parseFloat tidak menerima parameter awal tambahan lagi
- Dokumentasi:
- manual telah diperbaiki
Apa yang baru dalam versi 0.7.6:
- Perbaikan bug:
- instalasi pada Windows Vista sekarang dapat bekerja di luar kotak; silahkan coba!
- tetap bug yang terus & quot; rekursif modul & quot; Contoh dari bekerja
- pencampuran bernama dan tidak disebutkan namanya parameter dalam panggilan prosedur sekarang bekerja
- nomor oktal dengan 0c awalan sekarang didukung dengan baik
- mantri sekarang dapat mulai dengan nilai-nilai negatif
- parseInt, ParseBiggestInt sekarang melempar perkecualian jika string tidak berakhir setelah jumlah diurai
- compiler sekarang menangani laporan tingkat atas dengan benar
- Direktori nimcache dihasilkan tidak pernah berakhir dalam sebuah garis miring
- createDir sekarang bekerja untuk direktori global di bawah UNIX (& quot; / somepath / sini & quot;)
- compiler sekarang mengeksekusi executable dengan terkemuka & quot; ./& quot; di bawah UNIX
- compiler sekarang mendukung array konstan prosedur pointer
- Elif dalam laporan kasus sekarang bekerja
- iterator menggunakan parameter array terbuka sekarang bekerja
- tetap bug di mana dalam beberapa konteks $ MyEnum tidak bekerja
Apa yang baru dalam versi 0.7.4:
- instalasi pada Windows harus bekerja jika direktori berisi spasi
- generator dokumentasi kini hanya membuat komentar dokumentasi
- `` `` diperbolehkan untuk operator seperti manual mengatakan
- dalam kasus yang jarang, cek indeks telah dioptimalkan pergi, meskipun itu akan menjadi penting
- beberapa perbaikan bug untuk jenis tuple
- menambahkan `` modul unicode`` untuk UTF-8 penanganan
- menambahkan Hostos dan hostCPU Magics ke `` modul system``
- system.echo sekarang menerima beberapa argumen
- menambahkan optimasi: dalam beberapa kasus inlining dari iterator sekarang menghasilkan kode jauh lebih baik
- menambahkan seluruh program kode mati eliminasi
- keajaiban `` `Operator sekarang bekerja untuk mantri
- dalam `` bagian const`` maju waktu kompilasi evaluasi dilakukan
- nama `` `` in_Operator`` untuk contains``: `` in`` sekarang template yang diterjemahkan menjadi `` contains``
- berubah `` `` strutils.quoteIfSpaceExists`` untuk strutils.quoteIfContainsWhite``
- parser sekarang jauh lebih pilih-pilih tentang missings koma, dll Jika ini mempengaruhi kode Anda terlalu banyak, cobalah untuk menjalankan kode Anda melalui printer cantik.
- `` macros`` API tidak lagi merupakan bagian dari `` modul system``, untuk menggunakan API ini Anda sekarang harus mengimpor `` macros`` modul
- menambahkan tutorial
Apa yang baru dalam versi 0.7.2:
- Ini adalah rilis bugfix. Fix yang paling penting adalah bahwa Nimrod sekarang bekerja lagi pada AMD64 (x86_64) prosesor.
- Tidak ada fitur baru telah diimplementasikan.
Apa yang baru dalam versi 0.7.0:
- berbagai perbaikan bug, terlalu banyak untuk daftar di sini
- instalasi untuk sistem berbasis UNIX tidak tergantung pada Python lagi
- `` naskah koch.py`` sekarang bekerja dengan versi Python tua (termasuk 1.5.2)
- operasi berubah bilangan bulat dan aturan konversi
- menambahkan `` `` GC_ref`` dan procs GC_unref``
- urutan sekarang perlu dibangun dengan `` `` @ operator. Hal ini menyebabkan kurang ambiguitas.
- compiler sekarang menggunakan lebih sedikit memori dan jauh lebih cepat
- GC sekarang jauh lebih cepat
- binding baru: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- kode C yang dihasilkan jauh lebih cepat untuk mengoptimalkan dengan GCC
- perpustakaan baru: sungai, zipfiles
- compiler Nimrod telah porting ke FreeBSD: harus bekerja pada lainnya BSD terlalu
Persyaratan :
- Python
Komentar tidak ditemukan