Skip to content

winterjihwan/noahvm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

63 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Noah VM

πŸ“ μ†Œκ°œ

Noah VM은 κ°€μƒλ¨Έμ‹ μ˜ λ‚΄λΆ€ ꡬ쑰와 λ™μž‘ 방식을 깊이 μ΄ν•΄ν•˜κΈ° μœ„ν•΄ μ„€κ³„ν•˜κ³  κ΅¬ν˜„ν•œ ν”„λ‘œμ νŠΈ. C μ–Έμ–΄λ‘œ 컴파일러, λ ˆμ§€μŠ€ν„° 기반 가상머신, λ ‰μ„œ, νŒŒμ„œ, IR 생성기 등을 직접 κ°œλ°œν–ˆλ‹€. 토이 μ–Έμ–΄μ˜ 컴파일 및 μ‹€ν–‰ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λ©°, 언어와 λŸ°νƒ€μž„μ΄ μ €μˆ˜μ€€μ—μ„œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ²˜μŒλΆ€ν„° λκΉŒμ§€ 직접 μ„€κ³„ν•˜κ³  λΆ„μ„ν–ˆλ‹€.


🌊 흐름

  1. μ†ŒμŠ€ μ½”λ“œ μž…λ ₯
    main.c β†’ νŒŒμΌμ—μ„œ μ½”λ“œ λ‘œλ“œ

  2. Lexing
    lexer.c β†’ 토큰화 μˆ˜ν–‰

  3. Parsing & Compile
    compiler.c β†’ 토큰을 IR(쀑간 ν‘œν˜„)으둜 λ³€ν™˜

  4. 정적 뢄석
    analyzer.c β†’ Dead Store Elimination(DSE) μ‹€ν–‰

  5. ν”„λ‘œκ·Έλž¨ λ‘œλ”©
    vm.c β†’ IR을 VM λ©”λͺ¨λ¦¬μ— λ‘œλ”©

  6. μ‹€ν–‰
    vm.c β†’ 가상머신 μŠ€νƒ/λ ˆμ§€μŠ€ν„° 기반으둜 IR μ‹€ν–‰

  7. ν›„μ²˜λ¦¬
    vm_stack_dump() β†’ μŠ€νƒ 좜λ ₯ vm_destruct() β†’ λ¦¬μ†ŒμŠ€ ν•΄μ œ


βš™ 기술

C Language

LLDB


πŸ› νŠΈλŸ¬λΈ”μŠˆνŒ…

  • 더블 프리

    • 가상머신 μ’…λ£Œ μ‹œ 더블 프리 λ°œμƒ
    • LLDB둜 λ³€μˆ˜ 값을 라인 λ‹¨μœ„λ‘œ μΆ”μ ν•œ κ²°κ³Ό, ν•΄μ‹œ ν…Œμ΄λΈ”μ—μ„œ 쀑간 λ…Έλ“œλ₯Ό ν•΄μ œν•  λ•Œ 이후 λ…Έλ“œμ— μ ‘κ·Όν•˜μ§€ λͺ»ν•΄ 일뢀 λ…Έλ“œκ°€ ν•΄μ œλ˜μ§€ μ•Šκ±°λ‚˜ 쀑볡 ν•΄μ œλ˜λŠ” 문제 발견
    • 쑰치: ν•΄μ‹œ ν…Œμ΄λΈ” 순회 및 ν•΄μ œ 둜직 μˆ˜μ •, λ…Έλ“œ μ—°κ²° ꡬ쑰λ₯Ό μž¬κ²€ν† ν•˜μ—¬ λ©”λͺ¨λ¦¬ ν•΄μ œ μˆœμ„œ 보완

πŸ“š 참고자료

Engineering a Compiler (3rd ed.) by Keith D. Cooper & Linda Torczon

bm - tsoding


πŸ“¦ μ‚¬μš©λ²•

make main
./main ./examples/scope
# λ˜λŠ” ./examples/ μ•ˆμ˜ λ‹€λ₯Έ 예제 μ‚¬μš© κ°€λŠ₯

πŸ’‘ λŠλ‚€μ 

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ 큰 그림을 μ΄ν•΄ν•˜λŠ” 게 정말 μž¬λ―Έμžˆμ—ˆλ‹€. 직접 μ»΄νŒŒμΌλŸ¬λž‘ 가상머신을 μ„€κ³„ν•˜κ³  λ§Œλ“€μ–΄λ³΄λ©΄μ„œ μ–Έμ–΄ λ‚΄λΆ€ κ΅¬μ‘°λ‚˜ λ©”λͺ¨λ¦¬ λ™μž‘ 방식을 μ œλŒ€λ‘œ 체감할 수 μžˆμ—ˆλ‹€. 이 과정을 κ±°μΉ˜λ©΄μ„œ ν•˜μŠ€μΌˆ 같은 ν•¨μˆ˜ν˜• μ–Έμ–΄λ‚˜ 러슀트의 μ˜€λ„ˆμ‹­ λͺ¨λΈμ΄ μ‹€μ œλ‘œλŠ” μ–΄λ–»κ²Œ κ΅¬ν˜„λμ„μ§€ 더 κΆκΈˆν•΄μ‘Œλ‹€.

μ•žμœΌλ‘œλŠ” λ‚΄ 컴퓨터 ISA인 x86을 기반으둜 μ €μˆ˜μ€€ 컴파일러λ₯Ό 직접 λ§Œλ“€μ–΄λ³΄κ³  μ‹Άλ‹€. λ ˆμ§€μŠ€ν„° ν• λ‹Ή, SSA 같은 μ΅œμ ν™” 기법도 직접 κ΅¬ν˜„ν•΄λ³΄κ³ , κΆκ·Ήμ μœΌλ‘œλŠ” 병렬 μ»΄νŒŒμΌλŸ¬μ— λŒ€ν•΄μ„œλ„ μ•Œμ•„λ³΄κ³  μ‹Άλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published