Phát hành ngôn ngữ lập trình Nim 1.6.0

Sau một năm phát triển, ngôn ngữ lập trình hệ thống Nim 1.6 đã được xuất bản, sử dụng kiểu gõ tĩnh và được tạo ra dựa trên Pascal, C++, Python và Lisp. Mã nguồn Nim được biên dịch thành dạng biểu diễn C, C++ hoặc JavaScript. Sau đó, mã C/C++ kết quả được biên dịch thành tệp thực thi bằng bất kỳ trình biên dịch có sẵn nào (clang, gcc, icc, Visual C++), cho phép bạn đạt được hiệu suất gần bằng C, nếu bạn không tính đến chi phí chạy người thu gom rác. Tương tự như Python, Nim sử dụng thụt lề làm dấu phân cách khối. Các công cụ siêu lập trình và khả năng tạo ngôn ngữ dành riêng cho miền (DSL) được hỗ trợ. Mã dự án được cung cấp theo giấy phép MIT.

Những thay đổi đáng chú ý trong phiên bản mới bao gồm:

  • Đã thêm lớp iterable[T] với cách triển khai kiểu cho các trình vòng lặp. mẫu sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result khẳng định sum(iota(3)) == 0 + 1 + 2 # hoặc 'iota( 3).tổng'
  • Đã thêm hỗ trợ thử nghiệm cho chú thích ".effectOf" để áp dụng các hiệu ứng có chọn lọc. khi được xác định(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectOf: cmp. }
  • Cú pháp nhập mới “import foo {.all.}” đã được đề xuất, cho phép bạn nhập không chỉ các ký hiệu công khai mà còn cả các ký hiệu riêng tư. Để truy cập các trường riêng tư của đối tượng, mô-đun std/importutils và API PrivateAccess đã được thêm vào. từ hệ thống {.all.} dưới dạng system2 nhập nil echo system2.ThisIsSystem nhập os {.all.} echo lạTarget
  • Đã thêm hỗ trợ thử nghiệm cho toán tử dấu chấm, có thể được sử dụng để triển khai các trường động. nhập mẫu std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} khẳng định j.?a1.?a2.getInt == 10
  • Các tham số bổ sung có thể được chỉ định trong các đối số khối. mẫu fn(a = 1, b = 2, body1, body2) = loại bỏ fn(a = 1): bar1 do: bar2
  • Hỗ trợ cho các ký tự do người dùng xác định đã được triển khai (ví dụ: "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} khẳng định 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Trình biên dịch triển khai lệnh "--eval:cmd" để chạy trực tiếp các lệnh Nim từ dòng lệnh, ví dụ 'nim -eval:"echo 1"'.
  • Cung cấp hỗ trợ để tạo tiện ích mở rộng của riêng bạn cho phần phụ trợ nimscript.
  • Thông báo lỗi đã được mở rộng đáng kể để hiển thị ngữ cảnh liên quan đến lỗi. Đã thực hiện cảnh báo trình biên dịch tùy chỉnh.
  • Cải thiện đáng kể hiệu suất của trình thu gom rác "--gc:arc" và "--gc:orc".
  • Tất cả các phần phụ trợ đã cải thiện độ chính xác và hiệu suất của mã để phân tích số nguyên và số dấu phẩy động.
  • Cải thiện khả năng tương thích của các chương trình phụ trợ JS, VM và nimscript với các mô-đun trước đây chỉ hoạt động với chương trình phụ trợ C (ví dụ: mô-đun std/prelude). Việc thử nghiệm các mô-đun stdlib với các chương trình phụ trợ C, JS và VM đã được thiết lập.
  • Đã thêm hỗ trợ cho chip Apple Silicon/M1, hệ thống RISC-V 32-bit, armv8l và CROSSOS.
  • Đã thêm các mô-đun std/jsbigints, std/tempfiles và std/sysrand. Những cải tiến đáng kể đã được thực hiện đối với các mô-đun hệ thống, toán học, ngẫu nhiên, json, jsonutils, os, typetraits, Wrapnils, danh sách và băm.

Nguồn: opennet.ru

Thêm một lời nhận xét