mcpField
H
hare-lang

hare-lang

github.com/mohitmishra786開発269265 回インストール18 週間前に更新
リポジトリ

hare-lang について

システムユーティリティを開発する人向けの Hare 言語ガイドです。ビルドとテスト、標準ライブラリー、明示的なエラー処理、C FFI を扱い、依存の少ない小規模ツールやデーモンに焦点を当てます。

主な機能

  1. 01hare build、test、run の利用
  2. 02標準ライブラリーモジュールの確認
  3. 03明示的なエラー伝播と処理
  4. 04@extern による C FFI
  5. 05タグ付き共用体とスライスの理解

活用シーン

  1. 01CLI ツールやビルドツールの作成
  2. 02軽量なネットワークデーモンの実装
  3. 03C ライブラリー呼び出しや C 向け関数の公開
  4. 04Hare、C、Zig の比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill hare-lang

インストール後、Claude Code で/hare-langを入力して読み込まれたか確認します。

詳細

Hare

目的

Hare プログラミング言語についてエージェントをガイドします。設計理念(シンプルで安定したコンパイル型言語)、hare build/test/run のワークフロー、標準ライブラリの概要、@extern による C FFI、型システム(タグ付き共用体、スライス)、(T | error!) によるエラー処理、システムユーティリティにおける C および Zig との比較を扱います。

使用する場面

  • C のような制御性と、現代的な安全性を備えた小規模なシステムユーティリティを作成する場合
  • 依存関係を最小限に抑えて CLI ツールやデーモンを構築する場合
  • Hare から C ライブラリを呼び出す場合、または Hare の関数を C にエクスポートする場合
  • 例外よりも明示的なエラー処理を優先する場合
  • 新しいプロジェクトで Hare、C、Zig のいずれを使うか評価する場合
  • 重いランタイムを使わず、安定して監査しやすいコードベースが必要な場合

ワークフロー

1. Hare をインストールする
# Linux/macOS — build from source
git clone https://git.sr.ht/~sircmpwn/hare
cd hare
make check   # builds and runs tests
sudo make install

hare version
# Create project (Hare has no project generator — lay out manually)
mkdir -p mytool && cd mytool
cat > hare.mod << 'EOF'
module mytool
EOF
2. Hello world とビルド
// main.ha
use fmt;

export fn main() void = {
	fmt::println("Hello, Hare!")!;
};
hare build -o mytool
./mytool

hare run .        # build and run
hare test         # run tests
3. 標準ライブラリの概要
モジュール目的
fmt書式付き I/O(printf、println)
ioリーダー/ライターのインターフェース
osファイル、環境、引数
strings文字列操作
bufioバッファー付き I/O
encodingJSON、16 進数など
netTCP/UDP ネットワーク
time日付と時間間隔
memメモリー関連のヘルパー
typesプラットフォームの整数型
use os;
use fmt;
use strings;

export fn main() void = {
	const args = os::args;
	for (let i = 0z; i < len(args); i += 1) {
		fmt::println(args[i])!;
	};
};
4. エラー処理
// Errors are tagged union values — explicit propagation with !
fn read_file(path: str) (str | os::error) = {
	const file = os::open(path)?;
	defer os::close(file);
	let buf: []u8 = [];
	io::readall(file, &buf)?;
	return strings::fromutf8(buf)!;
};

export fn main() void = {
	match (read_file("config.txt")) {
	case let s: str =>
		fmt::println(s)!;
	case let err: os::error =>
		fmt::fatalf("error: {}", err)!;
	};
};

? はエラーを伝播し、! はエラーが発生しないコンテキストで成功を保証します。処理には match を使います。

5. 型システム
// Tagged union
type color = (u8 | u16 | void);

fn get_color(c: color) u16 = {
	match (c) {
	case let v: u8 => return v: u16;
	case let v: u16 => return v;
	case => abort();
	};
};

// Slices — pointer + length
fn sum(nums: []i32) i32 = {
	let total = 0i32;
	for (let i = 0z; i < len(nums); i += 1) {
		total += nums[i];
	};
	return total;
};

暗黙的な型変換はありません。明示的なキャストが必要です。

6. C FFI — @extern
// Link against C library
use c;

@extern("c") fn strlen(s: *const u8) size;

export fn main() void = {
	const s = "hello";
	fmt::println(len(s))!;  // Hare strlen via strings module
};

Hare の関数を C にエクスポートする方法:

// Exported C ABI function
export fn my_add(a: i32, b: i32) i32 = {
	return a + b;
};
hare build -o libmytool.a
# Link from C with generated headers or manual declarations
// cgo-style module linking in hare.mod
module mytool
require (
    libc
)
7. テスト
@test fn test_add() void = {
	assert(sum(&[1i32, 2, 3]) == 6);
};

@test fn test_error() void = {
	match (read_file("/nonexistent")) {
	case => abort("expected error");
	case let err: os::error => void;
	};
};
hare test -v
8. Hare、C、Zig の比較
項目HareCZig
メモリー安全性一部(null なし、タグ付きエラー)手動手動+任意の安全性チェック
コンパイル時間高速高速Comptime の処理が重い
標準ライブラリ最小限で安定libc豊富
C との相互運用@externネイティブ@cImport
ジェネリクスなし(Comptime は限定的)なしComptime ジェネリクス
最適な用途ユーティリティ、ツールあらゆる用途メタプログラミングを伴うシステム
9. ユースケース
Good Hare fits
├── CLI utilities (grep-like, init tools)
├── Build tools and scripts replacing shell
├── Network daemons with simple protocol
└── Auditable security-sensitive code

Consider C/Zig instead when
├── Heavy generic metaprogramming needed (Zig)
├── Existing massive C ecosystem glue
└── GPU/kernel domains with immature Hare support

よくある問題

症状原因解決方法
unknown typeインポートの不足use module; を追加する
FFI のリンクエラーライブラリが hare.mod にないrequire を追加し、-l フラグを正しく指定する
エラーが処理されない? または match の不足エラーを伝播するか、すべてのケースを処理する
UTF-8 エラー文字列内の無効なバイトstrings::fromutf8 で検証する
テストが見つからない@test の不足関数名に @test 属性を付ける
プラットフォームのシステムコールがないHare 標準ライブラリの不足libc に @extern を使う

関連スキル

  • skills/zig/zig-compiler — 代替のシステム言語としての Zig
  • skills/zig/zig-cinterop — Zig の C 相互運用との比較
  • skills/compilers/gcc — Hare と併用する C ツールチェーン
  • skills/languages/carbon-lang — 新興のその他のシステム言語
  • skills/build-systems/make — Makefile への Hare の統合
  • skills/runtime-safety/sanitizers — C 相互運用の安全性テスト

コメント