pugã¯ãããã°ã©ãã³ã°èšèªåŠçç³»ã®å éšæ§é ããæåã¯æ°åè¡ã®ã¬ã¯ãµãŒã ãã§çè§£ãããã®åŸæ®µéçã«æ¬æ Œçãªæé©åã³ã³ãã€ã©ãžãšé²åãããåŠç¿ãããžã§ã¯ãã§ãã
ð ã³ã³ã»ãã
ãã°ç¬ã®ããã«ããããã¶ãããã©ãããããããèŠãç®ã§ãèšèªåŠçã®äžèº«ã¯è©°ãŸã£ãŠãããæåã¯ç°¡æãªããŒã¯ã³è§£æããå§ãŸããæçµçã«ã¯é«åºŠãªæé©åãè¡ãLLVM飿ºã³ã³ãã€ã©ãžæé·ããŸãã
ð¯ ãããžã§ã¯ãã®ç®ç
-
ã³ã³ãã€ã©æè¡ã®å®è·µçåŠç¿: åå¥è§£æããæé©åãŸã§æ®µéçã«çè§£
-
èšèªåŠçç³»ã®æ¯èŒåŠç¿: ç°ãªãã¢ãããŒãã§ã®å®è£ æ¯èŒã»åæ
-
æé©åæè¡ã«ããåŠç¿: å®éçãªæ§èœæ¹å广ãå¯èŠå
-
å®çšçãªéçºã¯ãŒã¯ãããŒç¿åŸ: ãã¹ãé§åéçºãåè³ªç®¡çææ³
ð çŸåšã®å®è£ ç¶æ³
â å®è£ æžã¿ã»é²è¡äžæ©èœ
| ãã§ãŒãº | æ©èœ | å®è£ ç¶æ³ | 説æ |
|---------|------|----------|------|
| 1.0 | ã·ã³ãã«ã¬ã¯ãµãŒ | â éšåå®è£ | ããŒã¯ã³åãèå¥åã»æ°å€ã»æŒç®å |
| 1.1 | åºæ¬ããŒãµãŒ | â éšåå®è£ | ååž°äžéæ³ãASTæ§ç¯ãååæŒç® |
| 1.2 | ã·ã³ãã«ã€ã³ã¿ãŒããªã¿ãŒ | ð éçºäž | ASTçŽæ¥å®è¡ã倿°ã»é¢æ°å¯Ÿå¿ |
| 2.0 | ã³ãŒãçæåš | â éšåå®è£ | ã¢ã»ã³ããªåºåãã¬ãžã¹ã¿å²ãåœãŠ |
| 2.1 | åã·ã¹ãã | ð èšç»äž | éç忀æ»ãåæšè«ããšã©ãŒå ±å |
| 2.2 | å¶åŸ¡æ§é | ð èšç»äž | if/while/forãã¹ã³ãŒã管ç |
| 3.0 | äžé衚çŸïŒIRïŒ | ð èšç»äž | SSA圢åŒãåºæ¬ãããã¯ãCFG |
| 3.1 | åºæ¬æé©å | ð èšç»äž | 宿°ç³ã¿èŸŒã¿ããããã³ãŒãé€å» |
| 3.2 | é«åºŠæé©å | ð èšç»äž | ã«ãŒãæé©åãã€ã³ã©ã€ã³å±é |
| 4.0 | LLVM飿º | ð èšç»äž | LLVM IRçæããã©ãããã©ãŒã å¯Ÿå¿ |
| ð¯ | æ§èœæž¬å®åºç€ | â å®å šå®è£ | å æ¬çãã³ãããŒã¯ã»æ¯èŒã·ã¹ãã |
ð åçãªæ§èœåäžãå®çŸäºå®
ææ°æ§èœåæç®æš
ã·ã³ãã«ãªã€ã³ã¿ãŒããªã¿ãŒå®è£ ããææ°LLVMæé©åã³ã³ãã€ã©ãžã®ç§»è¡ã«ãããç£æ¥çŽã³ã³ãã€ã©ã¬ãã«ã®æ§èœåäžãéæäºå®ïŒ
| å®è£ | ã³ã³ãã€ã«æé | å®è¡æ§èœ | çæã³ãŒããµã€ãº | ç¹åŸŽ |
|------|-------------|----------|----------------|------|
| Phase 1 ã€ã³ã¿ãŒããªã¿ãŒ | - | 1.0x (ããŒã¹ã©ã€ã³) | - | ã·ã³ãã«è§£éå®è¡ |
| Phase 2 ãã€ãŒãã³ã³ãã€ã© | 50ms | 10x faster | 100% | çŽæ¥ã¢ã»ã³ããªçæ |
| Phase 3 æé©åã³ã³ãã€ã© | 100ms | 50x faster | 70% | IRæé©å |
| ð Phase 4 LLVM飿º | 200ms | 100x faster | 50% | ç£æ¥çŽæé©å |
ð æåŸ ãããæ¹å广
-
å®è¡æ§èœ: 100åé«éå (ã€ã³ã¿ãŒããªã¿ãŒ â LLVMã³ã³ãã€ã©)
-
ã³ãŒããµã€ãº: 50%åæž (æé©åã«ããå¹çå)
-
éçºå¹ç: 段éçåŠç¿ ã«ããç解床åäž
-
ç§»æ€æ§: LLVMå¯Ÿå¿ ã«ãããã«ããã©ãããã©ãŒã
ð æ§èœæž¬å®ã·ã¹ãã
ð¯ å®è£ æžã¿æ§èœæž¬å®åºç€
pugãããžã§ã¯ãã«ã¯ãäžçã¯ã©ã¹ã®å æ¬çæ§èœãã³ãããŒã¯ã·ã¹ãã ãå®å šå®è£ æžã¿ã§ãïŒ
ð æž¬å®æ©èœ
- ã³ã³ãã€ã«æé枬å®: Phase1-4ã®æ®µéçæ§èœæž¬å®
- å®è¡ææ§èœæž¬å®: FibonacciããœãŒããæ°å€èšç®ãè€éå¶åŸ¡æ§é
- ç£æ¥æšæºæ¯èŒ: GCC (O0-O3) & Rust (debug/release) ãšã®è©³çްæ¯èŒ
- ã¡ã¢ãªäœ¿çšéåæ: å®è¡æã¡ã¢ãªäœ¿çšéãšãªãŒã¯æ€åº
- ãã€ããªãµã€ãºæé©å: çæã³ãŒããµã€ãºæž¬å®ã»æ¯èŒ
ð èªååã»çµ±åæ©èœ
- JSON/HTMLã¬ããŒãçæ: æ©æ¢°å¯èªïŒèŠèŠçãªæ§èœã¬ããŒã
- GitHub WikièªåæŽæ°: 枬å®çµæã®ç¶ç¶çããã¥ã¡ã³ãå
- CI/CDçµ±å: èªåãã³ãããŒã¯å®è¡ãšã¢ãŒãã£ãã¡ã¯ãä¿å
- ã»ãã¥ãªãã£æ€èšŒæžã¿: gosecèªèšŒæžã¿ã®å®å šãªå®è£
- æ§èœã°ã¬ãŒãè©äŸ¡: S+ãDã®6段éèªåè©äŸ¡ã·ã¹ãã
ð§ æè¡çç¹åŸŽ
- 4,400è¡+ ã®å®è£ : å æ¬çãã³ãããŒã¯ã·ã¹ãã (8ãã¡ã€ã«)
- ã»ãã¥ãªãã£èªèšŒ: GitHub Actions ã»ãã¥ãªãã£ã¹ãã£ã³ééæžã¿
- æ¡åŒµå¯èœæ§: æ°ããæ¯èŒå¯Ÿè±¡ã»ã¡ããªã¯ã¹ã®å®¹æãªè¿œå
- ã¯ãã¹ãã©ãããã©ãŒã : Windows/Linux/macOS察å¿
ð çŸåšã®æž¬å®ç¶æ³
ææ°ã®æ§èœæž¬å®ã¬ããŒãã¯ä»¥äžã«ä¿åãããŠããŸãïŒ
- JSON圢åŒ:
benchmark_results.json
- æ©æ¢°å¯èªãªè©³çްããŒã¿ - HTML圢åŒ:
performance_report.html
- èŠèŠçãªæ§èœã¬ããŒã - å®è£
ç¶æ³:
PERFORMANCE_STATUS.md
- 詳现ãªå®è£ ç¶æ³åæ
詳现㯠GitHub Wiki (äœæäºå®) - Compiler Performance Analysis Report ãåç §
ð ãããžã§ã¯ãæ§æäºå®
pug/
âââ phase1/ # Phase 1: åºæ¬èšèªåŠç
â âââ lexer.go # åå¥è§£æåšïŒããŒã¯ãã€ã¶ãŒïŒ
â âââ parser.go # æ§æè§£æåšïŒååž°äžéæ³ïŒ
â âââ ast.go # æœè±¡æ§ææšå®çŸ©
â âââ interpreter.go # ã·ã³ãã«ã€ã³ã¿ãŒããªã¿ãŒ
â âââ *_test.go # åãã§ãŒãºã®ãã¹ãã¹ã€ãŒã
â
âââ phase2/ # Phase 2: ã³ã³ãã€ã©åºç€
â âââ codegen.go # ã¢ã»ã³ããªã³ãŒãçæ
â âââ types.go # åã·ã¹ãã ã»åæ€æ»
â âââ symbols.go # ã·ã³ãã«ããŒãã«ã»ã¹ã³ãŒã
â âââ control.go # å¶åŸ¡æ§é ïŒif/while/forïŒ
â âââ *_test.go # ã³ã³ãã€ã©æ©èœãã¹ã
â
âââ phase3/ # Phase 3: äžé衚çŸã»æé©å
â âââ ir/ # äžé衚çŸïŒSSA圢åŒïŒ
â â âââ builder.go # IRæ§ç¯åš
â â âââ ssa.go # SSA倿ã»PHI颿°
â â âââ cfg.go # å¶åŸ¡ãããŒã°ã©ã
â â âââ analysis.go # ããŒã¿ãããŒè§£æ
â â
â âââ optimizer/ # æé©åãã¹
â â âââ constant_fold.go # 宿°ç³ã¿èŸŒã¿
â â âââ dead_code.go # ãããã³ãŒãé€å»
â â âââ loop_opt.go # ã«ãŒãæé©å
â â âââ inline.go # ã€ã³ã©ã€ã³å±é
â â
â âââ backend/ # ã³ãŒãçæããã¯ãšã³ã
â âââ x86_64.go # x86-64ã¿ãŒã²ãã
â âââ arm64.go # ARM64ã¿ãŒã²ãã
â âââ regalloc.go # ã¬ãžã¹ã¿å²ãåœãŠ
â
âââ phase4/ # Phase 4: LLVMçµ±åã»ç£æ¥çŽ
â âââ llvm/ # LLVM飿º
â â âââ ir_gen.go # LLVM IRçæ
â â âââ optimization.go # LLVMæé©åãã¹
â â âââ targets.go # ãã«ãã¿ãŒã²ãã察å¿
â â
â âââ runtime/ # ã©ã³ã¿ã€ã ã·ã¹ãã
â â âââ gc.go # ã¬ããŒãžã³ã¬ã¯ã·ã§ã³
â â âââ memory.go # ã¡ã¢ãªç®¡ç
â â âââ exceptions.go # äŸå€åŠç
â â
â âââ tools/ # éçºããŒã«
â âââ debugger.go # ãããã¬ãŒ
â âââ profiler.go # ãããã¡ã€ã©ãŒ
â âââ lsp.go # Language Server Protocol
â
âââ cmd/
â âââ pug/main.go # ã³ã³ãã€ã© CLI ãšã³ããªãŒãã€ã³ã
â âââ interp/main.go # ã€ã³ã¿ãŒããªã¿ãŒ CLI
â âââ tools/main.go # éçºããŒã«çµ±åCLI
â
âââ examples/ # ãµã³ãã«ããã°ã©ã
â âââ hello.dog # Hello World
â âââ fibonacci.dog # ãã£ããããæ°å
â âââ sorting.dog # ãœãŒãã¢ã«ãŽãªãºã
â âââ web_server.dog # ç°¡æWebãµãŒããŒ
â âââ ray_tracer.dog # ã¬ã€ãã¬ãŒãµãŒ
â
âââ benchmark/ # â
æ§èœæž¬å®ã»æ¯èŒããŒã« (å®å
šå®è£
æžã¿)
â âââ compiler_bench.go # ã³ã³ãã€ã«æé枬å®ã·ã¹ãã
â âââ vs_gcc.go # GCCæ¯èŒãã³ãããŒã¯ (O0-O3察å¿)
â âââ vs_rust.go # Rustæ¯èŒãã³ãããŒã¯ (debug/release)
â âââ report.go # JSON/HTMLã¬ããŒãçæãšã³ãžã³
â âââ wiki_update.go # GitHub WikièªåæŽæ°ã·ã¹ãã
â âââ benchmark_test.go # å
æ¬çãã¹ãã¹ã€ãŒã
â âââ doc.go # ããã±ãŒãžããã¥ã¡ã³ã
â âââ README.md # ãã³ãããŒã¯ã·ã¹ãã 詳现
â
âââ docs/ # 段éçåŠç¿ããã¥ã¡ã³ã
â âââ phase1_tutorial.md # Phase 1 åŠç¿ã¬ã€ã
â âââ phase2_tutorial.md # Phase 2 åŠç¿ã¬ã€ã
â âââ compiler_theory.md # ã³ã³ãã€ã©çè«è§£èª¬
â âââ optimization_guide.md # æé©åæè¡ã¬ã€ã
â
âââ .github/workflows/ci.yml # CI/CD ãã€ãã©ã€ã³
âââ Makefile # çµ±åéçºã³ãã³ã
âââ go.mod # Go module å®çŸ©
âââ language_spec.md # Dog èšèªä»æ§æž
ð äœ¿çšæ¹æ³äºå®
éçºç°å¢ã»ããã¢ãã
make help # å©çšå¯èœã³ãã³ãäžèЧ
make dev # éçºç°å¢ã»ããã¢ãã
Phase 1: ã€ã³ã¿ãŒããªã¿ãŒïŒåŠç¿éå§ïŒ
# ãã«ã
make phase1-build
# Hello Worldå®è¡
echo 'print("Hello, pug!")' > hello.dog
./bin/interp hello.dog # Output: Hello, pug!
# ã€ã³ã¿ã©ã¯ãã£ãREPL
./bin/interp --repl
pug > 2 + 3 * 4 # Output: 14
pug > let x = 10; x * x # Output: 100
Phase 2: åºæ¬ã³ã³ãã€ã©
# ã³ã³ãã€ã« & å®è¡
./bin/pug hello.dog -o hello # ã¢ã»ã³ããªçæ & ãªã³ã¯
./hello # Output: Hello, pug compiler!
# ã¢ã»ã³ããªåºå確èª
./bin/pug hello.dog --emit-asm # ã¢ã»ã³ããªã³ãŒã衚瀺
./bin/pug hello.dog --emit-ast # ASTæ§é 衚瀺
Phase 3: æé©åã³ã³ãã€ã©
# æé©åã¬ãã«æå®
./bin/pug program.dog -O0 # æé©åãªã
./bin/pug program.dog -O1 # åºæ¬æé©å
./bin/pug program.dog -O2 # é«åºŠæé©å
# æé©åéçšç¢ºèª
./bin/pug program.dog --emit-ir # äžé衚çŸåºå
./bin/pug program.dog --emit-ir-opt # æé©ååŸIRåºå
./bin/pug program.dog --optimization-report # æé©åã¬ããŒã
Phase 4: LLVM飿ºïŒç£æ¥çŽïŒ
# LLVM ããã¯ãšã³ã䜿çš
./bin/pug program.dog --backend=llvm --target=x86_64
./bin/pug program.dog --backend=llvm --target=arm64
./bin/pug program.dog --backend=llvm --target=wasm
# é«åºŠãªããŒã«äœ¿çš
./bin/tools debug program.dog # ãããã¬ãŒèµ·å
./bin/tools profile program.dog # ãããã¡ã€ãªã³ã°
./bin/tools lsp # Language Serverèµ·å
æ§èœåæã»æ¯èŒ (â å®è£ æžã¿)
# å
æ¬çãã³ãããŒã¯æž¬å®
make bench-comprehensive # å
šæ©èœãã³ãããŒã¯å®è¡
make bench-compiler # ã³ã³ãã€ã©åäœãã³ãããŒã¯
make bench-gcc # GCCæ¯èŒãã³ãããŒã¯
make bench-rust # Rustæ¯èŒãã³ãããŒã¯
make bench-evolution # é²ååæãã³ãããŒã¯
make bench-report # ã¬ããŒãçæ
# æ§èœã¬ããŒãçæ
make bench-json # JSON圢åŒã¬ããŒã
make bench-html # HTML圢åŒã¬ããŒã
make bench-wiki # GitHub WikiæŽæ°
# CI/CDçµ±å
# GitHub Actions ã§èªåå®è¡ãããæ§èœæž¬å®
# - ç¶ç¶çæ§èœãã©ããã³ã°
# - ååž°æ€åºã»ã¢ã©ãŒã
# - ã¢ãŒãã£ãã¡ã¯ãèªåä¿å
ð§ äž»èŠæ©èœè©³çްäºå®
ð¯ Dog èšèªä»æ§ïŒæ®µéçæ¡åŒµïŒ
Phase 1: åºæ¬æ©èœ
// åºæ¬ããŒã¿å
let x: int = 42;
let y: float = 3.14;
let name: string = "Compiler";
let flag: bool = true;
// åºæ¬æŒç®
let result = (x + 10) * 2;
print(result); // Output: 104
// 颿°å®çŸ©
fn fibonacci(n: int) -> int {
if n <= 1 {
return n;
}
return fibonacci(n-1) + fibonacci(n-2);
}
Phase 2: æ¡åŒµæ©èœ
// æ§é äœ
struct Point {
x: float,
y: float,
}
// é
åã»ã¹ã©ã€ã¹
let numbers: [int] = [1, 2, 3, 4, 5];
let slice = numbers[1..4]; // [2, 3, 4]
// ã«ãŒãã»å¶åŸ¡æ§é
for i in 0..10 {
if i % 2 == 0 {
print(i);
}
}
// ãšã©ãŒãã³ããªã³ã°
fn divide(a: int, b: int) -> Result<int, string> {
if b == 0 {
return Err("Division by zero");
}
return Ok(a / b);
}
Phase 3-4: é«åºŠæ©èœ
// ãžã§ããªã¯ã¹
fn max<T: Comparable>(a: T, b: T) -> T {
return a > b ? a : b;
}
// ãã¬ã€ãã»ã€ã³ã¿ãŒãã§ãŒã¹
trait Drawable {
fn draw(self);
}
// éåæã»äžŠè¡åŠç
async fn fetch_data(url: string) -> Result<Data, Error> {
let response = await http::get(url);
return parse_json(response.body);
}
// ã¡ã¢ãªç®¡çïŒæææš©ã·ã¹ãã ïŒ
fn process_data(data: owned Data) -> ProcessedData {
// dataã®æææš©ãåãåãã倿åŸã«è¿ã
return transform(data);
}
â¡ æé©åæè¡å®è£ äºå®
Phase 3: åºæ¬æé©å
-
宿°ç³ã¿èŸŒã¿: ã³ã³ãã€ã«æèšç®ã«ããå®è¡æè² è·åæž
-
ãããã³ãŒãé€å»: å°éäžå¯èœã³ãŒãã®èªååé€
-
å ±ééšååŒé€å»: éè€èšç®ã®æé©å
-
ã«ãŒãäžå€åŒç§»å: ã«ãŒãå äžå€èšç®ã®å€åŽç§»å
Phase 4: é«åºŠæé©å
-
ã€ã³ã©ã€ã³å±é: 颿°åŒã³åºããªãŒããŒãããé€å»
-
ã«ãŒãæé©å: ã¢ã³ããŒãªã³ã°ããã¯ãã«å
-
ã¬ãžã¹ã¿å²ãåœãŠ: ã°ã©ãåœ©è²æ³ã«ããå¹ççå²ãåœãŠ
-
åœä»€ã¹ã±ãžã¥ãŒãªã³ã°: CPUæé©åã»ãã€ãã©ã€ã³æŽ»çš
ð é«åºŠè§£ææ©èœ
éçè§£æ
-
å¶åŸ¡ãããŒè§£æ: ãããã³ãŒãã»å°éå¯èœæ§æ€åº
-
ããŒã¿ãããŒè§£æ: 倿°çåæéã»äœ¿çš-å®çŸ©ãã§ãŒã³
-
ãšã€ãªã¢ã¹è§£æ: ãã€ã³ã¿ã»åç §ã®å¥åè§£æ
-
ãšã¹ã±ãŒãè§£æ: ããŒãå²ãåœãŠæé©å
åçè§£æã»ãããã¡ã€ãªã³ã°
-
å®è¡æãããã¡ã€ãªã³ã°: ãããã¹ãããç¹å®
-
ã¡ã¢ãªäœ¿çšé远跡: ãªãŒã¯æ€åºã»æé©åæé
-
åå²äºæž¬æ å ±: æ¡ä»¶å岿é©å
-
ãã£ãã·ã¥å¹çåæ: ã¡ã¢ãªã¢ã¯ã»ã¹ãã¿ãŒã³æåªå
ð å®çšæ§ãšã¹ã±ãŒã©ããªãã£äºå®
ãªã¢ã«ã¿ã€ã æ§èœç®æš
# ã³ã³ãã€ã«æ§èœç®æšïŒ1äžè¡ããã°ã©ã ïŒ
Phase 1 ã€ã³ã¿ãŒããªã¿ãŒ: å³åº§å®è¡ (0.1ç§)
Phase 2 åºæ¬ã³ã³ãã€ã©: é«éã³ã³ãã€ã« (1ç§)
Phase 3 æé©åã³ã³ãã€ã©: ãã©ã³ã¹ (5ç§)
Phase 4 LLVM飿º: æé«å質 (10ç§)
# å®è¡æ§èœç®æšïŒãã£ãããã40åïŒ
Phase 1 ã€ã³ã¿ãŒããªã¿ãŒ: 10ç§
Phase 2 ãã€ãŒãã³ã³ãã€ã©: 1ç§ (10x faster)
Phase 3 æé©åã³ã³ãã€ã©: 0.2ç§ (50x faster)
Phase 4 LLVM飿º: 0.1ç§ (100x faster)
ã³ãŒããµã€ãºå¹çæ§
-
åçæé©å: å®è¡ææ å ±ã«ããæé©å
-
å¹ççãšã³ã³ãŒãã£ã³ã°: åœä»€éžæã»ã¢ãã¬ãã·ã³ã°æé©å
-
ãªã³ã¯ææé©å: å šäœæé©åã»ãããã³ãŒãé€å»
ãšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿äºå®
-
ãã«ãã¿ãŒã²ãã: x86_64, ARM64, WASM, RISC-V察å¿
-
ãããã°æ å ±: DWARF圢åŒãããã°æ å ±çæ
-
ãããã¡ã€ãªã³ã°: gprof, perf察å¿
-
IDEçµ±å: Language Server Protocolå®è£
ð éçºã¯ãŒã¯ãããŒäºå®
CI/CDãã€ãã©ã€ã³
# GitHub Actions ã§èªåå®è¡äºå®
- å質ãã§ãã¯ïŒlint, format, type-checkïŒ
- ã»ãã¥ãªãã£ã¹ãã£ã³ïŒgosec, govulncheckïŒ
- çµ±åãã¹ãïŒåPhaseæ©èœãæ§èœãã¹ãïŒ
- æ¥çæšæºæ¯èŒïŒGCC, Rust, Clangãšã®æ§èœæ¯èŒïŒ
- ãã©ã³ãä¿è·ã»åœåèŠåãã§ãã¯
å質管çäºå®
-
ãã¹ãé§åéçº: åæ©èœã®å æ¬çãã¹ãã¹ã€ãŒã
-
æ§èœååž°é²æ¢: èªååãããæ§èœãã³ãããŒã¯
-
ã³ãŒãã«ãã¬ããž: 95%以äžã®ãã¹ãã«ãã¬ããžç¶æ
-
éçè§£æ: å質ã»ã»ãã¥ãªãã£ãã§ãã¯
ð åŠç¿å¹æäºå®
ãã®ãããžã§ã¯ããéããŠç¿åŸã§ããæè¡:
ã³ã³ãã€ã©æè¡
-
èšèªåŠçç³»: åå¥è§£æã»æ§æè§£æã»æå³è§£æ
-
ã³ãŒãçæ: ã¢ã»ã³ããªçæã»æ©æ¢°èªå€æ
-
æé©åçè«: ããŒã¿ãããŒè§£æã»å¶åŸ¡ãããŒè§£æ
-
åã·ã¹ãã : éç忀æ»ã»åæšè«ã»å€æ å
ã·ã¹ãã ããã°ã©ãã³ã°
-
äœã¬ãã«ããã°ã©ãã³ã°: ã¢ã»ã³ããªã»æ©æ¢°èªçè§£
-
ã¡ã¢ãªç®¡ç: ããŒãã»ã¹ã¿ãã¯ã»ã¬ããŒãžã³ã¬ã¯ã·ã§ã³
-
䞊è¡ããã°ã©ãã³ã°: ã¹ã¬ããã»éåæåŠç
-
ãã©ãããã©ãŒã äŸå: CPU ã¢ãŒããã¯ãã£ã»OS API
ãœãããŠã§ã¢èšèš
-
å€§èŠæš¡ã·ã¹ãã èšèš: ã¢ãžã¥ãŒã«åã»ã€ã³ã¿ãŒãã§ãŒã¹èšèš
-
æ§èœæé©å: ãããã¡ã€ãªã³ã°ã»ããã«ããã¯è§£æ
-
ãã¹ãææ³: åäœãã¹ãã»çµ±åãã¹ãã»æ§èœãã¹ã
-
DevOps: CI/CDã»èªååã»å質管ç
ð ä»åŸã®éçºããŒããããäºå®
Phase 1: åºæ¬èšèªåŠçïŒ3-6ã¶æïŒ
-
â åå¥è§£æåšå®è£ ïŒããŒã¯ãã€ã¶ãŒïŒ
-
â ååž°äžéæ§æè§£æåšïŒASTçæïŒ
-
ð ã·ã³ãã«ã€ã³ã¿ãŒããªã¿ãŒïŒçŽæ¥å®è¡ïŒ - éçºäž
-
ð åºæ¬çãªåã·ã¹ãã ïŒint, float, string, boolïŒ
Phase 2: ã³ã³ãã€ã©åºç€ïŒ6-12ã¶æïŒ
-
â ã¢ã»ã³ããªã³ãŒãçæïŒx86_64ïŒ - éšåå®è£
-
ð ã·ã³ãã«ããŒãã«ã»ã¹ã³ãŒã管ç
-
ð å¶åŸ¡æ§é ïŒif/while/forïŒ
-
ð 颿°å®çŸ©ã»åŒã³åºã
Phase 3: æé©åãšã³ãžã³ïŒ12-18ã¶æïŒ
-
â SSAäžé衚çŸïŒStatic Single AssignmentïŒ
-
â åºæ¬æé©åãã¹ïŒå®æ°ç³ã¿èŸŒã¿ããããã³ãŒãé€å»ïŒ
-
â é«åºŠæé©åïŒã«ãŒãæé©åãã€ã³ã©ã€ã³å±éïŒ
-
â ã¬ãžã¹ã¿å²ãåœãŠïŒã°ã©ãåœ©è²æ³ïŒ
Phase 4: ç£æ¥çŽã³ã³ãã€ã©ïŒ18-24ã¶æïŒ
-
ð LLVM IRçæã»é£æº
-
ð ãã«ãã¿ãŒã²ãã察å¿ïŒARM64, WASMïŒ
-
ð é«åºŠãªåã·ã¹ãã ïŒãžã§ããªã¯ã¹ããã¬ã€ãïŒ
-
ð ãããã°ã»ãããã¡ã€ãªã³ã°ããŒã«
â¡ æ§èœæž¬å®åºç€ïŒå®å šå®è£ æžã¿ïŒ
-
â å æ¬çãã³ãããŒã¯ã·ã¹ãã ïŒ4,400è¡+ã8ãã¡ã€ã«ïŒ
-
â ç£æ¥æšæºæ¯èŒæ©èœïŒGCCãRustæ¯èŒïŒ
-
â JSON/HTMLã¬ããŒãçæãšã³ãžã³
-
â GitHub WikièªåæŽæ°ã·ã¹ãã
-
â CI/CDçµ±åã»ã»ãã¥ãªãã£æ€èšŒæžã¿
-
â æ§èœã°ã¬ãŒãè©äŸ¡ã·ã¹ãã ïŒS+ãDïŒ
ð€ AIéçºæ¯æŽåãèšèšäºå®
ãã®ãããžã§ã¯ãã¯AIéçºæ¯æŽããŒã«ãšã®å調ãåæã«èšèšäºå®:
-
段éçé²å: è€éããæ®µéçã«å°å ¥ãçè§£ããããæ§é
-
å æ¬çããã¥ã¡ã³ã: åPhaseã®è©³çްåŠç¿ã¬ã€ã
-
èªåå: MakefileãCI/CDã«ããäžè²«ããéçºäœéš
-
ãã¹ã¿ããªãã£: å æ¬çãã¹ãã«ããå®å šãªå€æŽ
-
å¯èŠå: ASTã»IRã»æé©åéçšã®å¯èŠåããŒã«
ð è²¢ç®ã»ãã£ãŒãããã¯äºå®
éçºç¶æ³
-
GitHub Issues: ãããžã§ã¯ãããŒã
-
Performance Wiki: ã³ã³ãã€ã©æ§èœåæã¬ããŒã
-
Learning Guide: 段éçåŠç¿ã¬ã€ã
-
Pull Requests: ã³ãŒãã¬ãã¥ãŒæè¿
-
Discussions: ã¢ã€ãã¢ã»ææ¡ã®è°è«
ã©ã€ã»ã³ã¹
MITã©ã€ã»ã³ã¹ãåŠç¿ç®çã®ããããã©ãŒã¯ã»æ¹å€ã»ææ¡ãã¹ãŠæè¿ã§ãã
ð åŠç¿ãããããã¯ã·ã§ã³ãŸã§ã®ã³ã³ãã€ã©æè¡å®å šç¿åŸïŒ
ã·ã³ãã«ãªã¬ã¯ãµãŒããLLVMçŽã®æé©åã³ã³ãã€ã©ãŸã§é²åãéããåŠç¿ãããžã§ã¯ãã§ããæ®µéçå®è£ ã«ããã³ã³ãã€ã©æè¡ã®å šäœåãäœç³»çã«çè§£ããæçµçã«ã¯ç£æ¥çŽã®æ§èœãšæ©èœãæã€æ¬æ Œçãªã³ã³ãã€ã©ã®éçºã¹ãã«ãç¿åŸã§ããŸãïŒ