LLVM ベースの Go コンパイラ、Tinygo 0.7.0 のリリース

利用可能 プロジェクトのリリース タイニーゴ 0.7.0は、マイクロコントローラーやコンパクトなシングルプロセッサ システムなど、結果として得られるコードのコンパクトな表現とリソース消費量の削減を必要とする分野向けの Go 言語コンパイラーを開発しています。 コード によって配布 BSD ライセンスに基づいて。

さまざまなターゲット プラットフォームのコンパイルは LLVM を使用して実装され、Go プロジェクトのメイン ツールキットで使用されるライブラリが言語のサポートに使用されます。 コンパイルされたプログラムはマイクロコントローラー上で直接実行できるため、自動化スクリプトを作成するための言語として Go を使用できます。

新しいプロジェクトを作成する動機は、使い慣れた Go 言語をコンパクトなデバイスで使用したいという願望でした。開発者は、マイクロコントローラー用の Python バージョンが存在するのであれば、Go 言語用に同様のバージョンを作成すればよいのではないかと考えました。 行く 選択した Rust の代わりに Rust を使用するのは、学習が容易で、スレッドに依存しないコルーチンベースの並列化サポートを提供し、広範な標準ライブラリ (「バッテリーが付属」) を提供するためです。

現在の形式では、Adafruit、Arduino、BBC micro:bit、ST Micro、Digispark、Nordic Semiconductor、Makerdiary、Phytec のさまざまなボードを含む 15 のマイクロコントローラー モデルがサポートされています。 プログラムは、WebAssembly 形式でブラウザーで実行したり、Linux 用の実行可能ファイルとしてコンパイルしたりすることもできます。 ESP8266/ESP32コントローラーをサポート まだ, しかし、LLVM で Xtensa チップのサポートを追加するための別のプロジェクトが開発されていますが、これはまだ不安定としてマークされており、TinyGo と統合する準備ができていません。

プロジェクトの主な目標:

  • 非常にコンパクトな実行可能ファイルの生成。
  • マイクロコントローラー ボードの最も一般的なモデルのサポート。
  • Web アプリケーションの可能性;
  • C で関数を呼び出す際のオーバーヘッドを最小限に抑えた CGo サポート。
  • ほとんどの標準パッケージをサポートし、汎用の既存のコードを変更せずにコンパイルする機能。

    マルチコア システムのサポートは主な目標ではありませんが、
    膨大な数のコルーチンの効率的な起動 (コルーチン自体の起動は完全にサポートされています)、リファレンス コンパイラー gc のパフォーマンス レベルの達成 (最適化は LLVM に委ねられており、一部のアプリケーションでは Tinygo の方が gc よりも高速である場合があります)、および完了 互換性 すべての Go アプリケーションで使用できます。

    類似のコンパイラとの主な違い エムゴ これは、ガベージ コレクションを使用して Go の元のメモリ管理モデルを保存し、C 表現にコンパイルする代わりに LLVM を使用して効率的なコードを生成する試みです。 Tinygo は、コンパクト システム用に最適化されたスケジューラ、メモリ割り当てシステム、文字列ハンドラを実装する新しいランタイム ライブラリも提供します。 sync やリフレクトなどの一部のパッケージは、新しいランタイムに基づいて再作成されています。

    リリース 0.7 の変更点には、「tinygo test」コマンドの実装、ほとんどのターゲット ボード (ARM Cortex-M ベース) および WebAssembly のガベージ コレクション サポートの提供、RISC ベースの HiFive1 rev B ボードのサポートなどがあります。 V アーキテクチャと Arduino nano33 ボード、
    言語サポートの改善 (ゲッターとセッターを使用したビット フィールドのサポート、匿名構造体のサポート)。

    出所: オープンネット.ru

  • コメントを追加します