๋๋ต 7์ ์ค์๋ถํฐ Elektra์ฉ Rust ๋ฐ์ธ๋ฉ์ ๊ตฌํํ๊ณ ์ถ์ต๋๋ค.
๋ด ์๊ฐ์ Rust-bindgen ์ ๋ฐ์ธ๋ฉ์ (์ผ๋ถ ๋๋ ์ ์ฒด) ์๋์ผ๋ก ์์ฑํ ์ ์์ด์ผ ํฉ๋๋ค. ๋๋ ์ฌ์ ํ ๊ทธ๊ฒ๋ค์ด ์ ๋๋ก ์๋ํ๋๋ก ํ๊ธฐ ์ํด ๊ฝค ๋ง์ ์๋ ์์
์ด ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋ด ํ์ฌ ์ดํด์ @kodebach ์ ์๊ฒฌ์ ๋ฐ๋ฅด๋ฉด elektra-sys
์์๊ฐ ์์ฑ๋ฉ๋๋ค.
์ผ๋จ ์๋ํ๋ฉด ์์ ํ์ง ์์ ์ฝ๋๋ฅผ ํธ์ถํ ํ์ ์์ด ์ผ๋ฐ Rust์์ ์ฌ์ฉํ ์ ์๋๋ก ์์ ํ API๋ฅผ Rust์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด elektra
์์๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ํ๋ฌผ ํ
์คํธ๋ก ํ
์คํธํ์ฌ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํฉ๋๋ค.
ํฌ๋ ์ดํธ๋ฅผ ๋ฌธ์ํํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์ ์ฝ๋์ ์ฃผ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค . docs.rs ๋ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ๋น๋ํ๊ณ ๊ณต๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฏ๋ก ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ฌธ์ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
crates.io ์ ํฌ๋ ์ดํธ๋ฅผ ๊ฒ์ํ๋ ค๋ฉด API ํ ํฐ ์ด ์๋ @markus2330 ์์ ๋ ผ์ํ ๋ฐ์ ๊ฐ์ด ์ด ๊ณ์ ์ ElektraInitiative์ ์ผ๋ถ์ฌ์ผ ํฅํ ์ ์ง ๊ด๋ฆฌ์๊ฐ ์ก์ธ์คํ ์ ์์ต๋๋ค.
์ง๊ธ์ CMake์ ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ ์์ ์ CMake ํตํฉ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ถ๊ฐํด์ผ ํ ๋ค๋ฅธ ๊ฒ์ด ์์ต๋๊น?
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์ ์ผ๋ถ๋ผ๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ ๋ํ ์ค์ ์๋ ๋นํ์ฑํ๋์ด์ผ ํฉ๋๋ค(์ฝ๊ฒ ๊ฐ๋ฅํ ๊ฒฝ์ฐ).
์ผ๋ฐ์ ์ผ๋ก ์ ํ ์์คํ ์ ๋ฐฉํด๊ฐ ๋์ง ์๊ณ ์ฌ์ฉ์๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฅํ ํ ๊ฐ๋จํ๊ฒ ์ ์งํ์ญ์์ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ ํ ์์คํ ์ด ๊ฑฐ๊ธฐ์ ๋์์ด ๋ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. 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 ํ์ผ์ ์ฐพ๋ ๊ฒ์ ๋๋ค(IMOcmake
๊ฐ ๋ ์ ์๋ํจ).
๋น๋ ์ข
์์ฑ์ผ๋ก 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 ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
์, ์ข์ ์๊ฐ์ ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ชจ๋ ๋น๋์์ ์ฌ์์ฑ์ด ์ ์ ํ ์๋ฃจ์ ์ธ ๊ฒ ๊ฐ์ผ๋ฉฐ ๋ค๋ฅธ ๋ฐ์ธ๋ฉ๋ ๊ทธ๋ ๊ฒ ์๋ํฉ๋๋ค(swig๋ฅผ ์ค์นํด์ผ ํจ). ์ค๋ช ํ๋ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์์ฑ๋ ํค๋ ํ์ผ์ ๊ฐ๋จํ ์ค์นํ ์ ์์ต๋๋ค.