Writing Multiline Bodies - kimjooyoon/meta-ontology-go GitHub Wiki

μ—¬λŸ¬ μ€„λ‘œ λ°”λ”” μž‘μ„±ν•˜κΈ°

main eb8477d5에 ν¬ν•¨λœ λ¬Έλ²•μž…λ‹ˆλ‹€. 쑰건·지역 λ³€μˆ˜Β·λŒ€μž…μ„ λ°±ν‹± μ•ˆμ— 직접 μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 전체 원본.

package bodycodegen
namespace bodycodegen

entity Integer id "bodycodegen://entity/integer"

activity ClampBelowZero(Integer) -> Integer computes `
let value = input
value = input
let accepted = value >= 0
if accepted {
    return value
} else {
    return 0
}
`

μ €μž₯μ†Œμ—μ„œ λ‹€μŒ λͺ…λ ΉμœΌλ‘œ Go ν•¨μˆ˜λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

gooo body-codegen --activity ClampBelowZero \
  examples/body-codegen/raw-computes.gooo.fixture

gooo λΉŒλ“œμ™€ μ„€μΉ˜λŠ” μ‹œμž‘ μ•ˆλ‚΄λ₯Ό λ”°λ¦…λ‹ˆλ‹€. μž…λ ₯이 음수이면 0, κ·Έ λ°–μ—λŠ” μž…λ ₯을 λ°˜ν™˜ν•©λ‹ˆλ‹€. μ›λ³Έμ˜ 의미λ₯Ό 읽고 νƒ€μž…μ„ ν™•μΈν•œ λ’€ μƒμ„±ν•©λ‹ˆλ‹€. λ°”λ””λ₯Ό κ³ μ •ν•΄ μƒμ„±ν•˜λŠ” 이 μ˜ˆμ œμ—λŠ” λͺ¨λΈ νŒλ‹¨μ΄ μ—†μŠ΅λ‹ˆλ‹€. μžμ—°μ–΄ μ§€μ‹œμ— 따라 ν—ˆμš©λœ 후보λ₯Ό μ‘°λ¦½ν•˜κ³  μ¦‰μ‹œ μ‹€ν–‰ν•˜λŠ” κ²½λ‘œλŠ” 파일 μ‹€ν–‰ μ•ˆλ‚΄μ— μžˆμŠ΅λ‹ˆλ‹€.

μ½λŠ” κ·œμΉ™

main aeff3641λΆ€ν„°λŠ” 쑰건 λ’€μ—μ„œ 계속 μ‹€ν–‰ν•˜κ±°λ‚˜ 일찍 λ°˜ν™˜ν•  λ•Œ elseλ₯Ό μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μœ„ ν™œλ™μ˜ 본문을 λ‹€μŒμ²˜λŸΌ 적을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

let value = input
if value < 0 {
    return 0
}
return value

전체 경둜의 λ°˜ν™˜κ³Ό μ§€μ—­ λ³€μˆ˜μ˜ λ²”μœ„Β·λŒ€μž… νƒ€μž…μ„ ν™•μΈν•©λ‹ˆλ‹€. λ ˆμ½”λ“œ 본문의 쀑첩 κ°±μ‹ Β·μ‘°κΈ° λ°˜ν™˜κ³Ό ν•„λ“œ λͺ¨λΈ 쑰립에도 같은 κ·œμΉ™μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • μ™ΈλΆ€ λ°±ν‹± μ•ˆμ˜ μ€„λ°”κΏˆκ³Ό μ—­μŠ¬λž˜μ‹œλŠ” κ·ΈλŒ€λ‘œ 바디에 μ „λ‹¬λ©λ‹ˆλ‹€.
  • λ‚΄λΆ€ Text 값은 λ°”λ””μ˜ λ¬Έμžμ—΄ κ·œμΉ™μœΌλ‘œ ν•΄μ„ν•©λ‹ˆλ‹€.
  • 백틱은 λ¬Έμžμ—΄μ„ λ‹«μŠ΅λ‹ˆλ‹€. κ·Έ 문자λ₯Ό ν¬ν•¨ν•˜λŠ” λ°”λ””λŠ” 이쀑 λ”°μ˜΄ν‘œ ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.
  • κΈ°μ‘΄ 이쀑 λ”°μ˜΄ν‘œλŠ” μ’…μ „μ˜ μ΄μŠ€μΌ€μ΄ν”„ κ·œμΉ™μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • ν˜„μž¬ μ •κ·œ 포맷은 해석값과 μ•ˆμ •μ  IDλ₯Ό μœ μ§€ν•˜λ©° 이쀑 λ”°μ˜΄ν‘œ λ¬Έμžμ—΄λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.
  • λ°”λ””μ˜ 곡백 ꡬ성이 달라지면 생성 ν˜•μ‹κ³Ό μ†ŒμŠ€ ν•΄μ‹œλ„ λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ„€μΉ˜λ³Έμ—μ„œ ν™•μΈν•œ λ²”μœ„

Go1.27.1둜 λΉŒλ“œν•œ κΉ¨λ—ν•œ μ„€μΉ˜λ³Έμ—μ„œ μœ„ ν•¨μˆ˜λ₯Ό λ³„λ„λ‘œ μ»΄νŒŒμΌΒ·μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. int64 μ–‘ λκ°’Β·μŒμˆ˜Β·0Β·μ–‘μˆ˜λ₯Ό ν¬ν•¨ν•œ 8/8 κΈ°λŒ€κ°’μ΄ μΆ©μ‘±λμŠ΅λ‹ˆλ‹€. 잘λͺ»λœ UTF-8 ν•œ λ°”μ΄νŠΈλ₯Ό 넣은 λ°”λ””λŠ” 6:1–6:2μ—μ„œ 생성 전에 κ±°λΆ€ν–ˆμŠ΅λ‹ˆλ‹€.

ν•œμ˜ μ†ŒμŠ€Β·μžμ²΄ 16 KiB λͺ¨λΈΒ·κ²°μ •λ‘  λ„€ 쑰건도 두 λ²ˆμ”© μ‘°λ¦½ν–ˆμŠ΅λ‹ˆλ‹€. μƒˆλ‘œ 8회 μƒμ„±Β·μ‹€μ œ νŒλ‹¨ 4νšŒΒ·μ‹€μ œ μ‹€ν–‰ 16νšŒμ—μ„œ 1,024/1,024 μœ ν•œ κΈ°λŒ€κ°’κ³Ό 이전 생성 Go μ—¬λŸ 파일의 일치λ₯Ό ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. μΆ”κ°€ ν•™μŠ΅μ€ 0νšŒμž…λ‹ˆλ‹€. 반볡 응닡은 77–94msμ˜€κ³ , μ•žμ„  개발 μ†ŒμŠ€μ˜ 28–33ms 관츑도 ν•¨κ»˜ λ‚¨κ²ΌμŠ΅λ‹ˆλ‹€. μ•Œλ €μ§„ μ •μˆ˜ μ—°μ‚° κ°€μ‘±μ˜ 128개 μž…λ ₯을 반볡 ν™•μΈν•œ λ²”μœ„μž…λ‹ˆλ‹€.

개발 #1190κ³Ό main #1191의 ν•„μˆ˜ μ—¬μ„― 검사와 λΆˆλ³€ 증거λ₯Ό 독립 확인해 정상 λ³‘ν•©ν–ˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©λ²•Β·λͺ¨λ“  μ›λ³ΈΒ·μ²˜μŒ μ‹€νŒ¨Β·μžμ›κ³Ό μ‹œκ°„.