Amsterdam Compiler Kit (ACK) は、Andrew TanenbaumとCeriel Jacobsによって作成され、2005 年以降David Givenによってメンテナンスされている、リターゲット可能なコンパイラスイートおよびツール チェーンです。[ 1 ]以下のプログラミング言語のフロントエンドがあります: C、Pascal、Modula-2、BASIC、およびOccam。
ACK の特筆すべき点は、1980 年代初頭に、複数のソース言語とターゲット プラットフォームをサポートするように設計された最初のポータブル コンパイル システムの一つであったことです。[ 2 ] [ 3 ]
ACKは、MINIXのネイティブコンパイラツールチェーンとして知られていましたが、MINIXのユーザーランドがNetBSD(MINIX 3.2.0)のものにほぼ置き換えられ、 Clangがシステムコンパイラとして採用されるまでは、その役割を果たしていました。
元々はクローズドソースのソフトウェアで、最初はタネンバウム自身によって配布され、[ 4 ]後にアメリカ大陸とヨーロッパでそれぞれ販売代理店としてUniPress SoftwareとTransmediair Utrechtを通じて配布されました。MINIX用のコンパイラバイナリの配布はこの取り決めの特別なケースでした。[ 5 ] 2003年4月、 BSDライセンスの下でリリースされました。
最大限の移植性は、EM-1 [ 6 ]または EMと呼ばれるバイトコードを使用した中間言語を使用することで実現されます。各言語のフロントエンドは EMオブジェクトファイルを生成し、それらはバックエンドによってネイティブマシンコードに変換される前に、いくつかの汎用オプティマイザによって処理されます。
ACKには、ACK独自のa.outベースのフォーマットでファイルを操作できる汎用リンカーとライブラリアンが付属しています。これは、EMコードを含むファイルとネイティブマシンコードを含むファイルの両方に対応しています。ただし、EMバイナリを最初に変換しない限り、EMコードをネイティブマシンコードにリンクすることはできません。
ACKバックエンドは、小型の8ビットCPUから始めても、幅広いCPUに対応したネイティブマシンコードを生成できます。
*バージョン 6.0