JavaScriptランタイムのBunが、C言語のコンパイルとJavaScriptプログラムからの実行をサポート
JavaScriptランタイムのBunは、C言語のコンパイルとJavaScriptプログラムからの実行をサポートすると発表しました。
In Bun v1.1.28, we added support for compiling and running C from JavaScripthttps://t.co/eoClllphwj pic.twitter.com/YwCW7Uc7CT
— Bun (@bunjavascript) September 18, 2024
JavaScriptを用いてアプリケーション開発を行う際に、システムの持つ機能を呼び出したい場合にはNode.jsやBunに実装されたN-API、もしくはJavaScriptエンジンV8のAPIをC言語経由で呼び出すか、あるいはWebAssemblyを用いるか、などの手段を用いるのが一般的でした。
今回、JavaScriptランタイムのBunそのものがC言語のコンパイルと実行の機能を備えたことで、C言語のAPIを呼び出す3つ目の方法を提供することになります。
これはN-APIの呼び出しには実装の関係で呼び出しのオーバーヘッドがあり実行速度が遅いこと、V8のAPIはバージョンアップにより使えなくなってしまうことがあること、そもそもC言語をコンパイルしてバイナリを生成するのが手間であること、WebAssemblyはサンドボックスによって分離されているため柔軟性が低い、などの従来の課題を解決する手段として提供されるものです。
Bunが提供する機能は、共有メモリを用いてJavaScriptからC言語をコンパイルして実行することで、ほぼ呼び出しのオーバーヘッドなく呼び出せると説明されています。
下記はサンプルとなるC言語のコード。乱数を返します。
#include <stdio.h>
#include <stdlib.h>
int myRandom() {
return rand() + 42;
}
上記のCのコードをコンパイルして呼び出すためのJavaScriptのコード。
import { cc } from "bun:ffi";
export const {
symbols: { myRandom },
} = cc({
source: "./myRandom.c",
symbols: {
myRandom: {
returns: "int",
args: [],
},
},
});
console.log("myRandom() =", myRandom());
実行したところ。
$bun ./main.js
myRandom() = 43
JavaScriptランタイムはNode.js、Deno、Bunなどのソフトウェアだけでなく、CloudflareやAWSなどサービスベンダも入り交じって競争が続いています。その中で各プロダクトともに事実上の標準であるNode.jsとの互換性を守りつつもそれぞれの特徴を出そうとしているところで、今回のBunのC言語サポートもそうした特徴をだそうとする努力の1つのように見えます。
あわせて読みたい
ChatGPTがコーディング支援を強化。コードエディタ機能を統合、コードレビューやデバッグ、他言語への移植ツールなどを含む新機能「Canvas」が登場
≪前の記事
AIにフルスタックアプリの生成を指示、Webブラウザ上のNode.js環境でそのまま実行できる「bolt.new」、StackBlitzが公開