Nimrod là một mã nguồn mở, miễn phí, tĩnh đánh máy, ngôn ngữ lập trình bắt buộc được thiết kế để hỗ trợ thủ tục, hướng đối tượng, phong cách lập trình tổng quát và chức năng, trong khi còn hiệu quả và đơn giản.
Nimrod là thể cây cú pháp trừu tượng (AST) như là một phần của một đặc điểm kỹ thuật, cho phép một hệ thống vĩ mô mạnh mẽ mà có thể được sử dụng để tạo ra ngôn ngữ miền cụ thể. Một tính năng thừa hưởng từ Lisp.
Phần mềm này có tính năng thế hệ mã nguồn gốc, thu gom rác thải, vòng lặp không-trên cao, khai thác sử dụng tùy định, kiểu dữ liệu cấp độ cao, biên dịch đánh giá thời gian, mong compability, GTK2, Windows API, POSIX bindings API, một hệ thống phân tích cú pháp plugable, một máy phát tài liệu, và một Pascal để Nimrod tiện ích chuyển đổi.
Nimrod là xách tay, có nghĩa là nó có thể chạy trên Linux, BSD, Mac OS & nbsp; X & nbsp; và hệ điều hành Windows
là gì mới trong phiên bản này:.
- Sửa lỗi:
- Các GC cũ không bao giờ thu thập chu kỳ chính xác. Cố định, nhưng nó có thể gây ra hồi quy hiệu suất. Tuy nhiên bạn có thể tắt các bộ thu chu kỳ với GC_disableMarkAndSweep và chạy nó một cách rõ ràng ở thời điểm thích hợp hoặc không gì cả. Ngoài ra còn có một GC mới, bạn có thể kích hoạt với --gc:. MarkAndSweep mà không có vấn đề này nhưng là chậm nói chung và không có đảm bảo thời gian thực
- dàn diễn viên nổi cho loại điểm bây giờ thực hiện các bitcast như quy định trong hướng dẫn. Điều này phá vỡ mã sai lầm sử dụng diễn viên để chuyển đổi các giá trị dấu chấm động khác nhau.
- hiệu suất SCGI module đã được cải thiện rất nhiều, nó sẽ không còn chặn trên nhiều yêu cầu đồng thời.
- Trong tổng số cố định trên 70 vấn đề github và sáp nhập hơn 60 yêu cầu kéo.
- Thư viện bổ sung:
- Có một thí nghiệm đánh dấu & quét GC mới mà có thể được nhanh hơn (hoặc chậm hơn) so với GC mặc định. Kích hoạt với --gc:. MarkAndSweep
- Added system.onRaise để hỗ trợ một hệ thống điều hòa.
- system.locals thêm cung cấp truy cập đến người dân địa phương một proc.
- Thêm macros.quote cho AST quasi-trích dẫn.
- Added system.unsafeNew để hỗ trợ đối tượng hacky chiều dài biến.
- system.fields và đối tượng system.fieldPairs hỗ trợ quá; họ sử dụng để chỉ các tuple hỗ trợ.
- Added system.CurrentSourcePath trả lại đường dẫn tập tin hệ thống đầy đủ của tập tin nguồn hiện tại.
- Các module macro bây giờ chứa rất nhiều người giúp đỡ hữu ích cho việc xây dựng cây cú pháp trừu tượng.
- Thay đổi ảnh hưởng đến khả năng tương thích ngược:
- chia sẻ là một từ khóa bây giờ.
- phản sockets.recvLine và asyncio.recvLine, thêm readLine thay thế.
- Các cách thụt đầu dòng được xử lý trong phân tích cú pháp thay đổi đáng kể. Tuy nhiên, điều này ảnh hưởng rất ít (nếu có) mã thế giới thực.
- Sự thống nhất biểu hiện / tuyên bố này đã được thực hiện. Một lần nữa điều này chỉ ảnh hưởng đến các trường hợp cạnh và không có mã thế giới thực được biết đến.
- Thay đổi giao diện async của module scgi.
- WideStrings đang thu gom rác thải như các loại dây khác.
- Compiler Additions:
- Các lệnh doc2 không tạo đầu ra cho toàn bộ dự án nữa. Sử dụng các switch --project mới để cho phép hành vi này.
- Các trình biên dịch có thể cảnh báo về biến cục bộ bóng. Tuy nhiên, điều này cần phải được bật một cách rõ ràng qua --warning [ShadowIdent]:. Về
- Các trình biên dịch hiện nay hỗ trợ hầu hết các pragma trong một push pragma.
- Generic chuyển đổi đã được thực hiện.
- Thêm một noforward pragma được thử nghiệm cho phép một chế độ biên soạn đặc biệt mà chủ yếu là loại bỏ sự cần thiết cho các tờ khai phía trước.
- Additions Ngôn ngữ:
- biểu trường hợp đang được hỗ trợ.
- Bảng giờ bắt chước chặt chẽ hơn các cú pháp của báo cáo trường hợp.
- Nimrod bây giờ có thể suy ra kiểu trả về của một proc từ cơ thể của mình.
- Thêm một tuyên bố mixin ảnh hưởng đến biểu tượng ràng buộc quy tắc trong generics.
- theo dõi ngoại lệ đã được thêm vào và lệnh doc2 annotates trường hợp ngoại lệ có thể cho bạn.
- Người dùng xác định các hiệu ứng (& quot; thẻ & quot;). Theo dõi đã được thêm vào và lệnh doc2 annotates thẻ có thể cho bạn
- Các loại có thể được chú thích với cú pháp mới không nil để nói rõ con số không mà không được phép. Tuy nhiên hiện nay các trình biên dịch không thực hiện việc kiểm tra này tĩnh tiên tiến; bây giờ nó chỉ đơn thuần là cho mục đích tài liệu.
- Một tuyên bố xuất khẩu đã được thêm vào ngôn ngữ: Nó có thể được sử dụng để chuyển biểu tượng để module khách hàng không phải nhập khẩu phụ thuộc của mô-đun một cách rõ ràng .
- quá tải dựa trên ASTs đã được thực hiện.
- Generics đang được hỗ trợ cho đa phương.
- Đối tượng có thể được khởi tạo thông qua một biểu thức xây dựng đối tượng.
- Có một cấu trúc cú pháp mới (;) biểu thức hợp nhất và báo cáo .
- Bây giờ bạn có thể sử dụng từ nhập khẩu phân nil nếu bạn muốn nhập khẩu các mô-đun, nhưng muốn thực thi các quyền truy cập đầy đủ đến mọi ký tự trong mô-đun.
Nhà xây dựng
là gì mới trong phiên bản 0.8.14:.
- Cố định một tham nhũng nghiêm trọng liên quan đến bộ nhớ thông qua
- Cố định một lỗi nghiêm trọng liên quan đến sự khởi tạo khác nhau của một proc chung chung.
- Cố định một lỗi mới được giới thiệu một nơi EIO ngoại lệ sai đã được nâng lên cho đến cuối tập tin cho các tập tin văn bản mà không kết thúc với một dòng mới.
- c2nim Sửa lỗi, c2pas: tùy chọn --out đã bao giờ làm việc đúng .
- Sửa lỗi:. Forwarding của procs chung chung không bao giờ làm việc
- Một số sửa lỗi nhiều hơn cho các macro và biên dịch-thời gian thẩm định.
- Các GC nay sẽ đưa vào tài khoản của con trỏ nội thất trên stack có thể được giới thiệu bởi tối ưu hóa C hung hăng.
- cấp phát bản địa của Nimrod / GC hiện đang làm việc trên PowerPC.
- Rất nhiều sửa lỗi khác. Quá nhiều để liệt kê tất cả các
là gì mới trong phiên bản 0.8.6:
- Sửa lỗi:
- Các pragmas gợi ý [X]: off và cảnh báo [X]: off bây giờ làm việc .
- Phương pháp cú pháp gọi cho vòng lặp hoạt động trở lại (cho x trong lines.split ()).
- Cố định một lỗi đánh máy trong removeDir cho POSIX dẫn đến một đệ quy vô hạn.
- Các trình biên dịch hiện kiểm tra rằng tên tập tin module là định danh hợp lệ.
- mô hình trống cho pragma dynlib bây giờ có thể.
- os.parseCmdLine trả lại kết quả sai cho dấu khoảng trắng.
- sử dụng tuple không thích hợp (bằng cách sử dụng cùng một tuple có và không có lĩnh vực tên) không sụp đổ các máy phát điện mã nữa.
- Một thông báo lỗi tốt hơn được cung cấp khi nạp một proc trong một lib động thất bại.
- Bổ sung:
- system.contains thêm cho mảng mở.
- Các module PEG bây giờ hỗ trợ các nhà điều hành tìm kiếm @ loop.
- Grammar / parser: SAD | IND được cho phép trước khi bất kỳ loại đóng khung. Điều này cho phép linh hoạt hơn mã nguồn Formating.
- Các trình biên dịch hiện nay sử dụng một bảng bind để tra cứu biểu tượng trong một bối cảnh ràng buộc. (Xem manual.html # mẫu để biết chi tiết.)
- loại bỏ & quot; & quot; & quot; bình luận của tôi dài & quot; & quot; & quot; Hiện tại là tối ưu đi.
- --floatChecks New: on | off switch và pragmas để gỡ lỗi tốt hơn về hoạt động điểm nổi. (Xem manual.html # được xác định trước-điểm-loại nổi để biết chi tiết.)
- Các nhãn hiệu đã được cải thiện. (Rất cám ơn đến Philippe Lhoste!)
- Thay đổi ảnh hưởng đến khả năng tương thích ngược:
- Trình biên dịch không bỏ qua các bước gắn nữa ngay cả khi không có tập tin đã thay đổi.
- os.splitFile (& quot; .xyz & quot;) bây giờ trả lại (& quot; & quot ;, & quot; .xyz & quot ;, & quot; & quot;) thay vì (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Tên tập tin bắt đầu với một dấu chấm được xử lý khác nhau.
- strutils.split (s: string, seps: thiết lập [char]) không bao giờ mang lại chuỗi sản phẩm nào nữa. Hành vi này có lẽ là thích hợp hơn để tách khoảng trắng.
- Các biên dịch bây giờ dừng lại sau khi các dòng switch --version lệnh.
- hỗ trợ Removed cho enum thừa kế trong phân tích cú pháp; enum thừa kế đã không bao giờ được ghi nhận nào.
- Các lĩnh vực msg của system.E_base có tại chuỗi loại, thay vì cstring. Điều này cải thiện an toàn bộ nhớ.
là gì mới trong phiên bản 0.8.2:
- Sửa lỗi:
- Đi qua --hint [X]: off hoặc --warning [X]:. Tắt như các đối số dòng lệnh để trình biên dịch hiện đang làm việc
- thông số mặc định cho các mẫu bây giờ làm việc.
- Cố định vấn đề an ninh trong system.copy.
- String trường hợp mà không có một phần khác tạo ra mã sai.
- sửa khác nhau cho các mô-đun osproc; nó hiện đang làm việc trên Windows.
- Bổ sung:
- Thực hiện đa phương.
- Các biên dịch bây giờ phát hiện số lượng các bộ vi xử lý có sẵn và thực hiện các trình biên dịch C đồng thời. Điều này có thể được điều chỉnh bởi các --parallel_build:. Switch number_of_processors dòng lệnh
- mô hình PEG-dựa phù hợp thông qua các mô-đun chốt.
- Added system.definedInScope.
- Added system.accumulateResult.
- Added os.walkDirRec.
- osproc.countProcessors thêm.
- Added osproc.execProcesses.
- Hệ thống cấu hình bây giờ hỗ trợ $ cc.options.linker.
- Merged expr và typeDesc trong ngữ pháp / phân tích cú pháp:. Điều này sẽ cho phép procs ẩn danh mà không lambda
- Nhiều kịch bản không có nhu cầu cho một GC: Các --gc mới: không có dòng lệnh chuyển đổi có thể được sử dụng để loại trừ các GC từ thực thi .
- Thay đổi ảnh hưởng đến compability ngược:
- Lấy địa chỉ của một đối tượng discriminant bây giờ không hợp lệ.
- Đi qua một proc để một var proc chỉ được phép với procs dấu procvar hay một quy ước gọi! = Nimcall. Đối với doanh nghiệp này chỉ gây ra một cảnh báo, nhưng điều này sẽ biến thành một lỗi sớm.
- hệ thống. & Và system.add giờ nhận được openArray thay vì thông số seq.
- Bỏ strutils.findSubStr và strutils.findChars. Họ đã bị phản đối với 3 phiên bản.
- Các module unicode sử dụng một kiểu riêng biệt cho TRune.
- phản strutils.toString: sử dụng $ thay vì .
- phản os.splitPath:. Sử dụng os.splitPath mà trả về một tuple thay vì
- phản os.extractDir:. Sử dụng splitFile (đường dẫn) .dir thay vì
- phản os.splitFilename: sử dụng splitFile thay vì .
- phản os.extractFileExt: sử dụng splitFile thay vì .
- phản os.extractFileTrunk: sử dụng splitFile thay vì .
- phản os.appendFileExt: sử dụng os.addFileExt thay vì .
- phản os.executeShellCommand: sử dụng os.execShellCmd thay vì .
- phản os.iterOverEnvironment:. Os.envPairs sử dụng thay thế
- parseopt.init được tán: sử dụng parseopt.initOptParser thay vì .
- phản parseopt.getRestOfCommandLine: sử dụng parseopt.cmdLineRest thay vì .
- phản os.pcDirectory: sử dụng os.pcDir thay vì .
- phản os.pcLinkToDirectory: sử dụng os.pcLinkToDir thay vì .
- phản osproc.executeProcess: sử dụng osproc.execProcess thay vì .
- phản osproc.executeCommand: sử dụng osproc.execCmd thay vì .
là gì mới trong phiên bản 0.8.0:
- Sửa lỗi:
- cố định một lỗi nhỏ mà gây ra các trình biên dịch không báo cáo những biểu tượng quá tải không sử dụng
- cố định một lỗi nhỏ liên quan đến biểu tượng quá tải
- cố định một lỗi đánh máy: đó là & quot; & quot ;, mơ hồ không & quot; ambigious & quot; ; -)
- các biên dịch bây giờ phát hiện đệ quy bao gồm các tập tin
- system.card nên làm việc một lần nữa
- mục cho bộ [char] và array [char, T] sẽ hoạt động ngay bây giờ
- Bổ sung:
- thực hiện các loại thuốc chung và tìm kiếm biểu tượng hai giai đoạn trong thói quen chung
- mẫu tham số có thể là các loại thực
- thực hiện các chuỗi liệu tổng quát: ident & quot; abc & quot; là một shortcut cho ident (r & quot; abc & quot;)
- trong vòng lặp quá tải độ phân giải được tách ra từ procs; vòng lặp bây giờ có thể có cùng tên + chữ ký như procs
- tìm kiếm biểu tượng trong các mẫu có thể bị ảnh hưởng bởi các từ khóa bind mới
- các biên dịch bây giờ chấp nhận một switch --no_main cho liên kết khả năng tương tác tốt hơn với ngôn ngữ biên dịch khác
- tuple thực hiện giải nén trong phần var
- mã máy phát điện phát ra mặc định: __assume (0); cho Visual C ++ (để tối ưu hóa)
- các trình biên dịch hiện kiểm tra nếu một proc có tác dụng phụ; procs được tuyên bố là không có tác dụng phụ không được chấp thuận nếu trình biên dịch không thể xác minh điều này
- các strutils hành format.% $ # Bây giờ hỗ trợ cho lập luận đếm tự động
- strutils.join thực hiện
- Thay đổi ảnh hưởng đến compability ngược:
- tìm kiếm biểu tượng hai giai đoạn được thực hiện trong thói quen chung
- bind bây giờ là một từ dành riêng; ngoại lệ là không có từ dành riêng nữa
- các loại trừu tượng đã được đổi tên thành loại riêng biệt; do đó khác biệt bây giờ là một từ dành riêng; trừu tượng là không có từ dành riêng nữa
- system.openFile phản đối: sử dụng system.open thay vì
- system.closeFile phản đối: sử dụng system.close thay vì
- strutils.replaceStr phản đối: strutils.replace sử dụng thay thế
- strutils.deleteStr phản đối: strutils.delete sử dụng thay thế
- strutils.splitSeq phản đối: strutils.split sử dụng thay thế
- strutils.splitLinesSeq phản đối: strutils.splitLines sử dụng thay thế
- strutils.parseFloat không chấp nhận một tham số khởi động thêm nữa
- Tài liệu:
- hướng dẫn đã được cải thiện
là gì mới trong phiên bản 0.7.6:
- Sửa lỗi:
- cài đặt trên Windows Vista bây giờ có thể làm việc ra khỏi hộp; hãy thử!
- cố định một lỗi đó giữ các & quot; module đệ quy & quot; ví dụ làm việc
- trộn được đặt tên và không tên tham số trong một thủ tục gọi hiện đang làm việc
- số bát phân với 0c tiền tố đang được hỗ trợ đúng
- enumerations bây giờ có thể bắt đầu với giá trị âm
- parseInt, ParseBiggestInt giờ ném một ngoại lệ nếu chuỗi không kết thúc sau khi các số phân tích cú pháp
- trình biên dịch bây giờ xử lý báo cáo cấp cao chính xác
- tạo thư mục nimcache không bao giờ kết thúc bằng một dấu gạch chéo
- createDir hiện đang làm việc cho các thư mục toàn cầu dưới UNIX (& quot; / somepath / ở đây & quot;)
- các biên dịch bây giờ thực sự thực thi với một hàng đầu & quot; ./& quot; dưới UNIX
- các biên dịch bây giờ hỗ trợ các mảng liên tục của con trỏ thủ tục
- elif trong báo cáo trường hợp hiện đang làm việc
- vòng lặp sử dụng một tham số mảng mở bây giờ làm việc
- cố định một lỗi mà trong một số hoàn cảnh $ MyEnum không hoạt động
được gì mới trong phiên bản 0.7.4:
- cài đặt trên Windows nên làm việc ngay bây giờ nếu các thư mục chứa không gian
- máy phát tài liệu bây giờ chỉ làm cho ý kiến tài liệu
- `` `` được phép cho các nhà khai thác như hướng dẫn nói
- trong trường hợp hiếm hoi, việc kiểm tra chỉ số đã được tối ưu đi, mặc dù nó đã có cần thiết
- một số sửa lỗi cho các loại tuple
- thêm một `module` unicode`` cho UTF-8 xử lý
- tăng hostOS và hostCPU phép thuật để trình `` mô-đun system``
- system.echo bây giờ chấp nhận nhiều đối số
- tăng tối ưu hóa: trong một số trường hợp nội tuyến của vòng lặp hiện nay sản xuất mã tốt hơn đáng kể
- thêm vào toàn bộ chương trình loại bỏ mã chết
- sự kỳ diệu `` `điều hành hiện đang làm việc cho enumerations
- trong `` phần const`` tiên tiến thời gian biên dịch đánh giá được thực hiện
- đổi tên thành `` `` in_Operator`` để contains``: `` in`` bây giờ là một mẫu mà dịch để `` contains``
- thay đổi `` `` strutils.quoteIfSpaceExists`` để strutils.quoteIfContainsWhite``
- trình phân tích hiện nay là nhiều hơn cầu kỳ về missings dấu phẩy, vv Nếu điều này ảnh hưởng mã của bạn quá nhiều, cố gắng chạy mã của bạn thông qua máy in đẹp.
- trình `` API macros`` không còn là một phần của `` mô-đun system``, để sử dụng API này bây giờ bạn có để nhập khẩu các `` macros`` mô-đun
- thêm một hướng dẫn
là gì mới trong phiên bản 0.7.2:
- Đây là một phát hành Sửa lỗi. Sửa chữa quan trọng nhất này là Nimrod hiện đang làm việc một lần nữa trên AMD64 (x86_64) xử lý.
- Không có tính năng mới đã được thực hiện.
là gì mới trong phiên bản 0.7.0:
- sửa lỗi khác nhau, quá nhiều để liệt kê chúng ở đây
- cài đặt cho các hệ thống UNIX-based không phụ thuộc vào bất kỳ Python còn
- trình `` script koch.py`` hiện đang làm việc với các phiên bản Python cũ (gồm 1.5.2)
- hoạt động thay đổi số nguyên và quy tắc chuyển đổi
- thêm vào `` `` GC_ref`` và procs GC_unref``
- chuỗi bây giờ cần phải được xây dựng với trình `` `` @ điều hành. Điều này dẫn đến sự mơ hồ hơn.
- các trình biên dịch hiện nay sử dụng ít bộ nhớ và chạy nhanh hơn nhiều
- GC là nhanh hơn rất nhiều
- cam kết ràng buộc mới: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- mã C được tạo ra là nhanh hơn nhiều để tối ưu hóa với GCC
- thư viện mới: suối, zipfiles
- trình biên dịch Nimrod đã được chuyển đến FreeBSD: nó cũng làm việc khác BSD của quá
Yêu cầu :
- Python
Bình luận không