๋นŒ๋“œ ๊ทœ์น™

์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œ ์‹œ์Šคํ…œ(Soong)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ํ†ตํ•ด ๋Ÿฌ์ŠคํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

Module TypeDescription
rust_binary๋Ÿฌ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_library๋Ÿฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(rlibํ˜น์€ dylib)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_fficc ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” C library (์ •์  ํ˜น์€ ๋™์ )๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_proc_macroproc-macro๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋Ÿฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ƒ๊ฐํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค.
rust_testํ‘œ์ค€ ๋Ÿฌ์ŠคํŠธ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_fuzzlibfuzzer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ fuzz ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_protobufํ”„๋กœํ† ๋ฒ„ํ”„(protobuf) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋Ÿฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
rust_bindgenC ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋Ÿฌ์ŠคํŠธ ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ณตํ•˜๋Š” ๋Ÿฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ rust_binary์™€ rust_library๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

๋ฐœํ‘œ์ž๊ฐ€ ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ํ•ญ๋ชฉ:

  • Cargo๋Š” ๋‹ค๊ตญ์–ด ์ €์žฅ์†Œ์— ์ตœ์ ํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์ธํ„ฐ๋„ท์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  • Android์—์„œ๋Š” ๊ทœ์ •์ƒ, ๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œ ์†๋„๋ฅผ ์œ„ํ•ด, ํฌ๋ ˆ์ดํŠธ๋“ค์ด Android ์†Œ์Šค์ฝ”๋“œ ํŠธ๋ฆฌ ์•ˆ์— ๋ฏธ๋ฆฌ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ C/C++/Java ์ฝ”๋“œ์™€ ์ƒํ˜ธ ์šด์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Android ๋นŒ๋“œ ์‹œ์Šคํ…œ์ธ Soong์ด ์ด ๊ณต๋ฐฑ์„ ๋ฉ”์›๋‹ˆ๋‹ค.

  • Soong์€ Blaze(google3์—์„œ ์‚ฌ์šฉ๋จ)์˜ ์˜คํ”ˆ์†Œ์Šค ๋ณ€ํ˜•์ธ Bazel๊ณผ ๋งŽ์ด ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

  • Android, ChromeOS, Fuchsia๋ฅผ Bazel๋กœ ์ „ํ™˜ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

  • Bazel๊ณผ ์œ ์‚ฌํ•œ ๋นŒ๋“œ ๊ทœ์น™์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€ ๋ชจ๋“  Rust OS ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์žฌ๋ฏธ์žˆ๋Š” ์‚ฌ์‹ค: ์Šคํƒ€ํŠธ๋ ‰์˜ ์บ๋ฆญํ„ฐ ์ค‘ ํ•œ๋ช…์ธ ๋ฐ์ดํ„ฐ(Data)๋Š” ์‚ฌ์‹ค Soong ํƒ€์ž…์˜ ์•ˆ๋“œ๋กœ์ด๋“œ(Android)์ž…๋‹ˆ๋‹ค.