Cheerp một trình biên dịch mã nguồn mở từ C/C++ đến WebAssembly và JavaScript

cổ vũ

Cheerp: Trình biên dịch C++ cho Web

Nó đã được công bố gần đây Bản phát hành Cheerp 3.0, một trình biên dịch mà cho phép bạn biên dịch bất kỳ mã C/C++ nào thành WebAssembly hoặc JavaScript. Nhánh mới đáng chú ý vì đã chuyển trình biên dịch và các thư viện đi kèm sang sử dụng giấy phép Apache 2.0 và LLVM cho phép, thay vì chính sách giấy phép hạn chế được áp dụng trước đây, chính sách này cung cấp tùy chọn giấy phép GPLv2 cho các dự án phi thương mại và chủ sở hữu giấy phép cho các dự án thương mại.

Cheerp có thể được sử dụng để chuyển các ứng dụng và thư viện C/C++ hiện có sang chạy trong trình duyệt hoặc để tạo các ứng dụng web hiệu năng cao và các thành phần WebAssugging từ đầu.

Đã hơn một năm kể từ khi phát hành Cheerp trước đó ( Cheerp 2.7 ), và phiên bản mới này được tích hợp nhiều tính năng và tối ưu hóa mới, một lần nữa, nâng cao trình độ nghệ thuật sử dụng C++ làm ngôn ngữ lập trình cho các ứng dụng Web. và Trò chơi.

Quan trọng nhất, với bản phát hành này, chúng tôi đang thực hiện một thay đổi đáng kể đối với mô hình cấp phép của Cheerp. Kể từ Cheerp 3.0, tất cả các thành phần và thư viện trình biên dịch cốt lõi hiện được cấp phép theo giấy phép Apache 2.0/LLVM. Điều này đánh dấu sự khác biệt hoàn toàn so với mô hình giấy phép thương mại kép/GPLv2 trước đây của chúng tôi, cho phép sử dụng Cheerp 3.0 cho bất kỳ mục đích nào mà không bị hạn chế.

Giới thiệu về Cheerp

Dự án cho phép bạn kết hợp mã C/C++ và JavaScript trong ứng dụng web với khả năng truy cập từ mã JavaScript đến các chức năng ban đầu được phát triển bằng C/C++ và từ mã C/C++ đến các đối tượng JavaScript, thư viện JavaScript, API Web và tất cả các tính năng DOM, cũng như cho phép bạn tạo các bản dựng hỗn hợp, một phần của mã biên dịch thành JavaScript và các phần thành WebAssugging. Hỗ trợ các dự án xây dựng sử dụng thư viện libc và libc++ tiêu chuẩn.

So với trình biên dịch Emscripten, Cheerp tạo mã trung gian WebAssugging nhỏ gọn và tối ưu hơn (Trung bình, kích thước tệp thu được nhỏ hơn 7%).

Về mặt khái niệm, sự khác biệt dẫn đến thực tế là Đăng ký được sử dụng làm định dạng đối tượng của WebAssugging và thực hiện ràng buộc và tối ưu hóa trong giai đoạn hậu xử lý của lắp ráp web (wasm-opt). Cheerp sử dụng mã byte LLVM làm đại diện trung gian cho các thư viện và tệp đối tượng, cho phép tối ưu hóa toàn dự án rộng hơn bằng cách sử dụng siêu dữ liệu cấp LLVM mà không cần xử lý hậu kỳ.

Bài viết liên quan:
Emscripten 3.0, một chuỗi công cụ xây dựng cho WebAssembly sử dụng LLVM

Bên cạnh đó, Cheerp sử dụng trình tối ưu hóa PreExecuter để thực thi mã trước ví dụ, tại thời điểm biên dịch, để chuyển đổi các hàm tạo được sử dụng để khởi tạo các đối tượng toàn cục thành các hằng số. Ngoài ra, PartialExecuter được sử dụng trong quá trình biên dịch, dựa trên phân tích cú pháp các tham số của hàm, loại bỏ mã được đảm bảo không được sử dụng khi thực thi.

Cheerp cũng có thể tạo mã JavaScript để hoạt động linh hoạt với bộ nhớ. được bao phủ bởi bộ thu gom rác. Cụ thể, thay vì mô phỏng một không gian địa chỉ truyền thống với các mảng đã nhập, Cheerp cung cấp ánh xạ trực tiếp từ các đối tượng C++ sang các đối tượng JavaScript, giúp giảm mức tiêu thụ bộ nhớ vì trình thu gom rác JavaScript có khả năng loại bỏ các đối tượng không sử dụng. Để cải thiện hiệu suất, mã trung gian WebAssugging được tạo sử dụng các phần mở rộng SIMD để sắp xếp việc song song hóa các hoạt động dữ liệu.

Cheerp có thể được sử dụng làm nền tảng để xây dựng các ứng dụng web nhúng máy khách/máy chủ trong C++. Trong thực tế hiện tại, người ta thường phát triển một giao diện người dùng dựa trên trình duyệt riêng biệt được viết bằng JavaScript và một giao diện người dùng riêng biệt được viết bằng PHP, Python, Ruby hoặc JavaScript/Node.js.

Cheerp cung cấp phương tiện để xây dựng các ứng dụng web C++ hoàn chỉnh hỗ trợ cả phụ trợ và giao diện người dùng trong một cơ sở mã duy nhất.

Trong quá trình xây dựng, phía máy chủ được biên dịch thành mã gốc và giao diện được chuyển đổi thành biểu diễn JavaScript. Gỡ lỗi tất cả các thành phần dự án, bao gồm cả những thành phần được chuyển đổi thành JavaScript, được thực hiện bằng văn bản nguồn C++ bằng công nghệ Bản đồ nguồn.

Cuối cùng, nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết trong liên kết theo dõi.

Mã trình biên dịch dựa trên sự phát triển của LLVM và Clang, đồng thời bao gồm các tối ưu hóa bổ sung để cải thiện hiệu suất và giảm kích thước của đầu ra được biên dịch.


Để 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.