Làm quen với phiên bản mới của Cosmopolitan 2.0, thư viện C tiêu chuẩn đa nền tảng

Sự ra mắt của phiên bản mới của dự án "Cosmopolitan 2.0", phát triển một thư viện C tiêu chuẩn và một định dạng tệp thực thi chung có thể được sử dụng để phân phối các chương trình cho các hệ điều hành khác nhau mà không cần sử dụng trình thông dịch và máy ảo.

Thùng chứa để tạo các tệp thực thi chung dựa vào việc kết hợp các phân đoạn và tiêu đề cụ thể từ các hệ thống khác nhau hệ điều hành thành một tệp, kết hợp nhiều định dạng khác nhau được sử dụng trong Unix, Windows và macOS.

Để chắc chắn rằng một tệp thực thi duy nhất chạy trên hệ thống Windows và Unix, một thủ thuật được sử dụng để mã hóa các tệp Windows PE dưới dạng tập lệnh shell, lợi dụng thực tế là Thompson Shell không sử dụng mã đánh dấu tập lệnh "#!".

Để tạo các chương trình bao gồm nhiều tệp (kết hợp tất cả các tài nguyên thành một tệp duy nhất), nó được hỗ trợ để tạo tệp thực thi ở dạng tệp lưu trữ ZIP được chế tạo đặc biệt. Sơ lược về định dạng được đề xuất (ví dụ ứng dụng hello.com):

Cuộc gọi qemu-x86_64 được cung cấp để có thêm tính di động và cho phép mã được biên dịch cho kiến ​​trúc x86_64 chạy trên các nền tảng không phải x86, chẳng hạn như bảng Raspberry Pi và các thiết bị Apple được trang bị bộ xử lý ARM. Dự án cũng có thể được sử dụng để tạo các ứng dụng độc lập hoạt động mà không cần hệ điều hành (kim loại trần). Trong các ứng dụng như vậy, bộ nạp khởi động được đính kèm với tệp thực thi và chương trình hoạt động như một hệ điều hành có thể khởi động.

Những điểm mới chính của Cosmopolitan 2.0

Trong phiên bản mới này, nó được nhấn mạnh rằng lược đồ để truy cập tài nguyên nội bộ đã được thay đổi nha từ một tệp zip (khi mở tệp, các đường dẫn thông thường / zip /… hiện được sử dụng thay vì sử dụng tiền tố zip: ..). Tương tự, để truy cập đĩa trong Windows, có thể sử dụng các đường dẫn như "/ c /…" thay vì "C: /…".

Một trình tải APE mới được đề xuất (Thực tế là Portable Executable), xác định định dạng của các tệp thực thi phổ biến. Bộ nạp khởi động mới sử dụng mmap để cấp phát chương trình vào bộ nhớ và không còn thay đổi nội dung một cách nhanh chóng. Nếu cần, tệp thực thi chung có thể được chuyển đổi thành tệp thực thi thông thường gắn với các nền tảng riêng lẻ.

Trên Linux, có thể sử dụng mô-đun hạt nhân binfmt_misc để chạy các chương trình APE. Cần lưu ý rằng việc sử dụng binfmt_misc là phương pháp khởi động nhanh nhất, ngoài ra Một triển khai của chức năng của các lệnh gọi hệ thống commit () và unil (), được phát triển bởi dự án OpenBSD, cũng như cung cấp một API để sử dụng dữ liệu cuộc gọi trong các chương trình C, C ++, Python và Redbean, cũng như một tiện ích từ promise.com để cô lập các quy trình tùy ý.

Chúng tôi cũng có thể thấy rằng đối với Linux, hiệu suất của các cuộc gọi clock_gettime và gettimeofday đã được tăng lên lên đến 10 lần do sử dụng cơ chế vDSO (Virtual Dynamic Shared Object), cho phép chuyển trình xử lý cuộc gọi hệ thống sang không gian người dùng và bỏ qua ngữ cảnh chuyển đổi.

Công trình sử dụng Landlock Make, một phiên bản của GNU Make với tính năng kiểm tra phụ thuộc chặt chẽ hơn và việc sử dụng lệnh gọi hệ thống Landlock để tách chương trình khỏi phần còn lại của hệ thống và cải thiện hiệu quả bộ nhớ đệm. Như một tùy chọn, khả năng biên dịch và GNU Make thông thường được giữ nguyên.

Mặt khác, nó cũng làm nổi bật các hàm được triển khai cho đa luồng: _spawn () và _join (), là các ràng buộc chung đối với các API cụ thể cho các hệ điều hành khác nhau. Công việc cũng đang được tiến hành để triển khai hỗ trợ cho các luồng POSIX.

Trong số những thay đổi khác nổi bật:

  • Đã thêm hỗ trợ cho các tùy chọn “–ftrace” và “–strace” cho các tệp thực thi để gửi thông tin về tất cả các lệnh gọi hàm và lệnh gọi hệ thống tới stderr.
  • Đã thêm hỗ trợ cho lệnh gọi hệ thống closefrom () tương thích với Linux 5.9+, FreeBSD 8+ và OpenBSD.
  • Các hàm toán học để làm việc với số phức đã được chuyển từ thư viện Musl.
  • Nhiều chức năng toán học đã được tăng tốc.
  • Hàm nointernet () được đề xuất, hàm này sẽ vô hiệu hóa các khả năng của mạng.
  • Đã thêm các chức năng mới để nối các chuỗi một cách hiệu quả: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf và vappendf.
  • Một phiên bản được bảo vệ của họ hàm kprintf (), được thiết kế để hoạt động với các đặc quyền nâng cao, đã được thêm vào.
  • Cải thiện đáng kể hiệu suất triển khai SSL, SHA, curve25519 và RSA.

Cuối cùng, nếu bạn muốn tìm hiểu thêm về nó, bạn nên biết rằng mã dự ánhoặc được phân phối theo giấy phép ISC (phiên bản đơn giản của MIT / BSD).


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: AB Internet Networks 2008 SL
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.