Libelektra: 였λ₯˜μ— λŒ€ν•œ μ½”λ“œ 생성

에 λ§Œλ“  2019λ…„ 08μ›” 11일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: ElektraInitiative/libelektra

이전 였λ₯˜ κ°œλ…μ—μ„œλŠ” μƒˆ 였λ₯˜λ₯Ό 자주 μΆ”κ°€ν–ˆκΈ° λ•Œλ¬Έμ— 맀크둜λ₯Ό μƒμ„±ν•˜λŠ” 것이 맀우 μœ μš©ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ½”λ“œ 생성 μžμ²΄λŠ” 맀우 λ³΅μž‘ν•©λ‹ˆλ‹€(μ½”λ“œλ₯Ό μΈμ‡„ν•˜λŠ” C++ μ½”λ“œ, 크둜슀 μ»΄νŒŒμΌμ—λ„ μ ν•©ν•˜μ§€ μ•ŠμŒ, #2814 μ°Έμ‘°).

이제 λͺ‡ 가지 였λ₯˜κ°€ λ‹€μ†Œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μš°λ¦¬κ°€ ν•΄μ•Ό ν•  일은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. λͺ‡ 가지 맀크둜λ₯Ό μˆ˜λ™μœΌλ‘œ κΈ°λ‘ν•˜κ³ (kdberrors.hλ₯Ό μ •μ μœΌλ‘œ λ§Œλ“€κ³  #2697도 포함) μ–Έμ–΄ 바인딩에 λŒ€ν•œ μ˜ˆμ™Έλ„ μˆ˜λ™μœΌλ‘œ κΈ°λ‘ν•©λ‹ˆλ‹€(λ˜ν•œ Elektra의 λ‚΄λΆ€ 였λ₯˜μ—μ„œ ν•΄λ‹Ή 언어에 νŠΉμ •ν•œ 쒋은 였λ₯˜λ‘œμ˜ 맀핑).
  2. 우리의 μ½§μˆ˜μ—Ό μ‹œμŠ€ν…œμœΌλ‘œ μ½”λ“œλ₯Ό μƒμ„±ν•˜λŠ” 보닀 ν˜„λŒ€μ μ΄κ³  μ‰¬μš΄ λ°©λ²•μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜κ³  이것이 λͺ¨λ“  컴파일된 μ–Έμ–΄(C, C++, Java, Rust, Go)에 λŒ€ν•œ (맀핑) μ½”λ“œλ₯Ό μƒμ„±ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
  3. μ΄λŸ¬ν•œ 맀크둜/클래슀λ₯Ό μƒμ„±ν•˜λŠ” CMake μ½”λ“œλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(#2814 μ°Έμ‘°)

@PhilippGackstatter @raphi011 @kodebach @Piankero μ–΄λ–»κ²Œ μƒκ°ν•˜μ„Έμš”?

proposal

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

개인적으둜 μ €λŠ” μ˜΅μ…˜ 1을 μ„ ν˜Έν•©λ‹ˆλ‹€. 였λ₯˜ μ½”λ“œλŠ” 맀우 λ“œλ¬Όκ²Œ λ³€κ²½λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ C μ½”λ“œλ₯Ό μˆ˜λ™μœΌλ‘œ μž‘μ„±ν•˜κ³  λ‹€λ₯Έ μ–Έμ–΄λ₯Ό 동기화 μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” μΆ”κ°€ λ…Έλ ₯을 λ¬΄μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 초기 λ…Έλ ₯은 μžλ™ 생성을 μ„€μ •ν•˜λŠ” 것보닀 적어야 ν•©λ‹ˆλ‹€.

μ˜΅μ…˜ 2κ°€ μ•„λ‹Œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ½§μˆ˜μ—Ό ν…œν”Œλ¦Ώμ€ μ–΄λ–»κ²Œλ“  μž…λ ₯ 데이터와 ν•¨κ»˜ μ œκ³΅λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λΉŒλ“œ μ‹œ 컴파일된 μ‚¬μš©μž 지정 μ‹€ν–‰ νŒŒμΌμ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이 경우 μš°λ¦¬λŠ” C++ μ½”λ“œμ—μ„œ std::cout << ... λ₯Ό μ œκ±°ν•  κ²ƒμ΄μ§€λ§Œ λ‹€λ₯Έ 것은 λ³„λ‘œ λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ˜΅μ…˜μ€ κΈ°λ³Έ μ½§μˆ˜μ—Ό μ‹€ν–‰ νŒŒμΌμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ‹€ν–‰ νŒŒμΌμ€ Ruby μŠ€ν¬λ¦½νŠΈμ΄λ―€λ‘œ Rubyλ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ kdb gen λŠ” kdb λ¨Όμ € μ»΄νŒŒμΌν•΄μ•Ό ν•˜λ―€λ‘œ μž¬μ‚¬μš© ν•  수 μ—†μŠ΅λ‹ˆλ‹€. kdberrors.h ν•©λ‹ˆλ‹€.

μ˜΅μ…˜ 3이 μ•„λ‹Œ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

C μ½”λ“œ 생성은 CMakeμ—μ„œ μž‘λ™ν•  수 μžˆμ§€λ§Œ 더 λ³΅μž‘ν•œ μ–Έμ–΄λŠ” CMakeλ₯Ό μ‚¬μš©ν•˜λŠ” 데 λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.


μ–΄λ–€ ν˜•νƒœμ˜ μ½”λ“œ 생성을 μ‚¬μš©ν•˜κΈ°λ‘œ κ²°μ •ν–ˆλ‹€λ©΄ λ°˜λ“œμ‹œ 생성해야 ν•˜λŠ” λΆ€λΆ„λ§Œ 생성해야 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ ν˜„μž¬ kdberrors.h μ—λŠ” μ™„μ „νžˆ 정적이며 μ‹€μ œλ‘œ μ–΄λ–€ 였λ₯˜κ°€ μžˆλŠ”μ§€μ™€ λ¬΄κ΄€ν•œ λ§Žμ€ μ½”λ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 μ½”λ“œλŠ” μƒμ„±λ˜μ–΄μ„œλŠ” μ•ˆ 되며 정적 νŒŒμΌμ—μ„œ #include ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ˜ν•œ μ•ˆμ •μ μΈ 였λ₯˜ μ½”λ“œ λ•Œλ¬Έμ— μ˜΅μ…˜ 1을 μ„ ν˜Έν•©λ‹ˆλ‹€. μ½”λ“œ 생성을 μΆ”κ°€ν•˜λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° μ‰¬μš΄ 전체 μ½”λ“œμ— λΆˆν•„μš”ν•œ λ³΅μž‘μ„±μ΄ μΆ”κ°€λ©λ‹ˆλ‹€.

@kodebach μ˜΅μ…˜ 2에 λŒ€ν•΄ μžμ„Ένžˆ

λ‚˜λŠ” μš°λ¦¬κ°€ μ˜΅μ…˜ 1둜 κ°€λŠ” 것이 맀우 λΆ„λͺ…ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. @Piankero 당신이 결정을 써 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ°”μΈλ”©μ˜ 경우 크게 λ³€κ²½λ˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

λ‹€μŒμ„ μ„€λͺ…ν•˜λŠ” 바인딩 μž‘μ„± νŠœν† λ¦¬μ–Όμ΄ μžˆλ‹€λ©΄ μ–Όλ§ˆλ‚˜ μ’‹μ„κΉŒμš”?

  1. Elektra λ°”μΈλ”©μ˜ μ–΄λ–€ 뢀뢄이 μ˜λ―Έκ°€ μžˆλŠ”μ§€(μ‘μš© ν”„λ‘œκ·Έλž¨, ν”ŒλŸ¬κ·ΈμΈ, 도ꡬ λ“±)
  2. CMake에 바인딩을 ν†΅ν•©ν•˜λŠ” 방법(κ°€λŠ₯ν•˜κ³  μœ μš©ν•œ 경우)
  3. λ°”μΈλ”©μ˜ μ–΄λ–€ 뢀뢄이 μ–Έμ–΄λ§ˆλ‹€ λ‹€λ₯Ό 수 있고 달라야 ν•˜λŠ”μ§€. μ—¬κΈ°μ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ©λ‹ˆλ‹€.

    • 반볡자

    • κΈ°λ³Έ μœ ν˜•μœΌλ‘œμ˜ λ³€ν™˜(λ¬Έμžμ—΄, int, ...)

    • μ—°μ‚°μž μ˜€λ²„λ‘œλ”©(μ‚¬μš© κ°€λŠ₯ν•œ 경우)

    • 기타 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 톡합(슀트림, ν•΄μ‹œ μ½”λ“œ, ID λ“±)

    • kdb ν•¨μˆ˜μ—μ„œ 였λ₯˜λ₯Ό λ°˜ν™˜ν–ˆμŠ΅λ‹ˆλ‹€(μ—¬κΈ°μ„œ 이 문제의 λ‚΄μš©).

λ‹€λ₯Έ μ–Έμ–΄μ—μ„œ λ³Ό 수 μžˆλŠ” λ‹€μ–‘ν•œ 상황에 λŒ€ν•΄ 이 νŠœν† λ¦¬μ–Όμ„ ν™•μž₯ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. @Piankero νŠœν† λ¦¬μ–Ό, 특히 였λ₯˜ 처리 μ„Ήμ…˜(상속을 κ΅¬ν˜„ν•˜λŠ” 방법, ...) μž‘μ„±μ„

νŠœν† λ¦¬μ–Ό: #2875
λ””μžμΈ κ²°μ •: #2872

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