JavaScriptランタイムのBunが、C言語のコンパイルとJavaScriptプログラムからの実行をサポート

2024年10月8日

JavaScriptランタイムのBunは、C言語のコンパイルとJavaScriptプログラムからの実行をサポートすると発表しました。

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つのように見えます。

あわせて読みたい

JavaScript プログラミング言語 Bun C




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本