Design: 쑰건뢀 뢄기에 λŒ€ν•œ μŠ€νƒ νŒν•‘ μ„€λͺ…

에 λ§Œλ“  2017λ…„ 03μ›” 27일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: WebAssembly/design

WebAssembly 컴파일러λ₯Ό μž‘μ„±ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. https://github.com/WebAssembly/spec/blob/634f0d9009404f498ef8d8bd510bd6f0941219cc/test/core/br_if.wast#L272 ν…ŒμŠ€νŠΈλ₯Ό 보고 μžˆμŠ΅λ‹ˆλ‹€. 이 ν…ŒμŠ€νŠΈλŠ” μ•½κ°„ ν™•μž₯된 κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

(module
    (func
      $type-arg-void-vs-num-nested
      (result i32)

      block i32
        (i32.const 0)
        block
          (i32.const 1)
          (br_if 1)
        end
      end
    )
)

λ‚΄κ°€ μ–»λŠ” 였λ₯˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

Error: check failed:
test.wast:10:12
type stack size too small at br_if value. got 0, expected at least 1
          (br_if 1)
           ^^^^^^^

br_if 도달할 λ•Œ μŠ€νƒ 크기가 2라고 μƒκ°ν•©λ‹ˆλ‹€. 즉, 쑰건문에 λŒ€ν•΄ 1을 νŒν•œ λ‹€μŒ μ™ΈλΆ€ 블둝을 μΆ©μ‘±μ‹œν‚€κΈ° μœ„ν•΄ ν•˜λ‚˜κ°€ λ‚¨μŠ΅λ‹ˆλ‹€. (i32.const 0) κ°€ 쀑첩 λΈ”λ‘μœΌλ‘œ λ„˜μ–΄κ°ˆ 것이라고 κ°€μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ–΄λ–€ 뢀뢄이 λˆ„λ½ λ˜μ—ˆμŠ΅λ‹ˆκΉŒ? 미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

>

이것은 각 블둝이 자체 μŠ€νƒμ„ κ°–λŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆκΉŒ?

λ‚˜λŠ” 그듀이 μžμ‹ μ˜ μŠ€νƒμ„ μ–»λŠ”λ‹€κ³  λ§ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. 단지 ν•œκ³„κ°€ μžˆλ‹€λŠ” κ²ƒλΏμž…λ‹ˆλ‹€.
ν„°μ§ˆ 수 μžˆλŠ” 것. 그것이 μ‹€μ œλ‘œ wabtμ—μ„œ κ΅¬ν˜„λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
κ°’ μŠ€νƒ 및 "λ ˆμ΄λΈ”" μŠ€νƒμž…λ‹ˆλ‹€. 각 λ ˆμ΄λΈ”μ€ "ν•œκ³„"λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ”μ΄ ν‘Έμ‹œλ  λ•Œ κ°’ μŠ€νƒμ˜ ν¬κΈ°μž…λ‹ˆλ‹€. 그러면 μ–Έμ œλΌλ„
pop, 당신은 μƒμœ„ λ ˆμ΄λΈ”μ˜ ν•œκ³„μ— λŒ€ν•΄ ν™•μΈν•©λ‹ˆλ‹€.

λ‘˜ λ‹€ μœ νš¨ν•œ λ³΄κΈ°μž…λ‹ˆλ‹€. 의미적으둜 "블둝 둜컬 μŠ€νƒ" λ³΄κΈ°μ—λŠ”
μΆ”κ°€ λΆˆλ³€λŸ‰μ΄ ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. "단일 μŠ€νƒ"으둜
λͺ¨λ“  ν•œκ³„μ™€ 같은 μΆ”κ°€ μ •ν™•μ„± 가정이 ν•„μš”ν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ” μŠ€νƒμ—μ„œ λ°œμƒν•˜λŠ” 것은 ν˜„μž¬ ν”Όμ—°μ‚°μž μŠ€νƒμ˜ λ²”μœ„ 내에 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
높이, 그듀은 (λ°˜λ“œμ‹œ μ—„κ²©ν•˜κ²ŒλŠ” μ•„λ‹ˆμ§€λ§Œ) μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°œμƒν•΄μ•Όν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ” μŠ€νƒμ€ λΉ„μ›Œ λ‘˜ 수 μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

예, watt의 였λ₯˜ λ³΄κ³ λŠ” μ—¬κΈ°μ—μ„œ ν–₯상될 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒμ— i32 κ°€ 두 개 μžˆμ–΄λ„ μ—°μ‚°μžλŠ” λΈ”λ‘μ˜ μ‹œμž‘ 뢀뢄을 μ§€λ‚˜μΉ˜μ§€ μ•ŠμœΌλ―€λ‘œ 사싀상 ν•˜λ‚˜λ§Œ μžˆμŠ΅λ‹ˆλ‹€.

이것은 각 블둝이 자체 μŠ€νƒμ„ κ°–λŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆκΉŒ? 의미둠 λ¬Έμ„œμ—μ„œ λ‹€μŒ μ§„μˆ μ— ν˜Όλž€μŠ€λŸ¬μ›Œν–ˆμŠ΅λ‹ˆλ‹€.

블둝 λ˜λŠ” 루프 λͺ…λ Ήμ–΄ 싀행은 κ°’ μŠ€νƒμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

블둝 λ˜λŠ” 루프 λͺ…λ Ήμ–΄ 싀행은 κ°’ μŠ€νƒμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ§€λ§Œ μ‹€ν–‰ 블둝 μ™ΈλΆ€μ˜ λͺ¨λ“  μŠ€νƒ 값은 μ•‘μ„ΈμŠ€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆλ©΄ λ‚΄κ°€ μ˜€ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

이것은 각 블둝이 자체 μŠ€νƒμ„ κ°–λŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆκΉŒ?

λ‚˜λŠ” 그듀이 μžμ‹ μ˜ μŠ€νƒμ„ μ–»λŠ”λ‹€κ³  λ§ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. 단지 ν„°μ§ˆ 수 μžˆλŠ” 것에 ν•œκ³„κ°€ μžˆλ‹€λŠ” κ²ƒλΏμž…λ‹ˆλ‹€. 이것이 μ‹€μ œλ‘œ wabtμ—μ„œ κ΅¬ν˜„λ˜λŠ” 방식이며, κ°€μΉ˜ μŠ€νƒκ³Ό "λ ˆμ΄λΈ”" μŠ€νƒμ΄ μžˆμŠ΅λ‹ˆλ‹€. 각 λ ˆμ΄λΈ”μ€ λ ˆμ΄λΈ”μ΄ ν‘Έμ‹œλ  λ•Œ κ°’ μŠ€νƒμ˜ 크기인 "ν•œκ³„"λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ νŒμ—…ν•  λ•Œλ§ˆλ‹€ μƒμœ„ λ ˆμ΄λΈ”μ˜ ν•œκ³„λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

블둝 λ˜λŠ” 루프 λͺ…λ Ήμ–΄ 싀행은 κ°’ μŠ€νƒμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ λ‹€μŒκ³Ό 같이 λ³€κ²½λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

블둝 λ˜λŠ” 루프 λͺ…λ Ήμ–΄ 싀행은 κ°’ μŠ€νƒμ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ§€λ§Œ 블둝 μ‹€ν–‰ 블둝 μ™ΈλΆ€μ˜ λͺ¨λ“  μŠ€νƒ 값은 μ•‘μ„ΈμŠ€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆλ©΄ λ‚΄κ°€ μ˜€ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

예, Semantics.mdμ—μ„œ 이와 같은 것을 μ–ΈκΈ‰ν•  κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 곡식적인 μ‚°λ¬Έ 사양에 λŒ€ν•œ μž‘μ—…λ„ μžˆμŒμ„ μ–ΈκΈ‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

>

이것은 각 블둝이 자체 μŠ€νƒμ„ κ°–λŠ”λ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆκΉŒ?

λ‚˜λŠ” 그듀이 μžμ‹ μ˜ μŠ€νƒμ„ μ–»λŠ”λ‹€κ³  λ§ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. 단지 ν•œκ³„κ°€ μžˆλ‹€λŠ” κ²ƒλΏμž…λ‹ˆλ‹€.
ν„°μ§ˆ 수 μžˆλŠ” 것. 그것이 μ‹€μ œλ‘œ wabtμ—μ„œ κ΅¬ν˜„λ˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
κ°’ μŠ€νƒ 및 "λ ˆμ΄λΈ”" μŠ€νƒμž…λ‹ˆλ‹€. 각 λ ˆμ΄λΈ”μ€ "ν•œκ³„"λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ”μ΄ ν‘Έμ‹œλ  λ•Œ κ°’ μŠ€νƒμ˜ ν¬κΈ°μž…λ‹ˆλ‹€. 그러면 μ–Έμ œλΌλ„
pop, 당신은 μƒμœ„ λ ˆμ΄λΈ”μ˜ ν•œκ³„μ— λŒ€ν•΄ ν™•μΈν•©λ‹ˆλ‹€.

λ‘˜ λ‹€ μœ νš¨ν•œ λ³΄κΈ°μž…λ‹ˆλ‹€. 의미적으둜 "블둝 둜컬 μŠ€νƒ" λ³΄κΈ°μ—λŠ”
μΆ”κ°€ λΆˆλ³€λŸ‰μ΄ ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. "단일 μŠ€νƒ"으둜
λͺ¨λ“  ν•œκ³„μ™€ 같은 μΆ”κ°€ μ •ν™•μ„± 가정이 ν•„μš”ν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ” μŠ€νƒμ—μ„œ λ°œμƒν•˜λŠ” 것은 ν˜„μž¬ ν”Όμ—°μ‚°μž μŠ€νƒμ˜ λ²”μœ„ 내에 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
높이, 그듀은 (λ°˜λ“œμ‹œ μ—„κ²©ν•˜κ²ŒλŠ” μ•„λ‹ˆμ§€λ§Œ) μ˜€λ¦„μ°¨μˆœμœΌλ‘œ λ°œμƒν•΄μ•Όν•©λ‹ˆλ‹€.
λ ˆμ΄λΈ” μŠ€νƒμ€ λΉ„μ›Œ λ‘˜ 수 μ—†μŠ΅λ‹ˆλ‹€.

정보에 λŒ€ν•΄μ„œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. μ‹€ν–‰ κ°€λŠ₯ν•œ 것이 μ—†κ³  이λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄ 더 곡식적인 사양이 λ‚˜μ˜¬ 것이기 λ•Œλ¬Έμ— 이 글을 λ‹«μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

Artur-A picture Artur-A  Β·  3μ½”λ©˜νŠΈ

spidoche picture spidoche  Β·  4μ½”λ©˜νŠΈ

JimmyVV picture JimmyVV  Β·  4μ½”λ©˜νŠΈ

jfbastien picture jfbastien  Β·  6μ½”λ©˜νŠΈ

artem-v-shamsutdinov picture artem-v-shamsutdinov  Β·  6μ½”λ©˜νŠΈ