Skip to content

Projects and Modules

james-yusuke edited this page Jul 16, 2026 · 1 revision

プロジェクトとモジュール

YCPLは単一.ycファイル、directory、またはYCPL.jsonを持つprojectを コンパイルできます。

YCPL.json

{
  "name": "my_project",
  "version": "0.1.0",
  "entry": "src/main.yc",
  "src": ["src/"],
  "output": "build/"
}

src directoryは再帰走査されます。source discoveryはsymlinkをstatで追跡し、 device/inodeで循環を防ぎます。見つかった.yc sourceはproject-relative pathで sortされ、この安定順にfile IDが割り当てられます。

import解決

import path
├─ "."で始まるrelative path
├─ projectのsrc directory
├─ stl/std
└─ stl/c

各候補ではpath.ycpath/index.ycを探索します。

import "math/basic" as math
import "std/fmt" as fmt
import "c/string" as cstr

std/*は言語レベルの標準API、c/*はC、POSIX、LLVMのraw ABI境界です。

可視性

module math

pub fn add(a i32, b i32) i32 {
    return a + b
}

fn helper() i32 {
    return 1
}

import側はmath.add(...)を呼べますが、privateなhelperは参照できません。 公開function symbolはmodule名を含めてmangleされ、entry pointのmainmainのままです。

driver

ycc build
ycc build-ir
ycc run
ycc check
ycc resolve

driverはbuildbuild-irrundebuglexparsecheckresolvehelp-o--keep-obj--link-llvm--以降の実行引数を 扱います。

Clone this wiki locally