WebAssembly GC μ μ λ΄ κ΄λ¦¬ν κ°μ²΄μ λ©λͺ¨λ¦¬ ꡬμ±μ μ¬μΈ΅ λΆμνκ³ , λ μ΄μμ, λ©νλ°μ΄ν°, μ±λ₯ λ° μνΈ μ΄μ©μ±μ λ―ΈμΉλ μν₯μ νꡬν©λλ€.
WebAssembly GC κ°μ²΄ λ μ΄μμ: κ΄λ¦¬ν κ°μ²΄ λ©λͺ¨λ¦¬ ꡬ쑰 μ΄ν΄νκΈ°
WebAssembly(Wasm)λ λ€μν νλ‘κ·Έλλ° μΈμ΄μμ λΉλ‘―λ μ½λλ₯Ό μν μ΄μμ± μκ³ ν¨μ¨μ μ΄λ©° μμ ν μ€ν νκ²½μ μ 곡νμ¬ μΉ κ°λ°μ νλͺ μ μΌμΌμΌ°μ΅λλ€. κ°λΉμ§ 컬λ μ (GC) μ μμ΄ λμ λλ©΄μ Wasmμ Java, C#, Kotlin, TypeScriptμ κ°μ΄ κ΄λ¦¬ν λ©λͺ¨λ¦¬ λͺ¨λΈμ μ¬μ©νλ μΈμ΄λ₯Ό ν¨μ¨μ μΌλ‘ μ§μν μ μλλ‘ κΈ°λ₯μ΄ νμ₯λμμ΅λλ€. WasmGC λ΄μμ κ΄λ¦¬ν κ°μ²΄μ λ©λͺ¨λ¦¬ ꡬμ±μ μ΄ν΄νλ κ²μ μ±λ₯ μ΅μ ν, μΈμ΄ κ° μνΈ μ΄μ©μ± ν보, μ κ΅ν μ ν리μΌμ΄μ ꡬμΆμ λ§€μ° μ€μν©λλ€. μ΄ κΈμμλ WasmGC κ°μ²΄ λ μ΄μμμ μ£Όμ κ°λ , μ€κ³ κ³ λ € μ¬ν, μ€μ μ μλ―Έλ₯Ό ν¬κ΄μ μΌλ‘ νꡬν©λλ€.
WebAssembly GC μκ°
κΈ°μ‘΄μ WebAssemblyλ κ°λΉμ§ 컬λ μ μΈμ΄μ λν μ§μ μ μΈ μ§μμ΄ λΆμ‘±νμ΅λλ€. κΈ°μ‘΄ μ루μ μ JavaScriptλ‘ μ»΄νμΌνκ±°λ(μ±λ₯ μ€λ²ν€λ λ°μ) WebAssemblyμ μ ν λ©λͺ¨λ¦¬ λ΄μ λ§μΆ€ν κ°λΉμ§ 컬λ ν°λ₯Ό ꡬννλ(볡μ‘νκ³ ν¨μ¨μ±μ΄ λ¨μ΄μ§ μ μμ) λ°©μμ μμ‘΄νμ΅λλ€. WasmGC μ μμ κ°λΉμ§ 컬λ μ μ λν λ€μ΄ν°λΈ μ§μμ λμ νμ¬ μ΄λ¬ν νκ³λ₯Ό ν΄κ²°νκ³ , λΈλΌμ°μ λ° κΈ°ν νκ²½μμ κ΄λ¦¬ν μΈμ΄λ₯Ό λ³΄λ€ ν¨μ¨μ μ΄κ³ μννκ² μ€νν μ μλλ‘ ν©λλ€.
WasmGCμ μ£Όμ μ΄μ μ λ€μκ³Ό κ°μ΅λλ€:
- μ±λ₯ ν₯μ: λ€μ΄ν°λΈ GC μ§μμΌλ‘ λ§μΆ€ν GC ꡬνμ΄λ JavaScript μμ‘΄μΌλ‘ μΈν μ€λ²ν€λκ° μ κ±°λ©λλ€.
- μ½λ ν¬κΈ° κ°μ: κ΄λ¦¬ν μΈμ΄λ WasmGCμ λ΄μ₯ κΈ°λ₯μ νμ©νμ¬ μ»΄νμΌλ Wasm λͺ¨λμ ν¬κΈ°λ₯Ό μ€μΌ μ μμ΅λλ€.
- κ°λ° κ°μν: κ°λ°μλ μ΅μν κ΄λ¦¬ν μΈμ΄λ₯Ό ν° μ±λ₯ μ ν μμ΄ μ¬μ©ν μ μμ΅λλ€.
- μνΈ μ΄μ©μ± ν₯μ: WasmGCλ μλ‘ λ€λ₯Έ κ΄λ¦¬ν μΈμ΄ κ°, κ·Έλ¦¬κ³ κ΄λ¦¬ν μΈμ΄μ κΈ°μ‘΄ WebAssembly μ½λ κ°μ μνΈ μ΄μ©μ±μ μ΄μ§ν©λλ€.
WasmGCμμ κ΄λ¦¬ν κ°μ²΄μ ν΅μ¬ κ°λ
κ°λΉμ§ 컬λ μ νκ²½μμ κ°μ²΄λ λ©λͺ¨λ¦¬μ λμ μΌλ‘ ν λΉλκ³ λ μ΄μ λλ¬ν μ μμ λ μλμΌλ‘ ν λΉ ν΄μ λ©λλ€. κ°λΉμ§ 컬λ ν°λ μ¬μ©λμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μλ³νκ³ νμνμ¬ κ°λ°μκ° μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ λΆλ΄μ λμ΄μ€λλ€. μ΄λ¬ν κ΄λ¦¬ν κ°μ²΄μ λ©λͺ¨λ¦¬ ꡬμ±μ μ΄ν΄νλ κ²μ μ»΄νμΌλ¬ μμ±μμ μ ν리μΌμ΄μ κ°λ°μ λͺ¨λμκ² νμμ μ λλ€.
κ°μ²΄ ν€λ
WasmGCμ κ° κ΄λ¦¬ν κ°μ²΄λ μΌλ°μ μΌλ‘ κ°μ²΄ ν€λλ‘ μμν©λλ€. μ΄ ν€λμλ κ°μ²΄μ νμ , ν¬κΈ°, μν νλκ·Έμ κ°μ λ©νλ°μ΄ν°κ° ν¬ν¨λ©λλ€. κ°μ²΄ ν€λμ ꡬ체μ μΈ λ΄μ©κ³Ό λ μ΄μμμ ꡬνμ λ°λΌ μ μλμ§λ§, μΌλ°μ μΌλ‘ λ€μμ ν¬ν¨ν©λλ€:
- νμ μ 보: κ°μ²΄μ ꡬ쑰, νλ, λ©μλμ λν μ 보λ₯Ό μ 곡νλ νμ λμ€ν¬λ¦½ν°μ λν ν¬μΈν° λλ μΈλ±μ€μ λλ€. μ΄λ₯Ό ν΅ν΄ GCλ κ°μ²΄μ νλλ₯Ό μ ννκ² μννκ³ νμ μ μμ ν μμ μ μνν μ μμ΅λλ€.
- ν¬κΈ° μ 보: κ°μ²΄μ ν¬κΈ°(λ°μ΄νΈ λ¨μ)μ λλ€. μ΄λ λ©λͺ¨λ¦¬ ν λΉ λ° ν΄μ , κ·Έλ¦¬κ³ κ°λΉμ§ 컬λ μ μ μ¬μ©λ©λλ€.
- νλκ·Έ: νμ¬ μμ§ μ€μΈμ§, νμ΄λλΌμ΄μ¦λμλμ§, κ³ μ (κ°λΉμ§ 컬λ ν°μ μν΄ μ΄λμ΄ λ°©μ§λ¨)λμλμ§ λ± κ°μ²΄μ μνλ₯Ό λνλ΄λ νλκ·Έμ λλ€.
- λκΈ°ν ν리미ν°λΈ (μ ν μ¬ν): λ€μ€ μ€λ λ νκ²½μμ κ°μ²΄ ν€λλ μ€λ λ μμ μ±μ 보μ₯νκΈ° μν΄ λ½(lock)κ³Ό κ°μ λκΈ°ν ν리미ν°λΈλ₯Ό ν¬ν¨ν μ μμ΅λλ€.
κ°μ²΄ ν€λμ ν¬κΈ°μ μ λ ¬μ μ±λ₯μ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. ν€λκ° μμμλ‘ λ©λͺ¨λ¦¬ μ€λ²ν€λκ° μ€μ΄λ€κ³ , μ μ ν μ λ ¬μ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ κ·Όμ 보μ₯ν©λλ€.
κ°μ²΄ νλ
κ°μ²΄ ν€λ λ€μμλ κ°μ²΄μ κ΄λ ¨λ μ€μ λ°μ΄ν°λ₯Ό μ μ₯νλ κ°μ²΄μ νλκ° μμΉν©λλ€. μ΄λ¬ν νλμ λ μ΄μμμ κ°μ²΄μ νμ μ μμ λ°λΌ κ²°μ λ©λλ€. νλλ μμ νμ (μ: μ μ, λΆλ μμμ μ«μ, λΆλ¦¬μΈ), λ€λ₯Έ κ΄λ¦¬ν κ°μ²΄μ λν μ°Έμ‘° λλ μμ νμ μ΄λ μ°Έμ‘°μ λ°°μ΄μ΄ λ μ μμ΅λλ€.
νλκ° λ©λͺ¨λ¦¬μ λ°°μΉλλ μμλ μΊμ μ§μμ±μΌλ‘ μΈν΄ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. μ»΄νμΌλ¬λ μΊμ νμ©λλ₯Ό λμ΄κΈ° μν΄ νλ μμλ₯Ό μ¬λ°°μΉν μ μμ§λ§, μ΄λ κ°μ²΄μ μλ―Έμ μλ―Έλ₯Ό 보쑴νλ λ°©μμΌλ‘ μνλμ΄μΌ ν©λλ€.
λ°°μ΄
λ°°μ΄μ λμΌν νμ μ μμ μνμ€λ₯Ό μ μ₯νλ μ°μμ μΈ λ©λͺ¨λ¦¬ λΈλ‘μ λλ€. WasmGCμμ λ°°μ΄μ μμ νμ μ λ°°μ΄μ΄κ±°λ κ΄λ¦¬ν κ°μ²΄μ λν μ°Έμ‘°μ λ°°μ΄μΌ μ μμ΅λλ€. λ°°μ΄μ λ μ΄μμμ μΌλ°μ μΌλ‘ λ€μμ ν¬ν¨ν©λλ€:
- λ°°μ΄ ν€λ: κ°μ²΄ ν€λμ μ μ¬νκ² λ°°μ΄ ν€λμλ νμ , κΈΈμ΄, μμ ν¬κΈ°μ κ°μ λ°°μ΄μ λν λ©νλ°μ΄ν°κ° ν¬ν¨λ©λλ€.
- μμ λ°μ΄ν°: λ©λͺ¨λ¦¬μ μ°μμ μΌλ‘ μ μ₯λλ μ€μ λ°°μ΄ μμμ λλ€.
ν¨μ¨μ μΈ λ°°μ΄ μ κ·Όμ λ§μ μ ν리μΌμ΄μ μ λ§€μ° μ€μν©λλ€. WasmGC ꡬνμ μ’ μ’ μΈλ±μ€λ‘ μμμ μ κ·Όνκ³ λ°°μ΄μ μννλ κ²κ³Ό κ°μ λ°°μ΄ μ‘°μμ μν μ΅μ νλ λͺ λ Ήμ μ 곡ν©λλ€.
λ©λͺ¨λ¦¬ κ΅¬μ± μΈλΆ μ 보
WasmGCμμ κ΄λ¦¬ν κ°μ²΄μ μ νν λ©λͺ¨λ¦¬ λ μ΄μμμ ꡬνμ λ°λΌ μ μλλ―λ‘, λ€λ₯Έ Wasm μμ§μ΄ νΉμ μν€ν μ²μ κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ λ§κ² μ΅μ νν μ μμ΅λλ€. κ·Έλ¬λ νΉμ μμΉκ³Ό κ³ λ € μ¬νμ λͺ¨λ ꡬνμ 곡ν΅μ μΌλ‘ μ μ©λ©λλ€.
μ λ ¬ (Alignment)
μ λ ¬μ λ°μ΄ν°κ° νΉμ κ°μ λ°°μμΈ λ©λͺ¨λ¦¬ μ£Όμμ μ μ₯λμ΄μΌ νλ€λ μꡬ μ¬νμ μλ―Έν©λλ€. μλ₯Ό λ€μ΄, 4λ°μ΄νΈ μ μλ 4λ°μ΄νΈ κ²½κ³μ μ λ ¬λμ΄μΌ ν μ μμ΅λλ€. μ λ ¬λμ§ μμ λ©λͺ¨λ¦¬ μ κ·Όμ μΌλΆ μν€ν μ²μμ λ λ리거λ νλμ¨μ΄ μμΈλ₯Ό μΌμΌν¬ μ μκΈ° λλ¬Έμ μ λ ¬μ μ±λ₯μ μ€μν©λλ€.
WasmGC ꡬνμ μΌλ°μ μΌλ‘ κ°μ²΄ ν€λμ νλμ λν μ λ ¬ μꡬ μ¬νμ κ°μ ν©λλ€. νΉμ μ λ ¬ μꡬ μ¬νμ λ°μ΄ν° νμ κ³Ό λμ μν€ν μ²μ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
ν¨λ© (Padding)
ν¨λ©μ μ λ ¬ μꡬ μ¬νμ μΆ©μ‘±μν€κΈ° μν΄ κ°μ²΄μ νλ μ¬μ΄μ μΆκ° λ°μ΄νΈλ₯Ό μ½μ νλ κ²μ μλ―Έν©λλ€. μλ₯Ό λ€μ΄, κ°μ²΄μ 1λ°μ΄νΈ λΆλ¦¬μΈ νλ λ€μ 4λ°μ΄νΈ μ μ νλκ° μλ κ²½μ°, μ»΄νμΌλ¬λ μ μ νλκ° 4λ°μ΄νΈ κ²½κ³μ μ λ ¬λλλ‘ νκΈ° μν΄ λΆλ¦¬μΈ νλ λ€μ 3λ°μ΄νΈμ ν¨λ©μ μ½μ ν μ μμ΅λλ€.
ν¨λ©μ κ°μ²΄μ ν¬κΈ°λ₯Ό μ¦κ°μν¬ μ μμ§λ§ μ±λ₯μ μν΄ νμν©λλ€. μ»΄νμΌλ¬λ μ λ ¬ μꡬ μ¬νμ μΆ©μ‘±μν€λ©΄μ ν¨λ©μ μ΅μννλ κ²μ λͺ©νλ‘ ν©λλ€.
κ°μ²΄ μ°Έμ‘°
κ°μ²΄ μ°Έμ‘°λ κ΄λ¦¬ν κ°μ²΄λ₯Ό κ°λ¦¬ν€λ ν¬μΈν°μ λλ€. WasmGCμμ κ°μ²΄ μ°Έμ‘°λ μΌλ°μ μΌλ‘ κ°λΉμ§ 컬λ ν°μ μν΄ κ΄λ¦¬λλ©°, νμ μ ν¨ν κ°μ²΄λ₯Ό κ°λ¦¬ν€λλ‘ λ³΄μ₯ν©λλ€. κ°μ²΄κ° κ°λΉμ§ 컬λ ν°μ μν΄ μ΄λλλ©΄ ν΄λΉ κ°μ²΄μ λν λͺ¨λ μ°Έμ‘°κ° κ·Έμ λ°λΌ μ λ°μ΄νΈλ©λλ€.
κ°μ²΄ μ°Έμ‘°μ ν¬κΈ°λ μν€ν μ²μ λ°λΌ λ€λ¦ λλ€. 32λΉνΈ μν€ν μ²μμ κ°μ²΄ μ°Έμ‘°λ μΌλ°μ μΌλ‘ 4λ°μ΄νΈ ν¬κΈ°μ λλ€. 64λΉνΈ μν€ν μ²μμλ μΌλ°μ μΌλ‘ 8λ°μ΄νΈ ν¬κΈ°μ λλ€.
νμ λμ€ν¬λ¦½ν°
νμ λμ€ν¬λ¦½ν°λ κ°μ²΄μ ꡬ쑰μ λμμ λν μ 보λ₯Ό μ 곡ν©λλ€. κ°λΉμ§ 컬λ ν°, μ»΄νμΌλ¬, λ°νμ μμ€ν μ νμ μ μμ ν μμ μ μννκ³ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν΄ μ΄λ₯Ό μ¬μ©ν©λλ€. νμ λμ€ν¬λ¦½ν°λ μΌλ°μ μΌλ‘ λ€μμ ν¬ν¨ν©λλ€:
- νλ μ 보: μ΄λ¦, νμ , μ€νμ μ ν¬ν¨ν κ°μ²΄ νλ λͺ©λ‘μ λλ€.
- λ©μλ μ 보: μ΄λ¦, μκ·Έλμ², μ£Όμλ₯Ό ν¬ν¨ν κ°μ²΄ λ©μλ λͺ©λ‘μ λλ€.
- μμ μ 보: μνΌν΄λμ€ λ° μΈν°νμ΄μ€λ₯Ό ν¬ν¨ν κ°μ²΄μ μμ κ³μΈ΅μ λν μ 보μ λλ€.
- κ°λΉμ§ 컬λ μ μ 보: κ°λΉμ§ 컬λ ν°κ° κ°μ²΄μ νλλ₯Ό μννκ³ λ€λ₯Έ κ΄λ¦¬ν κ°μ²΄μ λν μ°Έμ‘°λ₯Ό μλ³νλ λ° μ¬μ©νλ μ 보μ λλ€.
νμ λμ€ν¬λ¦½ν°λ λ³λμ λ°μ΄ν° ꡬ쑰μ μ μ₯λκ±°λ κ°μ²΄ μ체μ λ΄μ₯λ μ μμ΅λλ€. μ νμ ꡬνμ λ°λΌ λ€λ¦ λλ€.
μ€μ μ μλ―Έ
WasmGC κ°μ²΄ λ μ΄μμμ μ΄ν΄νλ κ²μ μ»΄νμΌλ¬ μμ±μ, μ ν리μΌμ΄μ κ°λ°μ, Wasm μμ§ κ΅¬νμμκ² λͺ κ°μ§ μ€μ μ μΈ μλ―Έλ₯Ό κ°μ§λλ€.
μ»΄νμΌλ¬ μ΅μ ν
μ»΄νμΌλ¬λ WasmGC κ°μ²΄ λ μ΄μμμ λν μ§μμ νμ©νμ¬ μ½λ μμ±μ μ΅μ νν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ»΄νμΌλ¬λ μΊμ μ§μμ±μ ν₯μμν€κΈ° μν΄ νλλ₯Ό μ¬μ λ ¬νκ³ , κ°μ²΄ ν¬κΈ°λ₯Ό μ€μ΄κΈ° μν΄ ν¨λ©μ μ΅μννλ©°, κ°μ²΄ νλμ μ κ·ΌνκΈ° μν ν¨μ¨μ μΈ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
μ»΄νμΌλ¬λ λν νμ μ 보λ₯Ό μ¬μ©νμ¬ μ μ λΆμμ μννκ³ λΆνμν λ°νμ κ²μ¬λ₯Ό μ κ±°ν μ μμ΅λλ€. μ΄λ μ±λ₯μ ν₯μμν€κ³ μ½λ ν¬κΈ°λ₯Ό μ€μΌ μ μμ΅λλ€.
κ°λΉμ§ 컬λ μ νλ
κ°λΉμ§ 컬λ μ μκ³ λ¦¬μ¦μ νΉμ κ°μ²΄ λ μ΄μμμ νμ©νλλ‘ νλλ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΈλλ³ κ°λΉμ§ 컬λ ν°λ κ°λΉμ§μΌ κ°λ₯μ±μ΄ λ λμ μ μ κ°μ²΄λ₯Ό μμ§νλ λ° μ§μ€ν μ μμ΅λλ€. μ΄λ κ°λΉμ§ 컬λ ν°μ μ λ°μ μΈ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
κ°λΉμ§ 컬λ ν°λ λν νμ μ 보λ₯Ό μ¬μ©νμ¬ νΉμ νμ μ κ°μ²΄λ₯Ό μλ³νκ³ μμ§ν μ μμ΅λλ€. μ΄λ νμΌ νΈλ€ λ° λ€νΈμν¬ μ°κ²°κ³Ό κ°μ 리μμ€λ₯Ό κ΄λ¦¬νλ λ° μ μ©ν μ μμ΅λλ€.
μνΈ μ΄μ©μ±
WasmGC κ°μ²΄ λ μ΄μμμ μλ‘ λ€λ₯Έ κ΄λ¦¬ν μΈμ΄ κ°μ μνΈ μ΄μ©μ±μμ μ€μν μν μ ν©λλ€. κ³΅ν΅ κ°μ²΄ λ μ΄μμμ 곡μ νλ μΈμ΄λ κ°μ²΄μ λ°μ΄ν°λ₯Ό μ½κ² κ΅νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ μλ‘ λ€λ₯Έ μΈμ΄λ‘ μμ±λ μ½λλ₯Ό κ²°ν©ν μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, WasmGCμμ μ€νλλ Java μ ν리μΌμ΄μ μ κ³΅ν΅ κ°μ²΄ λ μ΄μμμ λμνλ€λ©΄ WasmGCμμ μ€νλλ C# λΌμ΄λΈλ¬λ¦¬μ μνΈ μμ©ν μ μμ΅λλ€.
λλ²κΉ λ° νλ‘νμΌλ§
WasmGC κ°μ²΄ λ μ΄μμμ μ΄ν΄νλ κ²μ μ ν리μΌμ΄μ μ λλ²κΉ νκ³ νλ‘νμΌλ§νλ λ° νμμ μ λλ€. λλ²κ±°λ κ°μ²΄ λ μ΄μμ μ 보λ₯Ό μ¬μ©νμ¬ κ°μ²΄μ λ΄μ©μ κ²μ¬νκ³ λ©λͺ¨λ¦¬ λμλ₯Ό μΆμ ν μ μμ΅λλ€. νλ‘νμΌλ¬λ κ°μ²΄ λ μ΄μμ μ 보λ₯Ό μ¬μ©νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ½λλ₯Ό μ΅μ νν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λλ²κ±°λ κ°μ²΄ λ μ΄μμ μ 보λ₯Ό μ¬μ©νμ¬ κ°μ²΄ νλμ κ°μ νμνκ±°λ κ°μ²΄ κ°μ μ°Έμ‘°λ₯Ό μΆμ ν μ μμ΅λλ€.
μμ
λͺ κ°μ§ κ°λ¨ν μμ λ₯Ό ν΅ν΄ WasmGC κ°μ²΄ λ μ΄μμμ μ€λͺ ν΄ λ³΄κ² μ΅λλ€.
μμ 1: κ°λ¨ν ν΄λμ€
λ κ°μ νλλ₯Ό κ°μ§ κ°λ¨ν ν΄λμ€λ₯Ό μκ°ν΄ λ³΄κ² μ΅λλ€:
class Point {
int x;
int y;
}
μ΄ ν΄λμ€μ WasmGC ννμ λ€μκ³Ό κ°μ μ μμ΅λλ€:
[κ°μ²΄ ν€λ] (μ: νμ λμ€ν¬λ¦½ν° ν¬μΈν°, ν¬κΈ°) [x: int] (4λ°μ΄νΈ) [y: int] (4λ°μ΄νΈ)
κ°μ²΄ ν€λμλ `Point` ν΄λμ€μ νμ λμ€ν¬λ¦½ν°μ λν ν¬μΈν°μ κ°μ²΄μ ν¬κΈ°μ κ°μ λ©νλ°μ΄ν°κ° ν¬ν¨λ©λλ€. `x`μ `y` νλλ κ°μ²΄ ν€λ λ€μ μ°μμ μΌλ‘ μ μ₯λ©λλ€.
μμ 2: κ°μ²΄ λ°°μ΄
μ΄μ `Point` κ°μ²΄μ λ°°μ΄μ μκ°ν΄ λ³΄κ² μ΅λλ€:
Point[] points = new Point[10];
μ΄ λ°°μ΄μ WasmGC ννμ λ€μκ³Ό κ°μ μ μμ΅λλ€:
[λ°°μ΄ ν€λ] (μ: νμ λμ€ν¬λ¦½ν° ν¬μΈν°, κΈΈμ΄, μμ ν¬κΈ°) [μμ 0: Point] (Point κ°μ²΄μ λν μ°Έμ‘°) [μμ 1: Point] (Point κ°μ²΄μ λν μ°Έμ‘°) ... [μμ 9: Point] (Point κ°μ²΄μ λν μ°Έμ‘°)
λ°°μ΄ ν€λμλ `Point[]` νμ λμ€ν¬λ¦½ν°μ λν ν¬μΈν°, λ°°μ΄μ κΈΈμ΄, κ° μμμ ν¬κΈ°(`Point` κ°μ²΄μ λν μ°Έμ‘°)μ κ°μ λ©νλ°μ΄ν°κ° ν¬ν¨λ©λλ€. λ°°μ΄ μμλ λ°°μ΄ ν€λ λ€μ μ°μμ μΌλ‘ μ μ₯λλ©°, κ° μμλ `Point` κ°μ²΄μ λν μ°Έμ‘°λ₯Ό ν¬ν¨ν©λλ€.
μμ 3: λ¬Έμμ΄
λ¬Έμμ΄μ λΆλ³μ± λ° λΉλ²ν μ¬μ©μΌλ‘ μΈν΄ κ΄λ¦¬ν μΈμ΄μμ μ’ μ’ νΉλ³νκ² μ·¨κΈλ©λλ€. λ¬Έμμ΄μ λ€μκ³Ό κ°μ΄ ννλ μ μμ΅λλ€:
[κ°μ²΄ ν€λ] (μ: νμ λμ€ν¬λ¦½ν° ν¬μΈν°, ν¬κΈ°) [κΈΈμ΄: int] (4λ°μ΄νΈ) [λ¬Έμ: char[]] (μ°μμ μΈ λ¬Έμ λ°°μ΄)
κ°μ²΄ ν€λλ μ΄κ²μ΄ λ¬Έμμ΄μμ μλ³ν©λλ€. κΈΈμ΄ νλλ λ¬Έμμ΄μ λ¬Έμ μλ₯Ό μ μ₯νκ³ , λ¬Έμ νλλ μ€μ λ¬Έμμ΄ λ°μ΄ν°λ₯Ό ν¬ν¨ν©λλ€.
μ±λ₯ κ³ λ € μ¬ν
WasmGC κ°μ²΄ λ μ΄μμμ μ€κ³λ μ±λ₯μ μλΉν μν₯μ λ―ΈμΉ©λλ€. μ±λ₯μ μν΄ κ°μ²΄ λ μ΄μμμ μ΅μ νν λ μ¬λ¬ μμλ₯Ό κ³ λ €ν΄μΌ ν©λλ€:
- μΊμ μ§μμ±: ν¨κ» μμ£Ό μ κ·Όνλ νλλ μΊμ μ§μμ±μ ν₯μμν€κΈ° μν΄ λ©λͺ¨λ¦¬μμμ μλ‘ κ°κΉκ² λ°°μΉν΄μΌ ν©λλ€.
- κ°μ²΄ ν¬κΈ°: μμ κ°μ²΄λ λ©λͺ¨λ¦¬λ₯Ό λ μλΉνκ³ λ 빨리 ν λΉ λ° ν΄μ λ μ μμ΅λλ€. ν¨λ©κ³Ό λΆνμν νλλ₯Ό μ΅μννμμμ€.
- μ λ ¬: μ μ ν μ λ ¬μ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ μ κ·Όμ 보μ₯νκ³ νλμ¨μ΄ μμΈλ₯Ό λ°©μ§ν©λλ€.
- κ°λΉμ§ 컬λ μ μ€λ²ν€λ: κ°μ²΄ λ μ΄μμμ κ°λΉμ§ 컬λ μ μ μ€λ²ν€λλ₯Ό μ΅μννλλ‘ μ€κ³λμ΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, μ»΄ν©νΈν κ°μ²΄ λ μ΄μμμ μ¬μ©νλ©΄ κ°λΉμ§ 컬λ ν°κ° μ€μΊν΄μΌ νλ λ©λͺ¨λ¦¬ μμ μ€μΌ μ μμ΅λλ€.
μ΄λ¬ν μμλ€μ μ μ€νκ² κ³ λ €νλ©΄ μλΉν μ±λ₯ ν₯μμ μ΄λμ΄λΌ μ μμ΅λλ€.
WasmGC κ°μ²΄ λ μ΄μμμ λ―Έλ
WasmGC μ μμ μμ§ μ§ν μ€μ΄λ©°, κ°μ²΄ λ μ΄μμμ ꡬ체μ μΈ μΈλΆ μ¬νμ μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½λ μ μμ΅λλ€. κ·Έλ¬λ μ΄ κΈμμ μ€λͺ ν κΈ°λ³Έ μμΉμ κ³μ μ ν¨ν κ°λ₯μ±μ΄ λμ΅λλ€. WasmGCκ° μ±μν¨μ λ°λΌ κ°μ²΄ λ μ΄μμ μ€κ³μμ μΆκ°μ μΈ μ΅μ νμ νμ μ κΈ°λν μ μμ΅λλ€.
ν₯ν μ°κ΅¬λ λ€μμ μ΄μ μ λ§μΆ μ μμ΅λλ€:
- μ μν κ°μ²΄ λ μ΄μμ: λ°νμ μ¬μ© ν¨ν΄μ λ°λΌ κ°μ²΄ λ μ΄μμμ λμ μΌλ‘ μ‘°μ ν©λλ€.
- νΉνλ κ°μ²΄ λ μ΄μμ: λ¬Έμμ΄ λ° λ°°μ΄κ³Ό κ°μ νΉμ μ νμ κ°μ²΄λ₯Ό μν νΉνλ κ°μ²΄ λ μ΄μμμ μ€κ³ν©λλ€.
- νλμ¨μ΄ μ§μ κ°λΉμ§ 컬λ μ : νλμ¨μ΄ κΈ°λ₯μ νμ©νμ¬ κ°λΉμ§ 컬λ μ μ κ°μνν©λλ€.
μ΄λ¬ν λ°μ μ WasmGCμ μ±λ₯κ³Ό ν¨μ¨μ±μ λμ± ν₯μμμΌ, κ΄λ¦¬ν μΈμ΄λ₯Ό μ€ννκΈ° μν ν¨μ¬ λ λ§€λ ₯μ μΈ νλ«νΌμΌλ‘ λ§λ€ κ²μ λλ€.
κ²°λ‘
WasmGC κ°μ²΄ λ μ΄μμμ μ΄ν΄νλ κ²μ μ±λ₯ μ΅μ ν, μνΈ μ΄μ©μ± ν보, μ κ΅ν μ ν리μΌμ΄μ ꡬμΆμ νμμ μ λλ€. κ°μ²΄ ν€λ, νλ, λ°°μ΄, νμ λμ€ν¬λ¦½ν°μ μ€κ³λ₯Ό μ μ€νκ² κ³ λ €ν¨μΌλ‘μ¨ μ»΄νμΌλ¬ μμ±μ, μ ν리μΌμ΄μ κ°λ°μ, Wasm μμ§ κ΅¬νμλ ν¨μ¨μ μ΄κ³ κ²¬κ³ ν μμ€ν μ λ§λ€ μ μμ΅λλ€. WasmGCκ° κ³μ λ°μ ν¨μ λ°λΌ κ°μ²΄ λ μ΄μμ μ€κ³μ μΆκ°μ μΈ νμ μ΄ μμ¬ν μ¬μ§μμ΄ λνλ κ²μ΄λ©°, μ΄λ μΉκ³Ό κ·Έ λλ¨Έμ λ―Έλλ₯Ό μν ν΅μ¬ κΈ°μ λ‘μμ μ μ§λ₯Ό λμ± κ³΅κ³ ν ν κ²μ λλ€.
μ΄ κΈμ WasmGC κ°μ²΄ λ μ΄μμκ³Ό κ΄λ ¨λ μ£Όμ κ°λ λ° κ³ λ € μ¬νμ λν μμΈν κ°μλ₯Ό μ 곡νμ΅λλ€. μ΄λ¬ν μμΉμ μ΄ν΄ν¨μΌλ‘μ¨ WasmGCλ₯Ό ν¨κ³Όμ μΌλ‘ νμ©νμ¬ κ³ μ±λ₯, μνΈ μ΄μ© κ°λ₯νλ©° μ μ§λ³΄μ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€.
μΆκ° μλ£
- WebAssembly GC μ μμ: https://github.com/WebAssembly/gc
- WebAssembly λͺ μΈ: https://webassembly.github.io/spec/