Phát hành Tinygo 0.7.0, trình biên dịch Go dựa trên LLVM

Có sẵn phát hành dự án Tinygo 0.7.0, công ty đang phát triển trình biên dịch ngôn ngữ Go cho các lĩnh vực yêu cầu biểu diễn mã kết quả nhỏ gọn và mức tiêu thụ tài nguyên thấp, chẳng hạn như bộ vi điều khiển và hệ thống bộ xử lý đơn nhỏ gọn. Mã số phân phối bởi theo giấy phép BSD.

Quá trình biên dịch cho các nền tảng mục tiêu khác nhau được triển khai bằng LLVM và các thư viện được sử dụng trong bộ công cụ chính của dự án Go được sử dụng để hỗ trợ ngôn ngữ. Chương trình được biên dịch có thể chạy trực tiếp trên bộ vi điều khiển, cho phép sử dụng Go làm ngôn ngữ để viết các tập lệnh tự động hóa.

Động lực tạo ra một dự án mới là mong muốn sử dụng ngôn ngữ Go quen thuộc trên các thiết bị nhỏ gọn - các nhà phát triển lý luận rằng nếu có phiên bản Python dành cho bộ vi điều khiển thì tại sao không tạo một phiên bản tương tự cho ngôn ngữ Go. Đi đã chọn thay vì Rust vì nó dễ học hơn, cung cấp hỗ trợ độc lập theo luồng cho quá trình song song hóa dựa trên coroutine và cung cấp một thư viện tiêu chuẩn mở rộng (“bao gồm cả pin”).

Ở dạng hiện tại, 15 mẫu vi điều khiển được hỗ trợ, bao gồm nhiều bo mạch khác nhau từ Adafruit, Arduino, BBC micro:bit, ST Micro, Digispark, Nordic Semiconductor, Makerdiary và Phytec. Các chương trình cũng có thể được biên dịch để chạy trong trình duyệt ở định dạng WebAssugging và dưới dạng tệp thực thi cho Linux. Hỗ trợ bộ điều khiển ESP8266/ESP32 chưa, nhưng một dự án riêng biệt đang được phát triển để bổ sung hỗ trợ cho chip Xtensa trong LLVM, vốn vẫn bị đánh dấu là không ổn định và chưa sẵn sàng để tích hợp với TinyGo.

Mục tiêu chính của dự án:

  • Tạo các tệp thực thi rất nhỏ gọn;
  • Hỗ trợ các mẫu bo mạch vi điều khiển phổ biến nhất;
  • Khả năng ứng dụng cho Web;
  • Hỗ trợ CGo với chi phí tối thiểu khi gọi các hàm trong C;
  • Hỗ trợ hầu hết các gói tiêu chuẩn và khả năng biên dịch mã tiêu chuẩn hiện có mà không cần thay đổi mã.

    Hỗ trợ cho các hệ thống đa lõi không phải là một trong những mục tiêu chính,
    Khởi chạy hiệu quả một số lượng lớn coroutine (bản thân việc khởi chạy coroutine được hỗ trợ đầy đủ), đạt được mức hiệu suất của trình biên dịch tham chiếu gc (việc tối ưu hóa được giao cho LLVM và trong một số ứng dụng Tinygo có thể nhanh hơn gc) và hoàn tất khả năng tương thích với tất cả các ứng dụng Go.

    Sự khác biệt chính từ một trình biên dịch tương tự emgo là một nỗ lực nhằm bảo tồn mô hình quản lý bộ nhớ ban đầu của Go bằng cách sử dụng tính năng thu thập rác và sử dụng LLVM để tạo mã hiệu quả thay vì biên dịch nó thành biểu diễn C. Tinygo cũng cung cấp một thư viện thời gian chạy mới triển khai bộ lập lịch, hệ thống phân bổ bộ nhớ và trình xử lý chuỗi được tối ưu hóa cho các hệ thống nhỏ gọn. Một số gói, chẳng hạn như đồng bộ hóa và phản ánh, đã được tạo lại dựa trên thời gian chạy mới.

    Trong số những thay đổi trong bản phát hành 0.7 là việc triển khai lệnh “tinygo test”, cung cấp hỗ trợ thu gom rác cho hầu hết các bo mạch mục tiêu (dựa trên ARM Cortex-M) và WebAssembly, hỗ trợ cho bo mạch HiFive1 rev B dựa trên RISC- Kiến trúc V và bo mạch Arduino nano33,
    hỗ trợ ngôn ngữ được cải thiện (hỗ trợ cho các trường bit sử dụng getters và setters, hỗ trợ cho các cấu trúc ẩn danh).

    Nguồn: opennet.ru

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