νƒœκ·Έ 보관물: meta-programming

meta-programming

단계적 κΈ°λŠ₯ (κ°œλ…μ μœΌλ‘œ)μ΄λž€ λ¬΄μ—‡μž…λ‹ˆκΉŒ? 잘 μ•Œλ €μ§„ κ²ƒμ²˜λŸΌμ΄ μš©μ–΄λ₯Ό μ‚¬μš©ν•˜λ©°,

졜근의 CACM 기사 [1]μ—μ„œ, μ €μžλŠ” 단계별 κΈ°λŠ₯에 λŒ€ν•œ κ΅¬ν˜„μ„ μ œμ‹œν•©λ‹ˆλ‹€ . 그듀은 잘 μ•Œλ €μ§„ κ²ƒμ²˜λŸΌμ΄ μš©μ–΄λ₯Ό μ‚¬μš©ν•˜λ©°, μ–΄λ–€ 언급도 λͺ…λ°±ν•œ μ†Œκ°œμ²˜λŸΌ 보이지 μ•ŠμŠ΅λ‹ˆλ‹€.

그듀은 짧은 μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€ (κ°•μ‘° κ΄‘μ‚°κ³Ό μ°Έμ‘° λ²ˆν˜Έκ°€ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ›λž˜λŠ” 22μž…λ‹ˆλ‹€)

ν”„λ‘œκ·Έλž¨ 생성과 κ΄€λ ¨ν•˜μ—¬ Taha and Sheard [2]에 μ˜ν•΄ 확립 된 닀단계 ν”„λ‘œκ·Έλž˜λ° (MSP, 짧게 μŠ€ν…Œμ΄μ§•) 은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν”„λ‘œκ·Έλž¨ ν‘œν˜„μ˜ 평가λ₯Ό ν›„κΈ° λ‹¨κ³„λ‘œ λͺ…μ‹œ 적으둜 μ§€μ—°μ‹œν‚¬ μˆ˜μžˆκ²Œν•œλ‹€ (λ”°λΌμ„œ, μŠ€ν…Œμ΄μ§•). ν˜„μž¬ λ‹¨κ³„λŠ” 효과적으둜 λ‹€μŒ λ‹¨κ³„μ˜ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜κ³  μ‹€ν–‰ν•˜λŠ” μ½”λ“œ μƒμ„±κΈ°λ‘œμ„œ μž‘μš©ν•œλ‹€.

κ·ΈλŸ¬λ‚˜ Taha와 SheardλŠ” λ‹€μŒκ³Ό 같이 μ”λ‹ˆλ‹€.

닀단계 ν”„λ‘œκ·Έλž¨μ€ λͺ¨λ‘ λ™μΌν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ½”λ“œ 생성, 컴파일 및 μ‹€ν–‰κ³Ό κ΄€λ ¨λœ ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. 닀단계 μ–Έμ–΄λŠ” 닀단계 ν”„λ‘œκ·Έλž¨μ„ ν‘œν˜„ν•©λ‹ˆλ‹€. μŠ€ν…Œμ΄μ§• 및 결과적으둜 닀단계 ν”„λ‘œκ·Έλž˜λ°μ€ λŸ°νƒ€μž„ 해석 μ˜€λ²„ ν—€λ“œλ₯Ό μ§€λΆˆν•˜μ§€ μ•ŠλŠ” λ²”μš© μ†”λ£¨μ…˜μ˜ ν•„μš”μ„±μ„ ν•΄κ²°ν•©λ‹ˆλ‹€.

μŠ€ν…Œμ΄μ§•μ΄ νš¨κ³Όμ μ΄λΌλŠ” 것을 λ³΄μ—¬μ£ΌλŠ” 였래된 μž‘μ—…μ— λŒ€ν•œ λͺ‡ κ°€μ§€ 언급보닀 κ°œλ…μ΄ 더 μ˜€λž˜λ˜μ—ˆλ‹€λŠ” 것을 μ•”μ‹œν•©λ‹ˆλ‹€. μš©μ–΄ μžμ²΄μ— λŒ€ν•œ μ°Έμ‘°λŠ” μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ μ§„μˆ μ€ λͺ¨μˆœλ˜μ§€ μ•ŠμœΌλ©΄ μ§κ΅ν•˜λŠ” κ²ƒμ²˜λŸΌ 보인닀. μ•„λ§ˆλ„ Rompf와 Oderskyκ°€ μ“΄ 것은 Taha와 Sheardκ°€ μ œμ•ˆν•œ 것을 μ μš©ν•œ 것일지도 λͺ¨λ₯΄μ§€λ§Œ, λ˜‘κ°™μ€ λ‹€λ₯Έ 관점 일 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 그듀은 μ€‘μš”ν•œ 점은 ν”„λ‘œκ·Έλž¨μ΄ λŸ°νƒ€μž„μ— μžμ‹ μ˜ 일뢀λ₯Ό λ‹€μ‹œ μž‘μ„±ν•œλ‹€λŠ” 점에 λ™μ˜ν•˜λŠ” 것 κ°™μ§€λ§Œ, 그것이 ν•„μš”ν•œ λŠ₯λ ₯인지 μΆ©λΆ„ν•œ λŠ₯λ ₯μΈμ§€λŠ” λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ, λ¬΄μ—‡μ„ν•œλ‹€ μ€€λΉ„ μ΄λŸ¬ν•œ λ§₯λ½μ—μ„œ μ€€λΉ„μ˜ 해석은 κ°κ°μž…λ‹ˆκΉŒ? 이 μš©μ–΄λŠ” μ–΄λ””μ—μ„œ μœ λž˜ν•©λ‹ˆκΉŒ?


  1. κ²½λŸ‰ λͺ¨λ“ˆ ν˜• μŠ€ν…Œμ΄μ§• : T. Rompf와 M. Odersky (2012)의 λŸ°νƒ€μž„ μ½”λ“œ 생성 및 컴파일 된 DSL 에 λŒ€ν•œ μ‹€μš©μ μΈ μ ‘κ·Ό 방식
  2. W. Taha와 T. Sheard (2000)의 λͺ…μ‹œ 적 주석 을 μ΄μš©ν•œ MetaML 및 닀단계 ν”„λ‘œκ·Έλž˜λ°


λ‹΅λ³€

λ‚΄κ°€ μ•„λŠ” ν•œ, 단계별 계산 μ΄λΌλŠ” μš©μ–΄ λŠ” 이 λ…Όλ¬Έ μ—μ„œ Bill Scherlis에 μ˜ν•΄ 처음 μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€ . κ·Έ μ΄μ „μ—λŠ” ” λΆ€λΆ„ 평가 ” λΌλŠ” μš©μ–΄ κ°€ 거의 같은 κ°œλ…μœΌλ‘œ μ‚¬μš©λ˜μ—ˆμ§€λ§Œ 단계적 κ³„μ‚°μ˜ μ•„μ΄λ””μ–΄λŠ” λ―Έλ¬˜ν•˜κ²Œ λ‹€λ¦…λ‹ˆλ‹€. 두 μ•„μ΄λ””μ–΄λŠ” λͺ¨λ‘ Kleene의 Smn 정리 와 관련이 μžˆμŠ΅λ‹ˆλ‹€.

두 인수 의 ν•¨μˆ˜ 이 μžˆμ§€λ§Œ ν•˜λ‚˜μ˜ 인수 인 m 을 μ•Œκ³  μžˆλ‹€λ©΄ 첫 번째 μΈμˆ˜μ— λŒ€ν•œ 지식을 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜ 계산을 λ°”λ‘œ μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ 남은 것은 계산이 두 번째 μ•Œ μˆ˜μ—†λŠ” μΈμˆ˜μ—λ§Œ 의쑴 ν•˜λŠ” ν•¨μˆ˜ Ο• m ( n ) μž…λ‹ˆλ‹€.

Ο•(m,n)

m

Ο•m(n)

Ο•m(n)

Ο•

m

n

Ο•β€²

m

Ο•m

n

Ο•β€²

m

Ο•m

Ο•m

Ο•

Ο•β€²
  • 단계별 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 방법?
  • 단계적 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 및 μœ ν˜• μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•΄μ•Όν•©λ‹ˆκΉŒ?
  • κ·ΈλŸ¬ν•œ μ–Έμ–΄μ˜ μ˜λ―ΈλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?
  • 단계별 κΈ°λŠ₯의 일관성과 정확성을 μ–΄λ–»κ²Œ 보μž₯ν•©λ‹ˆκΉŒ?
  • 단계별 ν•¨μˆ˜λ₯Ό μžλ™ λ˜λŠ” λ°˜μžλ™μœΌλ‘œ κ΅¬μ„±ν•˜λŠ” 데 μœ μš©ν•œ κΈ°μˆ μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?
  • μš°λ¦¬λŠ” κ·ΈλŸ¬ν•œ 기술의 정확성을 μ–΄λ–»κ²Œ 증λͺ…ν•©λ‹ˆκΉŒ?

단계별 계산은 μ‹€μ œλ‘œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ λͺ¨λ“  μ»΄νŒŒμΌλŸ¬λŠ” μ‹€μ œλ‘œ 단계적 κ³„μ‚°μž…λ‹ˆλ‹€. μ†ŒμŠ€ ν”„λ‘œκ·Έλž¨μ΄ μ£Όμ–΄μ§€λ©΄ λ³€ν™˜λ˜κ³  μ΅œμ ν™” 된 λŒ€μƒ ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜μ—¬ μ‹€μ œ μž…λ ₯을 μ·¨ν•˜κ³  κ²°κ³Όλ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” μ—¬λŸ¬ 단계λ₯Ό μ €κΈ€λ§ν•˜κ³  μ˜¬λ°”λ₯Έ μ‹œκ°„μ— μ˜¬λ°”λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ‹€μ œλ‘œ 단계적 계산 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것은 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 컴파일러λ₯Ό μž‘μ„±ν•œ λͺ¨λ“  μ‚¬λžŒλ“€μ€ κ·ΈλŸ¬ν•œ 문제둜 어렀움을 κ²ͺμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것도 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. 기계 μ–Έμ–΄ ν”„λ‘œκ·Έλž¨ (컴파일러), SQL 쿼리 (λ°μ΄ν„°λ² μ΄μŠ€ μ‘°μž‘) λ˜λŠ” HTML / μ„œλ²„ νŽ˜μ΄μ§€ / μžλ°” 슀크립트 μ½”λ“œ (μ›Ή μ‘μš© ν”„λ‘œκ·Έλž¨) 및 μˆ˜λ§Žμ€ λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨ 일 수 μžˆμŠ΅λ‹ˆλ‹€.


λ‹΅λ³€

λ‹€λ₯Έ 닡변은 기술적으둜 μ •ν™•ν•˜μ§€λ§Œ 컴퓨터 κ³Όν•™μžκ°€ 단계적 κΈ°λŠ₯에 관심을 κ°–λŠ” 이유λ₯Ό μ •ν™•ν•˜κ²Œ μ΄ν•΄ν•˜μ§€ λͺ»ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

단계적 κΈ°λŠ₯을 μž‘μ„±ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μƒμ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ •μ˜ν•©λ‹ˆλ‹€. ν˜„λŒ€μ˜ μ‹€μ œ μ–Έμ–΄ 이둠의 큰 λͺ©ν‘œ 쀑 ν•˜λ‚˜λŠ” 잠재적 μž¬μ‚¬μš©μ„ μ΅œλŒ€ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” μœ μš©ν•œ ν•¨μˆ˜μ™€ 객체 일뿐만 μ•„λ‹ˆλΌ κ³ μ°¨μ›μ˜ 건좕 ꡬ쑰λ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨ ν”„λ‘œκ·Έλž˜λ¨Έλ₯Ό λ•λŠ” 라이브러리λ₯Ό μž‘μ„±ν•  수 있기λ₯Ό μ›ν•©λ‹ˆλ‹€.

λͺ¨λ“  μƒμš©κ΅¬ μ½”λ“œλ₯Ό 제거 ν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. 사양 μ–Έμ–΄λ₯Ό μ΅œμ†Œν™” ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ£Όμ–΄μ§„ μŠ€λ ˆλ“œ λ””μžμΈμœΌλ‘œ λ‹€λ₯Έ λ””μŠ€νŒ¨μ²˜μ™€ ν†΅μ‹ ν•˜λŠ” 이벀트 쀑심 λ””μŠ€νŒ¨μ²˜λ₯Ό μ›ν•œλ‹€λ©΄,이λ₯Ό μ»΄νŒ©νŠΈν•˜κ²Œ μ§€μ •ν•  수 μžˆμ–΄μ•Όν•˜λ©° λͺ¨λ“  IO λ¦¬μŠ€λ„ˆμ™€ 큐 였브젝트 및 μŠ€λ ˆλ“œ 연결을 ν•΄λ‹Ή μŠ€νŽ™μ—μ„œ λΉŒλ“œ ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

도메인 μ–Έμ–΄λŠ” μš°λ¦¬κ°€ μ°Ύκ³ μžˆλŠ” κ°„κ²°ν•œ ν‘œν˜„ 인 κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬λžŒλ“€μ΄ λ„λ©”μΈμ—μ„œ ν•œλ™μ•ˆ 일할 λ•Œ, 그듀이 μ‚¬μš©ν•˜λŠ” μ–Έμ–΄λŠ” λŒ€λΆ€λΆ„μ˜ 정보 쀑볡을 μ—†μ• κ³  λ‹¨μˆœν•œ μ‚¬μ–‘μ΄λ˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œμ΄ μ€€λΉ„ 이둠은 도메인 μ–Έμ–΄μ—μ„œ μ‹€ν–‰ μ–Έμ–΄λ‘œμ˜ λ²ˆμ—­ μ‹œμŠ€ν…œμ΄λ˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬λŠ” κΈ°μˆ μ μœΌλ‘œλŠ” λ‹¨κ³„μ μ΄μ§€λ§Œ λͺ©ν‘œκ°€ μ—†μŠ΅λ‹ˆλ‹€. ν˜„λŒ€ μŠ€ν…Œμ΄μ§•μ˜ λͺ©ν‘œλŠ” μž¬μ‚¬μš©μ„ κ·ΉλŒ€ν™”ν•˜κ³  κ°€λŠ₯ν•œ 경우 ν”„λ‘œκ·Έλž¨ ꡬ성을 μžλ™ν™”ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬μΆ•ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬μΆ•ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ˜ κΈ°λŠ₯ μš”κ΅¬ 사항이 ν”„λ‘œκ·Έλž¨μ΄λΌλ©΄ 그것은 쒋을 κ²ƒμž…λ‹ˆλ‹€.

Czarnecki와 Eisenecker (ISBN-13 : 978-0201309775)의 β€œGenerative Programming”을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.


λ‹΅λ³€

λ¬Έμ œλŠ” 기사 [1]에 λŒ€ν•œ 기술적 인 κ΄€μ μ—μ„œ μ œκ³΅λ©λ‹ˆλ‹€. 고렀쀑인 λ¬Έμ œλŠ” 일반 μ½”λ“œμ™€ νŠΉμ • μ½”λ“œ μ‚¬μ΄μ˜ κΈ΄μž₯ μ˜μ—­μž…λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž¨μ€ λ²”μš© λ˜λŠ” 특수 λͺ©μ μœΌλ‘œ μž‘μ„± 될 수 μžˆμŠ΅λ‹ˆλ‹€. λ²”μš© μ½”λ“œλŠ” λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ, 특수 λͺ©μ  μ½”λ“œλŠ” μ‹€ν–‰ ν™˜κ²½μ˜ 고유 ν•œ νŠΉμ„±μ„ ν™œμš©ν•˜μ—¬ μž¬μ‚¬μš© κ°€λŠ₯μ„±μœΌλ‘œ νš¨μœ¨μ„±μ„ μ–»λŠ” λ°©μ‹μœΌλ‘œ μž‘μ„± 될 수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Όλ‘  μš°λ¦¬λŠ” μ΄λŸ¬ν•œ κΈ΄μž₯을 ν•΄κ²°ν•˜κ³ μžν•©λ‹ˆλ‹€. 그것은 일반적인 μ½”λ“œ 와 ꡬ체적인 κ΅¬ν˜„μž…λ‹ˆλ‹€.

μš°λ¦¬λŠ” λ‹€μŒκ³Ό 같은 μ§ˆλ¬Έμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ : 일반적인 λͺ©μ μ„ μœ„ν•΄ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것이 κ°€λŠ₯ν•œκ°€? κ·ΈλŸ¬λ‚˜ μ‹€ν–‰ 쀑에 ν˜„μž¬ 상황에 μžλ™μœΌλ‘œ νŠΉν™”λ˜λ„λ‘ν•©λ‹ˆκΉŒ?

이것은 (일반) ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • 상황에 맞게 λŸ°νƒ€μž„μ— 슀슀둜 μž‘μ„± (재)λ˜λ„λ‘ν•˜λŠ” 아이디어λ₯Ό λ‚³μ•˜μŠ΅λ‹ˆλ‹€.

결과적으둜 μ€‘μš”ν•œ 연ꡬ λ°©ν–₯은 ν”„λ‘œκ·Έλž˜λ¨Έκ°€ λ²”μš© μ½”λ“œλ₯Ό μž‘μ„±ν•œ λ‹€μŒ λŸ°νƒ€μž„μ‹œ κ³ μ„±λŠ₯ 특수 μ½”λ“œλ‘œ μ •ν™•ν•˜κ³  효율적으둜 μ „ν™˜ ν•  μˆ˜μžˆλŠ” μ–Έμ–΄ 및 컴파일러 κΈ°μˆ μ— λŒ€ν•œ κ²€μƒ‰μž…λ‹ˆλ‹€.

Java의 JITκ°€ 쒋은 예라고 μƒκ°ν•©λ‹ˆλ‹€. ν•œ κ°€μ§€ νŠΉλ³„ν•œ μ•„μ΄λ””μ–΄λŠ” 닀단계 ν”„λ‘œκ·Έλž˜λ°μ΄λ©° LeeλŠ” λ‹€μŒκ³Ό 같이 μ„€λͺ…ν•©λ‹ˆλ‹€.

이 연ꡬ λΌμΈμ—μ„œ 핡심 아이디어 쀑 ν•˜λ‚˜λŠ” μ€€λΉ„ κ°œλ…μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” 일련의 λ‹¨κ³„λ‘œ μ§„ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μƒμƒν•©λ‹ˆλ‹€. 각 λ‹¨κ³„λŠ” 이후 λ‹¨κ³„μ—μ„œ μ‚¬μš©λ˜λŠ” 값을 κ³„μ‚°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ μš°λ¦¬κ°€ μ°ΎλŠ” 것은 ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬ μ–΄λ–»κ²Œ λ“  μ΄λŸ¬ν•œ 단계가 λͺ…ν™• ν•΄ μ§€λ„λ‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것이 λ‹¬μ„±λ˜λ©΄, μš°λ¦¬λŠ” ν›„κΈ° 단계 μ½”λ“œκ°€ 초기 λ‹¨κ³„μ˜ 계산 결과에 λŒ€ν•΄ μ΅œμ ν™”λ˜λŠ” μ½”λ“œ μƒμ„±κΈ°λ‘œ μ»΄νŒŒμΌλ˜λ„λ‘ λ°°μ—΄ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

즉, β€œμŠ€ν…Œμ΄μ§• (staging)”은 계산 / μ‹€ν–‰μ—μ„œ μœ„μƒμ„ μ‹λ³„ν•˜λŠ” μ μ ˆν•œ κΈ°λŠ₯ / μ½”λ“œλ₯Ό λ³΄λŠ” λ°©λ²•μœΌλ‘œ, 이전 μœ„μƒμ˜ κ²°κ³Όλ₯Ό μ•Œλ©΄ λ‹¨μˆœν™” 될 수 μžˆμŠ΅λ‹ˆλ‹€. 문제의 첫 번째 μΈμš©λ¬Έμ—μ„œμ™€ 같이 β€œμ§€μ—°β€κ³„μ‚°μ€ 단계λ₯Ό μ˜¬λ°”λ₯΄κ²Œ λΆ„λ¦¬ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λΆ€μž‘μš© 일 수 μžˆμ§€λ§Œ μš”μ μ΄ μ•„λ‹™λ‹ˆλ‹€.

Rompf와 OderskyλŠ” λΉ λ₯Έ 푸리에 λ³€ν™˜ 을 μ˜ˆλ‘œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.


  1. μ—¬μš°μ™€ κ³ μŠ΄λ„μΉ˜ : Peter Lee의 기술적 관점 (2012)

λ‹΅λ³€