Libelektra: ๋…น ๋ฐ”์ธ๋”ฉ

์— ๋งŒ๋“  2019๋…„ 05์›” 28์ผ  ยท  45์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ElektraInitiative/libelektra

๋Œ€๋žต 7์›” ์ค‘์ˆœ๋ถ€ํ„ฐ Elektra์šฉ Rust ๋ฐ”์ธ๋”ฉ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— Rust-bindgen ์€ ๋ฐ”์ธ๋”ฉ์„ (์ผ๋ถ€ ๋˜๋Š” ์ „์ฒด) ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ๋“ค์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๊ฝค ๋งŽ์€ ์ˆ˜๋™ ์ž‘์—…์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ํ˜„์žฌ ์ดํ•ด์™€ @kodebach ์˜ ์˜๊ฒฌ์— ๋”ฐ๋ฅด๋ฉด elektra-sys ์ƒ์ž๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์ผ๋‹จ ์ž‘๋™ํ•˜๋ฉด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š” ์—†์ด ์ผ๋ฐ˜ Rust์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ˆ์ „ํ•œ API๋ฅผ Rust์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด elektra ์ƒ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ํ™”๋ฌผ ํ…Œ์ŠคํŠธ๋กœ ํ…Œ์ŠคํŠธํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํฌ๋ ˆ์ดํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• ์€ ์ฝ”๋“œ์— ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . docs.rs ๋Š” ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

crates.io ์— ํฌ๋ ˆ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด API ํ† ํฐ ์ด ์žˆ๋Š” @markus2330 ์—์„œ ๋…ผ์˜ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์ด ๊ณ„์ •์€ ElektraInitiative์˜ ์ผ๋ถ€์—ฌ์•ผ ํ–ฅํ›„ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ CMake์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ CMake ํ†ตํ•ฉ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Rust-bindgen์€ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ช…๋ น์ค„์„ ํ†ตํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ˆ˜๋™ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ C-API์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ™”๋ฌผ ๋นŒ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๋นŒ๋“œ์—์„œ ๋ฐ”์ธ๋”ฉ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ˜„์žฌ ๊ตฌํ˜„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด elekra์— ํ•„์š”ํ•œ ํ—ค๋”๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ elektra๋ฅผ ์„ค์น˜ํ–ˆ์ง€๋งŒ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. C-API๊ฐ€ ๋” ์ด์ƒ ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋•Œ๋กœ ์ˆ˜๋™์œผ๋กœ ํ—ค๋”๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋นŒ๋“œ์—์„œ ์žฌ์ƒ์„ฑ์ด ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋‹ค๋ฅธ ๋ฐ”์ธ๋”ฉ๋„ ๊ทธ๋ ‡๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(swig๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•จ). ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ํ—ค๋” ํŒŒ์ผ์„ ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  45 ๋Œ“๊ธ€

Rust์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ rust-bindgen ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฐ”์ธ๋”ฉ์€ unsafe Rust์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด ์ข€ ๋” ๊ด€์šฉ์ ์ธ Rust API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ž˜ํผ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AFAIK ๋Œ€๋ถ€๋ถ„์˜ Rust ๋ฐ”์ธ๋”ฉ์—๋Š” C API์˜ 1:1 ๋งคํ•‘์„ ์œ„ํ•œ ํ•˜๋‚˜์˜ *-sys ํฌ๋ ˆ์ดํŠธ์™€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ Rust์—์„œ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  API๊ฐ€ ํฌํ•จ๋œ ๋‹ค๋ฅธ ํฌ๋ ˆ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Rust์—๊ฒŒ ์ž๋™์œผ๋กœ keyDel , ksDel ๋ฐ ํ•„์š”ํ•  ๋•Œ ์นœ๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด ์ข€ ๋” ๊ด€์šฉ์ ์ธ Rust API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ž˜ํผ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์ด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋™์•ˆ C API์™€ ๋น„๊ตํ•˜๊ณ  C API(์ ์–ด๋„ ๋ฌธ์„œ์—์„œ)์—์„œ ๊ฐœ์„ ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PhilippGackstatter ๋…ผ์˜๋œ ๋Œ€๋กœ: https://crates.io/ ์— ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ CMake ์‹œ์Šคํ…œ์— ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด์„ธ์š”.

@PhilippGackstatter ์–ด๋–ค ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? Rust ๋ฐ”์ธ๋”ฉ์„ ํ™•์žฅํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@markus2330 ๋ฉฐ์น  ์ „์— ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ bindgen, cmake ๋ฐ ํ”„๋กœ์ ํŠธ์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฝ๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์—ฌ์ค„ ๊ฒƒ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์ฒ˜์Œ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค(#2826 ์ฐธ์กฐ). ์ง€๊ธˆ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ „ํžˆ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

#2826์˜ ์งˆ๋ฌธ์— ๋‹ตํ•˜๋ ค๋ฉด(PR์€ ์ฝ”๋“œ์™€ ์ง์ ‘ ๊ด€๋ จ์ด ์—†๋Š” ํ† ๋ก ์— ๋Œ€ํ•ด ํ˜ผ๋™์„ ์ผ์œผํ‚ค๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์„ ํ˜ธํ•˜์‹ญ์‹œ์˜ค):

ํ•˜๋‚˜๋Š” ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” src/include์˜ ํ—ค๋”์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ kdb.h์ด์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์› ์—†์ด ์ €์ˆ˜์ค€ API์— ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ €์ˆ˜์ค€ API๋Š” kdb.h์—๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Rustup(cargo ๋ฐ rustc๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ)์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๋„์ปค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ๋„์ปค ์Šคํฌ๋ฆฝํŠธ์™€ Jenkinsfile๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์‹  ๋ฐฐํฌํŒ์šฉ์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Debian Buster์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋ณธ Rust๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ ๋ฒ„์Šคํ„ฐ ๋„์ปค ํŒŒ์ผ์ด ์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. #2819

์ž๋™ํ™”๋œ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #730

Rust-bindgen์€ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋ช…๋ น์ค„์„ ํ†ตํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ˆ˜๋™ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ C-API์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ™”๋ฌผ ๋นŒ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ๋นŒ๋“œ์—์„œ ๋ฐ”์ธ๋”ฉ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ˜„์žฌ ๊ตฌํ˜„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด elekra์— ํ•„์š”ํ•œ ํ—ค๋”๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ elektra๋ฅผ ์„ค์น˜ํ–ˆ์ง€๋งŒ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. C-API๊ฐ€ ๋” ์ด์ƒ ๋งŽ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋•Œ๋กœ ์ˆ˜๋™์œผ๋กœ ํ—ค๋”๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋นŒ๋“œ์—์„œ ์žฌ์ƒ์„ฑ์ด ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋‹ค๋ฅธ ๋ฐ”์ธ๋”ฉ๋„ ๊ทธ๋ ‡๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(swig๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•จ). ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ํ—ค๋” ํŒŒ์ผ์„ ๊ฐ„๋‹จํžˆ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์ด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋™์•ˆ C API์™€ ๋น„๊ตํ•˜๊ณ  C API(์ ์–ด๋„ ๋ฌธ์„œ์—์„œ)์—์„œ ๊ฐœ์„ ์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ์„ ์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ๊ธฐํšŒ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

  • keyGetBinary : ํ˜ธ์ถœ ์ฝ”๋“œ๋กœ์„œ -1์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด maxSize is 0 ๋˜๋Š” type mismatch ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Rust๋Š” ๋ฐ˜ํ™˜ ์ธ์ˆ˜์—์„œ ๋ช…์‹œ์  ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ํ˜• ๋ถˆ์ผ์น˜๋ฅผ ์˜ค๋ฅ˜์— ์ผ์น˜์‹œํ‚ค๊ณ  "maxSize related" ์˜ค๋ฅ˜๋ฅผ ๋‹ค๋ฅธ ์˜ค๋ฅ˜์— ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ๋” ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ๋ถˆ์ผ์น˜๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ keyGetBinary ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋‘ ๋ฒˆ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    keySetName ๋Š” ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ -1์— ์ผ์น˜์‹œํ‚ค๋Š” ์œ ์‚ฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋ฒ„๊ทธ(์ž˜๋ชป๋œ ์ด๋ฆ„)์ธ ์˜ค๋ฅ˜์™€ ์‚ฌ์šด๋“œ ํ”„๋กœ๊ทธ๋žจ(ํ‚ค์…‹์— ์ด๋ฏธ ์žˆ๋Š” ํ‚ค)์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฒฐ์ •์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช…์‹œ์„ฑ๊ณผ ์ด์ค‘ ๊ฒ€์‚ฌ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด -2๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  • ๋ฌธ๋ฒ•์ ์œผ๋กœ๋Š” keyIsDirectBelow ๊ฐ€ keyIsDirectlyBelow ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ ๐Ÿ™‚? ๊ทธ๋ ‡๋‹ค๋ฉด Rust API์—์„œ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ: keyRel ๋Š” CPP ๋ฐ”์ธ๋”ฉ์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Rust์—์„œ๋„ ์ด๊ฒƒ์„ ์ƒ๋žตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํ›Œ๋ฅญํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋”ฐ๋ฅด๋ฉด ์ด๋ฏธ API๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•˜์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ํ˜• ๋ถˆ์ผ์น˜๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ keyGetBinary๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋™์ผํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ํ˜ธ์ถœ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด typesystem์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ? (keyGetBinary๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‚ค์—์„œ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค)

๊ทธ๋Ÿฌ๋‚˜ ๋ช…์‹œ์„ฑ๊ณผ ์ด์ค‘ ๊ฒ€์‚ฌ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด -2๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ ์ด์œ ๋Š” ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. API๋Š” ์ฒ˜์Œ์— -1๋งŒ ๋ฐ˜ํ™˜ํ–ˆ์œผ๋ฉฐ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ==-1 ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค(0.9)์—์„œ๋Š” API๋ฅผ ๋‹ค์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  0 ๋ฏธ๋งŒ์˜ ๊ฐ’์€ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ„์œผ๋กœ์จ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐ”์ธ๋”ฉ์ด ์ •ํ™•ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ API ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด Rust API์—์„œ ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

API๋Š” ์ฒ ์ž๊ฐ€ ๋‹ค๋ฅด์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•˜๋ฉด C API ๋ฐ ๋ชจ๋“  ๋ฐ”์ธ๋”ฉ์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ๋กœ Java ๋ฐ Go๋งŒ ์ˆ˜๋™์œผ๋กœ ์กฐ์ •ํ•ด์•ผ ํ•˜๋ฉฐ ๋‚˜๋จธ์ง€๋Š” ์–ด์จŒ๋“  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์žฌ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค).

keyRel์€ CPP ๋ฐ”์ธ๋”ฉ์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Rust์—์„œ๋„ ์ด๊ฒƒ์„ ์ƒ๋žตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ์ด๋ฏธ keyIs(Direct)Below ๋ฐ keyRel์— ๊ฒน์น˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Œ์„ ์•Œ์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. keyRel์˜ ์•„์ด๋””์–ด๋Š” API๋ฅผ ์ž‘๊ฒŒ(๋”ฐ๋ผ์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘๊ฒŒ) ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ keyRel์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 0.9 ์ด๋‚ด์— ์ œ๊ฑฐํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋  ๋‹ค๋ฅธ ํ›„๋ณด์ž์— ๋Œ€ํ•ด์„œ๋Š” doc/todo/FUTURE๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ž˜๋ชป๋œ ํ˜ธ์ถœ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด typesystem์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ? (keyGetBinary๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‚ค์—์„œ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค)

์ข‹์€ ์•„์ด๋””์–ด์•ผ. BinaryKey ๋ฐ StringKey ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฒซ ๋ฒˆ์งธ์—๋งŒ get_binary() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ์—๋งŒ get_string() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์‹์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ API ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฑธ ํ•  ์ˆ˜์žˆ์–ด. ๋‚˜์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. Rust์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ API๋ฅผ ๋งˆ์นœ ํ›„ Rust์—๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ API๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์•„์ด๋””์–ด์•ผ. BinaryKey ๋ฐ StringKey๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฒซ ๋ฒˆ์งธ์—๋งŒ get_binary() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ์—๋งŒ get_string() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์‹์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ด๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์บ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์œ ํ˜•์ด ํ‚ค ์„ธํŠธ์˜ ํ‚ค์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(setName์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).

๋‚˜๋Š” ๊ทธ๊ฑธ ํ•  ์ˆ˜์žˆ์–ด. ๋‚˜์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. Rust์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ API๋ฅผ ๋งˆ์นœ ํ›„ Rust์—๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ API๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๋จผ์ € kdb.h์—์„œ Rust API๋ฅผ ์™„๋ฃŒํ•œ ๋‹ค์Œ ๋ช‡ ์‹œ๊ฐ„์„ ๋” ์†Œ๋น„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IMO Rust ๋ฐ”์ธ๋”ฉ(๋ฐ ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ)์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” C API๋ฅผ ์ตœ๋Œ€ํ•œ ๊ฐ€๊น๊ฒŒ ๋ฏธ๋Ÿฌ๋งํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์–ธ์–ด์— ๋” ๊ด€์šฉ์ ์ž…๋‹ˆ๋‹ค. BinaryKey ๋ฐ StringKey (๋˜๋Š” ์ œ๋„ค๋ฆญ)์ด ์žˆ๋Š” ์œ ํ˜• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ด€์šฉ์  ๋ฒ„์ „์—์„œ Rust์˜ API๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์•„๋งˆ๋„ ์ข‹์€ ์ƒ๊ฐ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@kodebach ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ elektra ๋ฐ elektra-sys ์ƒ์ž์—์„œ๋„ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@kodebach ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ elektra ๋ฐ elektra-sys ์ƒ์ž์—์„œ๋„ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์š”. ์ €๋„ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐ ํ•ด์š”. ์•ˆ์ „ํ•œ Rust API์— ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ elektra_sys ๊ฐ€์ ธ์˜ค๊ณ  ์ผ๋Œ€์ผ C ๋ฐ”์ธ๋”ฉ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์บ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค๋ฅธ ์œ ํ˜•์ด ํ‚ค ์„ธํŠธ์˜ ํ‚ค์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(setName์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ).

ํ•ต์‹ฌ ๊ตฌํ˜„์— ๋งค์šฐ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ KeySet์˜ ๊ฒฝ์šฐ ์žฅ์• ๋ฌผ์— ๋ถ€๋”ชํ˜”์Šต๋‹ˆ๋‹ค. Key๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฐ˜ํ™˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” get_value ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. BinaryKeys์˜ ๊ฒฝ์šฐ ๋ฐ”์ดํŠธ์ด๊ณ  StringKeys์˜ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ksNext ์˜ ๋…น ๋ฒ„์ „์€ ์ด์ œ ๋ฌด์—‡์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๊นŒ? "ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค"๋ฅผ ๋งŒ์กฑํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๊นŒ? ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์‹œ๊ทธ๋‹ˆ์ฒ˜์˜ ๋ชจ์Šต์ด์–ด์•ผ ํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ Value๋Š” get_value ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๋ฐ”์ดํŠธ( Vec<u8> ) ๋˜๋Š” ๋ฌธ์ž์—ด๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
pub fn next(&mut self) -> Box<dyn WriteableKey<Value = Vec<u8>>>;

๋”ฐ๋ผ์„œ ๋ฐ”์ดํŠธ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. StringKey์™€ BinaryKeys์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ set_value ๋ฐ get_value ๊ตฌํ˜„๋ฟ์ด๋ฏ€๋กœ ์ด ๋ณ€๊ฒฝ์œผ๋กœ ๋ช…์‹œ์„ฑ์ด ์ œ๊ฑฐ๋˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ํ‚ค๋งŒ ๋‹ค์‹œ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๋ฌธ์ œ๋Š” ํ˜„์žฌ ๊ตฌํ˜„์˜ KeySet์— ํฌํ•จ๋œ ํ‚ค์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์ด์ง€ ์•Š์ง€๋งŒ *ํ‚ค๋Š” ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ KeySet์˜ ์ธ์Šคํ„ด์Šค์— StringKey ๋˜๋Š” BinaryKey๋งŒ ํฌํ•จํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ํฐ ์ œํ•œ์ž…๋‹ˆ๋‹ค.
๋‚˜๋Š” Key์™€ KeySet ๋‘˜ ๋‹ค ๊ทธ๋“ค์ด ๋ฌด์—‡์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ์ „ํ˜€ ํฌํ•จํ•˜์ง€ ์•Š์•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด์ œ ๋‚˜๋จธ์ง€ elektra์™€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜ Key ๋ฐ KeySet์— ๊ธฐ๋Œ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒฌ์žˆ๋Š” ์‚ฌ๋žŒ?

์‚ฌ์šฉ์„ฑ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€ํ˜•์ด๋ฏ€๋กœ String์— ๋Œ€ํ•œ getter๊ฐ€ ์žˆ๋Š” Key๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ํ‚ค(next์— ์˜ํ•ด ๋ฐ˜ํ™˜๋จ)๊ฐ€ KeySet์˜ ์ผ๋ถ€๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์— ๋Œ€ํ•œ ์„ค์ •์ž๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ).

์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํ˜• ์‹œ์Šคํ…œ์€ ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ‚ค ์„ธํŠธ์— ์žˆ๋Š” ํ‚ค์˜ ํ‚ค ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ํ‚ค(๋˜๋Š” ๋‹ค๋ฅธ const ํ‚ค)๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ˜ผ๋ž€์Šค๋Ÿฌ์šด Key/KeySet ๋ณต์ œ ๋ฐ ์ฐธ์กฐ.
  4. ๋ฐ˜๋ณต์ด ๋” ์ด์ƒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ํ‚ค๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋˜๋Š” KeySet๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  5. Key/KeySet ํ•ด์ œ๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ

๋”ฐ๋ผ์„œ ์œ ํ˜• ์‹œ์Šคํ…œ์ด ๊ฑฐ๊ธฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 5. 1. ๋ฐ 2. ๋‹น์‹ ์˜ ์ถ”์ƒํ™”๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„์ƒ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ง„/๋ฌธ์ž์—ด ํ˜ผ๋™์€ ์‹ค์ œ๋กœ ๋‹ค์†Œ ๋“œ๋ฌธ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค(์ด์ง„ ํ‚ค๊ฐ€ ๋งค์šฐ ๋น„์ •ํ˜•์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ).

ใ…‹ API์˜ ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค(doc/decision).

์‚ฌ์šฉ์„ฑ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€ํ˜•์ด๋ฏ€๋กœ String์— ๋Œ€ํ•œ getter๊ฐ€ ์žˆ๋Š” Key๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๊ฐ€ โ€‹โ€‹์œ ํšจํ•œ UTF-8์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋” ์ด์ƒ ์œ ํ˜• ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

Rust์˜ AFAIK ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin์—๋Š” ๋งต์ด ํ‚ค์˜ ๊ฐ’ ์œ ํ˜•์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด API ์ฐธ์กฐ ๋ฅผ ํ†ตํ•ด ์—ฌ๊ธฐ๊ฐ€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋Œ€์•ˆ StringKeySet ๋งŒ์ด ์ˆ˜๋ฝํ•˜๋Š” StringKey ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‚ค๊ฐ€ ๋งค์šฐ ๋“œ๋ฌผ๊ณ  ์ฃผ๋กœ ๊ตฌ์„ฑ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—,์˜ ํž˜์˜ ๋ฉ”์ดํฌ์—… ๊ฐ๊ฐ.

์‚ฌ์šฉ์„ฑ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€ํ˜•์ด๋ฏ€๋กœ String์— ๋Œ€ํ•œ getter๊ฐ€ ์žˆ๋Š” Key๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ํ‚ค(next์— ์˜ํ•ด ๋ฐ˜ํ™˜๋จ)๊ฐ€ KeySet์˜ ์ผ๋ถ€๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์— ๋Œ€ํ•œ ์„ค์ •์ž๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‰ฝ๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ).

๊ทธ๋Ÿฌ๋‚˜ ๋“œ๋ฌผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ํ˜ผํ•ฉ ํ‚ค๊ฐ€ ์žˆ๋Š” KeySet์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ญ์ƒ StringKey๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  get_string ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ•ด๋‹น ์œ ํ˜•์—๋Š” get_binary ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ํ˜• ์‹œ์Šคํ…œ์€ ์ด๋ฅผ ํ—ˆ์šฉํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด์— ๋Œ€ํ•ด ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์ „์— KeySet์„ ์ผ๋ฐ˜ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด๋ถ€์— StringKeys๋งŒ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ KeySet<StringKey> ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(Rust์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” KeySet์˜ ๊ฒฝ์šฐ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ˜๋ณตํ•˜๋ฉด StringKey๋งŒ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ KeySet์ด ์œ ํ˜• ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋™์งˆ์ ์ž„์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ Rust ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ์œ ํ˜• ์‹œ์Šคํ…œ์€ ์ „๋ฐ˜์ ์œผ๋กœ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
๋“œ๋ฌธ ๊ฒฝ์šฐ์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‚ค๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” is_binary ๋ฐ is_string ๋กœ ํ™•์ธํ•œ ๋‹ค์Œ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์•ˆ์ „ํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค.

ํ˜ผ๋ž€์Šค๋Ÿฌ์šด Key/KeySet ๋ณต์ œ ๋ฐ ์ฐธ์กฐ.

๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ผ์€ ref count๋ณด๋‹ค ๋ณต์ œ์˜ ์‚ฌ์šฉ์„ ์ด‰์ง„ํ•˜๋Š” ๊ฒƒ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋” ๋‚˜์  ์ˆ˜ ์žˆ์ง€๋งŒ keyDel์€ Rust์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ฐ˜๋ฉด ref ์นด์šดํŒ…์€ ์™„์ „ํžˆ ์ˆ˜๋™์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณต์ œ๋Š” ์ฐธ์กฐ ๊ณ„์‚ฐ๋ณด๋‹ค ํ™•์‹คํžˆ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ณต์ด ๋” ์ด์ƒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ํ‚ค๋ฅผ ์ž˜๋ผ๋‚ด๋Š” ๋ฐ์—๋„ ์‚ฌ์šฉ๋˜๋Š” KeySet๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค์„ธํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋™์•ˆ ํ‚ค์„ธํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

ใ…‹ API์˜ ์•ˆ์ „ํ•œ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์„ค๊ณ„ ๊ฒฐ์ •์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค(doc/decision).

๊ทธ ๋‚ด์šฉ์€ ๋ฌด์—‡์ด์—ˆ์„๊นŒ์š”?

Rust์˜ AFAIK ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์ด๋“  ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ  ๊ตฌ์ฒด์ ์ธ ํ‚ค ์œ ํ˜•์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” KeySet์˜ "ํ˜„์žฌ" ๋””์ž์ธ์€ ์ ์–ด๋„ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งคํฌ๋กœ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๊ฐ€ โ€‹โ€‹์œ ํšจํ•œ UTF-8์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋” ์ด์ƒ ์œ ํ˜• ์•ˆ์ „ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

Elektra์˜ ๋ฌธ์ž์—ด์ด๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์€ UTF-8์ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Elektra๋Š” ๋ฌธ์ž์—ด๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ ์‚ฌ์ด์—์„œ๋งŒ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(0๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ).

Rust์˜ AFAIK ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin์—๋Š” ๋งต์ด ํ‚ค์˜ ๊ฐ’ ์œ ํ˜•์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ API ์ฐธ์กฐ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์— ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํ‚ค๋Š” ๋“œ๋ฌผ๋‹ค.

๋˜๋Š” ์ด์ง„ ํ‚ค๋Š” ๋งค์šฐ ๋“œ๋ฌผ๊ณ  ๋Œ€๋ถ€๋ถ„ ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— StringKeys๋งŒ ํ—ˆ์šฉํ•˜๋Š” StringKeySet์ด ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ StringKeySet์„ ์ผ๋ฐ˜ KeySet์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋“œ๋ฌผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ํ˜ผํ•ฉ ํ‚ค๊ฐ€ ์žˆ๋Š” KeySet์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ญ์ƒ StringKey๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  get_string์„ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ•ด๋‹น ์œ ํ˜•์— get_binary ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ํ˜• ์‹œ์Šคํ…œ์€ ์ด๋ฅผ ํ—ˆ์šฉํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์‚ฌ์†Œํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ฃผ์†Œ์™€ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ‚ค๋ฅผ ์บ์ŠคํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ด€๋ จ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ).

๊ทธ๋ ‡๊ฒŒํ•˜๊ธฐ ์ „์— KeySet์„ ์ผ๋ฐ˜ํ™”ํ•˜๊ณ  KeySet์œผ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด๋ถ€์— StringKeys๋งŒ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒฝ์šฐ(Rust์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” KeySet์˜ ๊ฒฝ์šฐ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ˜๋ณตํ•˜๋ฉด StringKey๋งŒ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์ด ๋‹น์—ฐํ•ฉ๋‹ˆ๋‹ค.

KeySet์€ KDB(์™ธ๋ถ€์ ์œผ๋กœ)์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์งœ ์•ˆ์ „์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” KeySet์ด ์ œ๋„ค๋ฆญ์ด ์•„๋‹Œ ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ œ๋„ค๋ฆญ์„ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์‹ถ๋‹ค๋ฉด KeySet์„ (์ผ๋ฐ˜) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” getter ๋ฐ setter๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด Elektra์˜ ์ •์ˆ˜ ๋ฐฐ์—ด์€ Vec<i32> ์ž…๋‹ˆ๋‹ค.

ํ‚ค์„ธํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋™์•ˆ ํ‚ค์„ธํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ cut ๋Š” KeySet์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋ณต์ž๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋‚ด์šฉ์€ ๋ฌด์—‡์ด์—ˆ์„๊นŒ์š”?

์—ฌ๊ธฐ์—์„œ ๋…ผ์˜ํ•œ ๋‚ด์šฉ๊ณผ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์š”์•ฝ์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์ด๋“  ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ณ  ๊ตฌ์ฒด์ ์ธ ํ‚ค ์œ ํ˜•์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” KeySet์˜ "ํ˜„์žฌ" ๋””์ž์ธ์€ ์ ์–ด๋„ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋งคํฌ๋กœ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‘์ง€ ๋งˆ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Elektra์˜ ๋ฌธ์ž์—ด์ด๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์€ UTF-8์ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋น ๋ฅธ ๊ฒ€์ƒ‰์— ๋”ฐ๋ผ String ๋Œ€์‹  OsString ๋˜๋Š” CString ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Elektra์˜ ๋ฌธ์ž์—ด์ด๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์€ UTF-8์ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋น ๋ฅธ ๊ฒ€์ƒ‰์— ๋”ฐ๋ผ String ๋Œ€์‹  OsString ๋˜๋Š” CString ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ €๋Š” Rust์˜ String (UTF-8)๋ฅผ elektra์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— CString ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ทผ๊ฑฐ๋Š” String ๊ฐ€ ๊ธฐ๋ณธ ๋ฌธ์ž์—ด์ด๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ธฐ๋ณธ ๋ฌธ์ž์—ด๋กœ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋Œ€์‹  String ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€ํ™˜ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋„๋ก ๊ณ ์ˆ˜์ค€ API๊ฐ€ CString ์š”์ฒญํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์–‡์€ API๋ฅผ ๋งŒ๋“ค๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋ฐฉ์‹์— ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ธ์–ด์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. UTF8์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์€ ๋“œ๋ฌผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ด๋„ˆ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฌ๊ท€ํ•  ์ˆ˜ ์žˆ์Œ).

์–ธ์–ด์˜ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. UTF8์ด ์•„๋‹Œ ๋ฌธ์ž์—ด์€ ๋“œ๋ฌผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ด๋„ˆ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฌ๊ท€ํ•  ์ˆ˜ ์žˆ์Œ).

๋‚˜๋Š” UTF-8์—์„œ C-string์œผ๋กœ ๊ฐ€๋Š” Rust -> C ๋ฐฉํ–ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. UTF-8 ๋ฌธ์ž์—ด์€ 0๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ‘œ์‹œ ๋˜๋Š” ์œ ์ผํ•œ ์ฝ”๋“œํฌ์ธํŠธ๋Š” NUL ๋ฌธ์ž์ด๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค . ๋ฌธ์ž์—ด์ด 0๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ”์ธ๋”ฉ ๋ฌธ์„œ์˜ ์ „์ œ ์กฐ๊ฑด์œผ๋กœ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ทธ ์ง€์ ์—์„œ ์ฝ”๋“œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ง‘ํ•ฉ ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋Š” ํ•ญ์ƒ ์ด NulError ํ•ด์•ผ ํ•˜๋ฉฐ ์‹ค์ œ๋กœ๋Š” ๋ฐ˜ํ™˜์กฐ์ฐจ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

keyNew ๋Š” ํ• ๋‹น ์˜ค๋ฅ˜ ์‹œ NULL ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Rust์—์„œ๋Š” ๋ช…์‹œ์  ์˜ค๋ฅ˜๋‚˜ ํŒจ๋‹‰์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•”์‹œ์  null์€ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ ํ˜ธ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ค‘๋‹จ ๋ฉ๋‹ˆ๋‹ค. Java ๋ฐ”์ธ๋”ฉ์€ ์ด ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ NullPointerException ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค๋„ ์ข…๋ฃŒ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ํŒจ๋‹‰ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ

๋ฌธ์ž์—ด์ด 0๋ฐ”์ดํŠธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ”์ธ๋”ฉ ๋ฌธ์„œ์˜ ์ „์ œ ์กฐ๊ฑด์œผ๋กœ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ทธ ์ง€์ ์—์„œ ์ฝ”๋“œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ํŒจ๋‹‰์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ(์ค‘๋‹จ์€ ์†Œ๋ฉธ์ž๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ)?

์˜ˆ, malloc์ด ์‹คํŒจํ•˜๋ฉด ๋‹นํ™ฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. (Rust์˜ ๊ฒฝ์šฐ stdlib๊ฐ€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. C์—์„œ๋Š” stdlib๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ C-Elektra๋„ ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ด์ œ Rust ๋ฐ”์ธ๋”ฉ์ด ๋งˆ์Šคํ„ฐ๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ crates.io์— ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋ฐ”์ธ๋”ฉ๊ณผ elektra ์ž์ฒด์˜ ์„ฑ์ˆ™๋„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— elektra์— ๋ฌถ์ด๋Š” ๋Œ€์‹  ๋ฒ„์ „์„ (๊ธฐ๋ณธ๊ฐ’) 0.1.0 ์„ค์ •ํ•˜์—ฌ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. @markus2330์— ๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ?

https://crates.io์— ๊ฒŒ์‹œํ•˜๋ ค๋ฉด GitHub ๊ณ„์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋ ˆ์ดํŠธ์˜ ์†Œ์œ ๊ถŒ์€ ๊ณ„์ • ๊ฐ„์— ์ด์ „๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ ๋‚ด ์†Œ์œ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋กœ๊ทธ์ธํ•˜์—ฌ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ API ํ† ํฐ์„ ๋‚˜์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

crates.io :sparkle์— ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Elektra ์ €์žฅ์†Œ์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „์„ Elektra์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. crates.io๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ๋ฒ„์ „ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์—์„œ ๊ณตํ†ต์ ์ธ ๊ฒƒ์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋กœ๊ทธ์ธํ•˜์—ฌ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ API ํ† ํฐ์„ ๋‚˜์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์ธ์ธ์ฆ์„œ ๋กœ๊ทธ์ธํ–ˆ์Šต๋‹ˆ๋‹ค. API ํ† ํฐ์„ ๋ณด๋‚ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Elektra ์ €์žฅ์†Œ์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „์„ Elektra์— ์ง์ ‘ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. crates.io๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ • ๋ฒ„์ „ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์—์„œ ๊ณตํ†ต์ ์ธ ๊ฒƒ์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” ์‹œ๋งจํ‹ฑ ๋ฒ„์ „ ๊ด€๋ฆฌ์— ๋”ฐ๋ฅด๋ฉด ๋ฐ”์ธ๋”ฉ์—์„œ ์ฃผ์š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทธ์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” elektra๊ฐ€ ํ•  ๋•Œ๋งŒ ์ฃผ์š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋งจํ‹ฑ ๋ฒ„์ „ ๊ด€๋ฆฌ์— ๋”ฐ๋ฅด๋ฉด ๋ฒ„์ „์ด 0 ์‹œ์ž‘ํ•˜๋Š” ํ•œ ๋ชจ๋“  ์ฃผ์š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Elektra 1.0 ์ถœ์‹œํ•˜๋ฉด ๋ฐ”์ธ๋”ฉ๋„ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐ ์‹คํŒจํ•˜๋”๋ผ๋„ ๋ฏธ๋ž˜์— ๋ฒ„์ „์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ์˜ต์…˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(๋‹จ์ˆœํžˆ Rust ๋ฐ”์ธ๋”ฉ์˜ ์ฃผ์š” ๋ฒ„์ „์„ ๋Š˜๋ฆฌ์‹ญ์‹œ์˜ค). ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ ๋‹จ์ˆœํžˆ Elektra์˜ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฉ”์ด์ € ๋ฒ„์ „์„ ๋Š˜๋ฆด ์ƒ๊ฐ์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ wrapper.h #include "kdb.h" ๋ฅผ ์ง€์ •ํ•˜์—ฌ kdb ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ clang์€ ํ—ค๋”๋ฅผ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ubuntu:18.10 ์—์„œ). ๋”ฐ๋ผ์„œ ๋นŒ๋“œํ•˜๋ ค๋ฉด /usr/include/elektra ๋ฅผ ํฌํ•จํ•˜๋„๋ก clang์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ์†”๋ฃจ์…˜์ด ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ํ•˜๋„๋ก elektra๋Š” ํ•ญ์ƒ /usr/include/elektra ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์†”๋ฃจ์…˜์ด ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ํ•˜๋„๋ก elektra๋Š” ํ•ญ์ƒ /usr/include/elektra์— ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, /usr/include/kdb.h ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Kerberos์—์„œ ์ƒ๊ฐํ•จ)๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ /usr/include/elektra ๊ฐ€ ํฌํ•จ ๊ฒฝ๋กœ์˜ ์ผ๋ถ€์—ฌ์•ผ ํ•˜์ง€๋งŒ AFAIK์—์„œ๋Š” #include <elektra/kdb.h> ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์ด ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ํ•˜๋„๋ก elektra๋Š” ํ•ญ์ƒ /usr/include/elektra์— ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ณธ์ ์œผ๋กœ /usr/local/include/elektra์ด์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์€ /usr/include/elektra๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์‹œ์Šคํ…œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ—ค๋” ํŒŒ์ผ์„ ์ฐพ๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. Elektra๋Š” cmake ๋ฐ pkg-config๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ•„์š”ํ•œ ์œ„์น˜์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ PR์€ #2880์ž…๋‹ˆ๋‹ค.

#include <elektra/kdb.h> ๋ณ€๊ฒฝํ•˜๋ฉด Ubuntu์—์„œ ํ™•์‹คํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด /usr/include/elektra ๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€์‹  ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

#include <elektra/kdb.h> ๋ณ€๊ฒฝํ•˜๋ฉด Ubuntu์—์„œ ํ™•์‹คํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด /usr/include/elektra ๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€์‹  ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ—ค๋”์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ถ€๋Š” ํฌํ•จ ๊ฒฝ๋กœ์— ์žˆ๋Š” /usr/include/elektra ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ) pkg-config ๋˜๋Š” cmake --find-package ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Elektra ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(IMO cmake ๊ฐ€ ๋” ์ž˜ ์ž‘๋™ํ•จ).

์ด๊ฒƒ์ด ํ•„์š”ํ•œ ์œ„์น˜์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์ปดํ“จํ„ฐ์—์„œ elektra๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ๋…น/ํ™”๋ฌผ๋งŒ ํ•„์š”ํ•˜๊ณ  ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ crates.io๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํ†ตํ•ด elektra(๋ฐ ํ—ค๋”)๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‚ฌ์šฉ์ž๋Š” ์ข…์† ํ•ญ๋ชฉ์— elektra๋ฅผ ํฌํ•จํ•˜๊ณ  ํ™”๋ฌผ์€ elektra-sys ์ƒ์ž๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์™€ clang์—๋งŒ ์˜์กดํ•˜์—ฌ ๋ฐ”์ธ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ clang์€ ์–ด๋–ป๊ฒŒ๋“  kdb.h ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ถ”๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ํฌํ•จ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ #include ... ๋ฌธ์„ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ) pkg-config ๋˜๋Š” cmake --find-package ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Elektra ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(IMO cmake ๊ฐ€ ๋” ์ž˜ ์ž‘๋™ํ•จ).

๋นŒ๋“œ ์ข…์†์„ฑ์œผ๋กœ pkg-config ๋˜๋Š” cmake๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ด ๋ฐฉ๋ฒ•์œผ๋กœ kdb.h ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ pkg-config๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pkg-config๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ /usr/include/elektra ๋ฐ /usr/local/include/elektra์™€ ๊ฐ™์€ ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (crates.io์—์„œ pkg-config๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ)

์ด ์ƒ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ pkg-config๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pkg-config๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ /usr/include/elektra ๋ฐ /usr/local/include/elektra์™€ ๊ฐ™์€ ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (crates.io์—์„œ pkg-config๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ)

์„ ํƒ์  ์ข…์†์„ฑ์œผ๋กœ pkg-config ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋˜๋ฉด elektra๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ œ๊ณต๋œ includedir๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด๋ฆ„์„ ์ง€์ •ํ•œ ๋‘ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฐ”์ธ๋”ฉ์ด ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. elektra ๋ฐ elektra-sys :smiley:

docs.rs ๋นŒ๋“œ ํ™˜๊ฒฝ์—์„œ libelektra์˜ ๋ˆ„๋ฝ๋œ ์‹œ์Šคํ…œ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•ด ๋ฌธ์„œ๊ฐ€ ๋นŒ๋“œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 9์›” 30์ผ์— ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
9์›” 30์ผ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋นŒ๋“œ๋˜๋„๋ก libelektra๋ฅผ ์ข…์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•ด ๋‹ฌ๋ผ๋Š” ์š”์ฒญ ์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋˜ํ•œ ๊ธฐ์กด ํ™˜๊ฒฝ์— ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด์ œ ๋ฌธ์„œ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.+1:

#2980์ด ๋ณ‘ํ•ฉ๋œ ํ›„์— ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งค์šฐ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๊ฝค ์˜ค๋ž˜๋œ ๋ช…์˜ˆํ›ผ์†์œผ๋กœ ๊ทธ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋ ๊นŒ์š”? (์–ด๋–ค ๋ฒ„์ „์ธ์ง€๋Š” ํ™•์ธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์—์„œ ํฌํ•จ์‹œํ‚ค๋ฉด ํ™•์‹คํžˆ 0.9 ์ด์ƒ ๋ฒ„์ „์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

elektra ์ƒ์ž๋Š” ๋ฌธ์„œ์ผ ๋ฟ์ด๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. elektra-sys ํ˜„์žฌ ๋ฒ„์ „ ๋Œ€์‹  ์ƒ์„ฑ๋œ elektra์˜ ๋ชจ๋“  ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ž˜ํผ ๋Œ€์‹  ์›์‹œ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋˜๋„๋ก ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์ ˆ์ถฉ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ €์žฅ์†Œ ๋‚ด ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์–ด์จŒ๋“  elektra-sys๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Elektra์™€ ๊ด€๋ จ์ด ๊ฑฐ์˜ ์—†๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ธฐํ˜ธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

https://docs.rs/elektra-sys/0.9.0/elektra_sys/fn.keyString.html

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ €์žฅ์†Œ ๋‚ด ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ๊ธฐ์กด PR์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  elektra-sys๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Elektra์™€ ๊ด€๋ จ์ด ๊ฑฐ์˜ ์—†๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ธฐํ˜ธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

-sys ํฌ๋ ˆ์ดํŠธ์—๋Š” ๋ฌธ์„œ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค(์˜ˆ: openssl-sys ). C์— ์ƒ์‘ํ•˜๋Š” ์ผ๋Œ€์ผ ๋ฒˆ์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ C ๋ฌธ์„œ๋ฅผ ์ง์ ‘ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ์†์œผ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋˜ ๋‹ค๋ฅธ ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ๊ฐ€์ค‘๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ธฐ๋ณธ ๋ฌธ์„œ ํŽ˜์ด์ง€์—์„œ https://doc.libelektra.org/api/current/html/index.html ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  elektra-sys๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Elektra์™€ ๊ด€๋ จ์ด ๊ฑฐ์˜ ์—†๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๊ธฐํ˜ธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•  ๊ฒƒ์ด๋‹ค.

#2980์—์„œ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์Œ์— ํฌ๋ ˆ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ docs.rs์—์„œ ์ˆ˜์ •๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๊ธฐ๋ณธ ๋ฌธ์„œ ํŽ˜์ด์ง€์—์„œ https://doc.libelektra.org/api/current/html/index.html ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

markus2330 picture markus2330  ยท  4์ฝ”๋ฉ˜ํŠธ

mpranj picture mpranj  ยท  3์ฝ”๋ฉ˜ํŠธ

markus2330 picture markus2330  ยท  3์ฝ”๋ฉ˜ํŠธ

mpranj picture mpranj  ยท  3์ฝ”๋ฉ˜ํŠธ

markus2330 picture markus2330  ยท  4์ฝ”๋ฉ˜ํŠธ