Rilis bahasa pemrograman Nim 1.6.0

Setelah satu tahun pengembangan, rilis bahasa pemrograman sistem Nim 1.6 diterbitkan, yang menggunakan pengetikan statis dan dibuat dengan memperhatikan Pascal, C++, Python dan Lisp. Kode sumber Nim dikompilasi menjadi representasi C, C++, atau JavaScript. Selanjutnya, kode C/C++ yang dihasilkan dikompilasi menjadi file yang dapat dieksekusi menggunakan kompiler apa pun yang tersedia (clang, gcc, icc, Visual C++), yang memungkinkan Anda mencapai kinerja yang mendekati C, jika Anda tidak memperhitungkan biaya pengoperasiannya. pemulung. Mirip dengan Python, Nim menggunakan lekukan sebagai pembatas blok. Alat dan kemampuan metaprogramming untuk membuat bahasa khusus domain (DSL) didukung. Kode proyek disediakan di bawah lisensi MIT.

Perubahan penting dalam rilis baru ini meliputi:

  • Menambahkan kelas iterable[T] dengan implementasi tipe untuk iterator. templat sum[T](a: iterable[T]): T = var hasil: T untuk ai di a: hasil += hasil ai tegaskan jumlah(iota(3)) == 0 + 1 + 2 # atau 'iota( 3).jumlah'
  • Menambahkan dukungan eksperimental untuk anotasi ".effectsOf" untuk menerapkan efek secara selektif. ketika didefinisikan(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Sintaks impor baru β€œimport foo {.all.}” telah diusulkan, memungkinkan Anda mengimpor tidak hanya simbol publik, tetapi juga simbol pribadi. Untuk mengakses bidang objek pribadi, modul std/importutils dan API privateAccess telah ditambahkan. dari sistem {.all.} sebagai system2 import nihil echo system2.ThisIsSystem import os {.all.} echo anehTarget
  • Menambahkan dukungan eksperimental untuk operator titik, yang dapat digunakan untuk mengimplementasikan bidang dinamis. impor templat std/json '.?'(a: JsonNode, b: tidak diketik{ident}): JsonNode = a[astToStr(b)] biarkan j = %*{β€œa1”: {β€œa2”: 10}} tegaskan j.?a1.?a2.getInt == 10
  • Parameter tambahan dapat ditentukan dalam argumen blok. templat fn(a = 1, b = 2, body1, body2) = buang fn(a = 1): bar1 lakukan: bar2
  • Dukungan untuk literal yang ditentukan pengguna telah diterapkan (misalnya, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} tegaskan 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompiler mengimplementasikan perintah "--eval:cmd" untuk langsung menjalankan perintah Nim dari baris perintah, misalnya 'nim -eval:"echo 1"'.
  • Memberikan dukungan untuk membuat ekstensi Anda sendiri untuk backend nimscript.
  • Pesan kesalahan telah diperluas secara signifikan untuk menunjukkan konteks yang terkait dengan kesalahan tersebut. Peringatan kompiler khusus yang diterapkan.
  • Peningkatan kinerja pengumpul sampah "--gc:arc" dan "--gc:orc" secara signifikan.
  • Semua backend telah meningkatkan akurasi dan kinerja kode untuk penguraian bilangan bulat dan angka floating point.
  • Peningkatan kompatibilitas backend JS, VM, dan nimscript dengan modul yang sebelumnya hanya bekerja dengan backend C (misalnya, modul std/prelude). Pengujian modul stdlib dengan backend C, JS dan VM telah dilakukan.
  • Menambahkan dukungan untuk chip Apple Silicon/M1, RISC-V 32-bit, armv8l, dan sistem CROSSOS.
  • Menambahkan modul std/jsbigints, std/tempfiles dan std/sysrand. Perbaikan signifikan telah dilakukan pada modul sistem, matematika, acak, json, jsonutils, os, typetraits, wrapnil, list, dan hashes.

Sumber: opennet.ru

Tambah komentar