Rust: RFC: avr-rust ํฌํฌ ์—…์ŠคํŠธ๋ฆผ ๋ณ‘ํ•ฉ

์— ๋งŒ๋“  2017๋…„ 08์›” 23์ผ  ยท  89์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”,

avr-rust ํฌํฌ๋ฅผ Rust๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜๊ฒฌ์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํฌํฌ ์ž์ฒด๋Š” ์ตœ๊ทผ ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋ฒ„๊ทธ๊ฐ€ ์ค„์–ด๋“ค๋ฉด์„œ ํ›จ์”ฌ ๋” ์•ˆ์ •์ ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ๋Œ์–ด๋“ค์ด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

GitHub ์—์„œ avr-rust๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐจ๋‹จ๊ธฐ

LLVM 5.0

~Rust๋Š” ํ˜„์žฌ ์ž‘๋™ํ•˜๋Š” AVR ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ๋œ LLVM 4.0์— ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„๋กœ ๋งŽ์€ ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋œ AVR ๋ฐฑ์—”๋“œ ๋ฒ„์ „์„ ์–ป๊ธฐ ์ „์— LLVM 5.0์ด ์ง€์›๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ฑฐ์˜ ์™„๋ฃŒ: #43370).

์ด๊ฒƒ์€ ๋” ์ด์ƒ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Upstream Rust๋Š” 2018๋…„ 2์›” 20์ผ ํ˜„์žฌ LLVM 6.0์— ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ

์ฒด๋ฆฌ ๋”ฐ๊ธฐ ์ˆ˜์ •

AVR ์ง€์›์ด ๋ฉ”์ธ๋ผ์ธ์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด Rust์˜ LLVM ํฌํฌ์— ํŒจ์น˜๋ฅผ ์„ ๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋งŽ์€ ์ค‘์š”ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์„ ํƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

avr-rust ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์„ ๋ณ„๋œ ๋ชจ๋“  ๋ฒ„๊ทธ ์ˆ˜์ •์€ ์ด๋ฏธ LLVM ํŠธ๋ ํฌ๋กœ ์—…์ŠคํŠธ๋ฆผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํŠธ๋ ํฌ์—์„œ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๋ฐœ์‚ฐํ•˜๋Š” LLVM ํฌํฌ์˜ ํŒฌ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฌํฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ฉด ๊ณ„์† ๊ทธ๋Ÿด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

LLVM์˜ 6๊ฐœ์›” ์ถœ์‹œ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ฒด๋ฆฌ ํ”ผํ‚น์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

AVR ๋ฐฑ์—”๋“œ์˜ ํ˜„์žฌ ๋ฌธ์ œ

avr-rust/rust ์ €์žฅ์†Œ์—๋Š” ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•Œ๋ ค์ง„ ๋ชจ๋“  ๋ฒ„๊ทธ๋Š” AVR LLVM ๋ฐฑ์—”๋“œ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋” ํฅ๋ฏธ๋กญ๊ณ  ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

libcore ๋Š” ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

libcore ๋ฅผ ์ˆ˜์ • ์—†์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒ„๊ทธ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •๋œ ์ด์ •ํ‘œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉ์ž๋ฅผ์œ„ํ•œ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค xargo์ด ํˆฌ๋ช…ํ•˜๊ฒŒ ์ปดํŒŒ์ผ libcore ํ•„์š”๋กœ ํ•  ๋•Œ ์ฆ‰์‹œ, ์šฐ๋ฆฌ๋Š”์— libcore ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค Xargo.toml .

Rust ํŒ€์ด ์Šคํ†ก libcore๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์ƒ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ 'ํ˜ธ์ถœ' ์•ก์„ธ์Šค RAM ์ด์™ธ์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ž‘์—…(avr-rust/rust#68)

์ด๊ฒƒ์€ AVR์ด Harvard ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ์ตœ์ดˆ์˜ ์ธํŠธ๋ฆฌ LLVM ๋ฐฑ์—”๋“œ์ธ ์ฆ์ƒ์ž…๋‹ˆ๋‹ค. LLVM์€ ํ˜„์žฌ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด RAM์— ํ•ด๋‹นํ•˜๋Š” "์ผ๋ฐ˜ ์ฃผ์†Œ ๊ณต๊ฐ„"์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋กœ๋“œ/์ €์žฅ์„ ์‹œ๋„ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์‹  RAM์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—…์ŠคํŠธ๋ฆผ LLVM ํŒจ์น˜๊ฐ€ ๋ณด๋ฅ˜ ์ค‘์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( D37052 , D37053 , D37054 , D37057 ).

32๋น„ํŠธ ์‹œํ”„ํŠธ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” compiler-rt ๋ฃจํ‹ด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(avr-llvm/llvm#163).

๊ธฐ๋ณธ์ ์œผ๋กœ 32๋น„ํŠธ ์‹œํ”„ํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋Œ€์ƒ์ด ๋งŽ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— libgcc ๋ฐ compiler-rt ์—๋Š” LLVM์ด ์—ฌ์ „ํžˆ 32๋น„ํŠธ ๋ฒ„์ „์˜ ์‹œํ”„ํŠธ ๋ฃจํ‹ด์ด ์—†์Šต๋‹ˆ๋‹ค. ํ–‰๋ณตํ•˜๊ฒŒ ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งํฌํ•˜๋Š” ๋™์•ˆ ์ •์˜๋˜์ง€ ์•Š์€ ๊ธฐํ˜ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ง์ปค๊ฐ€ ๋ชจ๋“  ๋ฐ๋“œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐ ์ƒ๋‹นํžˆ ๋Šฅ์ˆ™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ 32๋น„ํŠธ ์‹œํ”„ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ ์ปดํŒŒ์ผํ•˜์—ฌ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๋ฝ๋œ ์‹œํ”„ํŠธ ๋ฒ„๊ทธ๋ฅผ ์ณ์„œ โ€‹โ€‹"์ตœ์ ํ™”"๋กœ ์‹œํ”„ํŠธ๋กœ์˜ ๊ณฑ์…ˆ์„ ์Šน๊ฒฉ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

๋ณ‘ํ•ฉํ•  ์‹ค์ œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

์ด diff ๋ฅผ ๋ณด๋ฉด ๋ชจ๋“  AVR ๊ด€๋ จ ์ฐจ์ด์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด diff์˜ ์ ˆ๋ฐ˜ ์ด์ƒ์ด README ๋ฐ Travis CI ๊ตฌ์„ฑ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ๋˜๋Š” ์‹ค์ œ ์ฝ”๋“œ๋Š” ๋งค์šฐ ์ž‘์Šต๋‹ˆ๋‹ค. AVR ๋ฐฑ์—”๋“œ ๋ฐ ๋Œ€์ƒ ์‚ฌ์–‘์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธ€๋ฃจ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์ด diff๋Š” ๋˜ํ•œ AVR์— ๋Œ€ํ•ด libcore ์ผ๋ถ€๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ์—…์ŠคํŠธ๋ฆผ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค์šด์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ์ž๊ฐ€ Xargo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AVR์— ๋Œ€ํ•ด ์ถ•์†Œ๋œ libcore ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—„๊ฒฉํ•˜๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ

Gitter์˜ AVR-Rust
GitHub์˜ AVR-Rust

C-feature-request O-AVR T-core WG-embedded

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

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

AVR์— ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจ์น˜ ๋Š” ์˜ค๋Š˜์˜ nighty rustc 1.47.0-nightly (0820e54a8 2020-07-23) ํ˜„์žฌ Rust nightly ์ปดํŒŒ์ผ๋Ÿฌ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค . Rust ์•ผ๊ฐ„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ˆ˜์ • ์—†์ด ์ด์ œ LED ๊นœ๋ฐ•์ž„ ์˜ˆ์ œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  AVR ELF ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • https://avr-rust.com/ ์—์„œ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ์ค‘์•™ ์ง‘์ค‘์‹ ํ”„๋กœ์ ํŠธ ๋žœ๋”ฉ ํŽ˜์ด์ง€
  • ์ƒˆ ์ฑ… - AVR-Rust ๊ฐ€์ด๋“œ๋ถ ์ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ book.avr-rust.com์˜ GitHub ํŽ˜์ด์ง€์—์„œ ํ˜ธ์ŠคํŒ…๋ฉ๋‹ˆ๋‹ค.
  • avr-rust/rust ํฌํฌ ์ €์žฅ์†Œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜๊ตฌ์ ์œผ๋กœ ์ž ๊ฒจ ๋‹ซํžˆ๊ธฐ ์ „์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์กด ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์•„์ง ๋ณด๊ด€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • Xargo๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ์—…์ŠคํŠธ๋ฆผ Rust์˜ -Z build-std ํ”Œ๋ž˜๊ทธ๊ฐ€ AVR์—์„œ Xargo์˜ ํ•„์š”์„ฑ์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ํ™”๋ฌผ ํฌํฌ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ๋ฅ˜ ํ™”๋ฌผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Rust nightly ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด์ œ AVR์„ ์ง€์›ํ•˜๋Š” Rust์˜ ๊ถŒ์žฅ ์ฑ„๋„๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๊ฐ€ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค!

๋ฒ„๊ทธ ๋ณด๊ณ  ๋‹จ๊ณ„๋Š” AVR ๊ฐ€์ด๋“œ๋ถ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AVR ๊ฐ€์ด๋“œ๋ถ ๊ณผ https://github.com/avr-rust/blink ์˜ ๊นœ๋ฐ•์ž„ ์˜ˆ์ œ๋Š” ๋Œ€์ƒ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

์ด ์—…์ŠคํŠธ๋ฆผ ๋…ธ๋ ฅ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋…ผ์˜ํ•˜๊ณ  ์ง€์›ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊นŠ์ด ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๋Š๋Ÿฌ๋ฏธ

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

+1! ์ ์ ˆํ•œ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋‚ด์žฅ๋œ Avr ๋…น์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋ฒ„๊ทธ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๊ฐ€ ์™„์ „ํžˆ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. :)

๋ฐฑ์—”๋“œ wrt ๋ฒ„๊ทธ์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์„ค๋ช…์„ ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๐Ÿ˜„. ์ปคํ”Œ๋งŒ ๊ฐ€์ž

์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์œ ์ง€ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ์ฃผ์ง€ ์•Š๋Š” ํ•œ Rust-lang/rust์˜ ์—…์ŠคํŠธ๋ฆผ ํ”Œ๋žซํผ์„ ๋งค์šฐ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋‹น์‹ ์ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ์ƒ๊ฐ:

  • LLVM ์ปค๋ฐ‹์„ ์ž์ฃผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ ์ด๋ฏธ ๋ช‡ ๋ฒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณค์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)
  • ์ปดํŒŒ์ผ๋Ÿฌ rt์— ๋‚ด์žฅ ํ•จ์ˆ˜๊ฐ€ ์—†์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ ๋‚ด์žฅ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด Rust์—์„œ๋„ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹น์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒจ์น˜๋Š” ๊ฝค ์ข‹์•„ ๋ณด์ด์ง€๋งŒ libcore์˜ ๋‹ค์–‘ํ•œ #[cfg] ๋ฅผ ํ†ตํ•ด ๋” ๋งŽ์€ ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์€ "LLVM์˜ ๋ฒ„๊ทธ"๋กœ ์ธํ•ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ AVR์—์„œ ๊ทผ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๋ฝ๋œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ์ „์ž๋Š” ์–ด๋–ป๊ฒŒ๋“  "LLVM์„ ์ˆ˜์ •"ํ•˜์—ฌ ๊ฐ€์žฅ ์ž˜ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐ˜๋ฉด ํ›„์ž๋Š” ์ผ์„ ๋” ๊นŒ๋‹ค๋กญ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” libcore/libstd์˜ ๋™์ผํ•œ ๊ท ์ผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ํ”Œ๋žซํผ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ณ„์†ํ•ด์„œ ๋” ๋งŽ์€ ํ”Œ๋žซํผ์„ ์„ ํƒํ•จ์— ๋”ฐ๋ผ ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ธ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒจ์น˜๋Š” ๊ฝค ์ข‹์•„ ๋ณด์ด์ง€๋งŒ libcore์˜ ๋‹ค์–‘ํ•œ #[cfg]๋ฅผ ํ†ตํ•ด ๋” ๋งŽ์€ ์ž‘์—…์„ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์€ "LLVM์˜ ๋ฒ„๊ทธ"๋กœ ์ธํ•ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ AVR์—์„œ ๊ทผ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๋ฝ๋œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

LLVM์˜ ๋ฒ„๊ทธ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ์œ ์ผํ•œ ์งˆ๋ฌธ์€ i128 / u128 ์œ ํ˜•์˜ ์ง€์›์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. AVR์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์œ ํ˜•์ด ์‹ค์ œ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. i128 ์—์„œ ์ง€์› libcore ํ˜„์žฌ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์ฃผ์„ ๋งŒ์ด ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฒฝ๋กœํ•˜์ง€ ์•Š๊ณ , ์ •๋ง AVR๊ณผ ๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น์„ ํ–‰์‚ฌ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋งŒ 32๋ฐ”์ดํŠธ ๊ฐ€์น˜์˜ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

AVR์—์„œ i128 ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋†’์ง€๋งŒ ๋ฐฑ์—”๋“œ์—์„œ ์œ ๋ฐœํ•˜๋Š” ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ libcore๊ฐ€ ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผ๋˜๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ์ˆ˜์ • ์—†์ด ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ libcore๊ฐ€ ์ˆ˜์ • ์—†์ด ๋˜๋Š” ์ตœ์†Œํ•œ ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผ๋˜๋ฉด ์‹ค์ œ๋กœ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฐ๋‹ค!

๋‚ด ์ƒ๊ฐ์— ์œ ์ผํ•œ ์งˆ๋ฌธ์€ i128/u128 ์œ ํ˜•์˜ ์ง€์›์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. AVR์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์œ ํ˜•์ด ์‹ค์ œ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

AVR์—์„œ i128 ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ฃผ๋œ ๋‘๋ ค์›€์€ AVR ๋˜๋Š” ๊ธฐํƒ€ ์ž„๋ฒ ๋””๋“œ ํ”Œ๋žซํผ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด 128๋น„ํŠธ ์ •์ˆ˜ ์ฑ„ํƒ์— ๋ƒ‰๊ฐ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 128๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” AVR ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ ์ค‘๋‹จ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 128๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์ด์‹์„ฑ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” Rust ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— "์•ˆ์ „ํ•˜์ง€" ์•Š๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AVR ๋˜๋Š” ๊ธฐํƒ€ ์ž„๋ฒ ๋””๋“œ ํ”Œ๋žซํผ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด 128๋น„ํŠธ ์ •์ˆ˜ ์ฑ„ํƒ ์‹œ ๋ƒ‰๊ฐ ํšจ๊ณผ

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์—ฌ๊ธฐ์—์„œ ๋”์ฐํ•˜๊ฒŒ ํฐ ๊ฑฐ๋ž˜๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์†Œํ˜• ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜์—๋Š” ์ด๋ฏธ ๊ฑฐ๋Œ€ํ•œ ์ œํ•œ ์‚ฌํ•ญ(stdin/stdout ์—†์Œ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ• ๋‹น์ž ์—†์Œ ๋“ฑ)์ด ์žˆ์–ด ์ž„์˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋†“๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— AVR GCC์˜ double ๊ฐ€ ์‹ค์ œ๋กœ float ์˜ ๋ณ„์นญ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๊ธฐ์ดํ•จ์„ ์œ ์ง€ํ•  ๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ i128 ๋ณด๋‹ค ๋” ํฐ ์ƒ์ž์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ no-std์—์„œ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ž„๋ฒ ๋””๋“œ์— ์ ํ•ฉํ•œ ํฌ๋ ˆ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ํ•ญ์ƒ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

stdin / stdout ์—†์Œ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ• ๋‹น์ž ์—†์Œ ๋“ฑ

#![no_std] ์ƒํƒœ๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ƒํƒœ๊ณ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒํƒœ๊ณ„์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์€ i128 ๋„ ํฌํ•จํ•˜๋Š” libcore ๋ฅผ ์ฃผ์–ด์ง„ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. i128 ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฐ ๋Œ€์ƒ์€ x86 ์ œํ’ˆ๊ตฐ์ด ๊ทธ๋‹ค์ง€ ๊ด€๋ จ์„ฑ์ด ์—†๋Š” ์ „์ฒด Rust ์ƒํƒœ๊ณ„์˜ ํ•˜์œ„ ์ง‘ํ•ฉ ๋‚ด์—์„œ ์ž„๋ฒ ๋””๋“œ ๋Œ€์ƒ์˜ "์‹œ์žฅ ์ ์œ ์œจ"์ด ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ๋” ํฐ ๋ƒ‰๊ฐ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. .

์šฐ๋ฆฌ๊ฐ€ ๊ทธ ์ด์ƒํ•จ์„ ์œ ์ง€ํ•  ๊ฒƒ์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ i128๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฌ๋ ˆ์ดํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด! f64 ๋ณ„์นญ์„ f32 ํ•˜๊ฑฐ๋‚˜ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒํƒœ๊ณ„์— ๋” ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์™œ ํ•˜์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? i128 ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

i128์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก , AVR์šฉ์œผ๋กœ i128์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Œ์„ ์‹ค์ œ๋กœ i128 ๋ฅผ ์‚ฌ์šฉ ํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋Š” ๊ณ ํ†ต์˜ ์„ธ๊ณ„์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์™œ ํ•˜์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ฌด์—‡ ๊ณผ์˜ ์ผ๊ด€์„ฑ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. GCC( f64 == f32 ) ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  Rust ํƒ€๊ฒŸ( f64 != f32 )๊ณผ์˜ ์ผ๊ด€์„ฑ?

#![no_std] ์ƒํƒœ๊ณ„๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ "no-std์—์„œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด์žฅํ˜•์— ์ ํ•ฉํ•œ ํฌ๋ ˆ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ˆ˜ ๊ธฐ๋Šฅ"์ด๋ผ๊ณ  ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‡

์šฐ๋ฆฌ๊ฐ€ 16๋น„ํŠธ usize ํŒจ์น˜๋ฅผ ์ฒ˜์Œ ์ถœ์‹œํ•œ ์ดํ›„๋กœ ์ œ ๋งˆ์Œ ์†์— ์žˆ๋˜ ๋” ํฐ ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Rust์™€ Rust ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ usize ๊ฐ€ "๋„ค์ดํ‹ฐ๋ธŒ"๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ์˜ ํฌ๊ธฐ. AFAIK, ์ด๊ฒƒ์€ Rust๊ฐ€ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ํ”Œ๋žซํผ์— ํ•ด๋‹น๋˜์ง€๋งŒ AVR์—๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡๊ณผ์˜ ์ผ๊ด€์„ฑ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. GCC(f64 == f32) ๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  Rust ํƒ€๊ฒŸ(f64 != f32)๊ณผ์˜ ์ผ๊ด€์„ฑ?

f64 ๋ผ๋Š” ์ด๋ฆ„

์—ฌ๊ธฐ์„œ ์ข‹์€ ์ ์€ 128๋น„ํŠธ ์ •์ˆ˜์— ๋Œ€ํ•œ ์šฐ๋ ค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ด์„œ๋Š” ์•ˆ ๋˜์ง€๋งŒ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. i128 ์œ ํ˜•์— ๋Œ€ํ•œ ํŠน์„ฑ impls์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์ƒ์ž๋ฅผ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” i128 ํ•ญ๋ชฉ์€ ๋ชจ๋‘ ๋ง์ปค์—์„œ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

f32/64 ๋ฌธ์ œ๋Š” ํฅ๋ฏธ๋กœ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. f64๋ฅผ ์‹ค์ œ๋กœ 64๋น„ํŠธ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๋Š” C FFI๊ฐ€ ๋งค์šฐ ๋ถ€์„œ์ง€๊ธฐ ์‰ฝ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ AVR-GCC๊ฐ€ 32๋น„ํŠธ ๋”๋ธ”์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ FFI๋ฅผ ํ†ตํ•œ ํ˜ธ์ถœ์€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ์„ธ๊ทธํดํŠธ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€์‹  libc ํฌ๋ ˆ์ดํŠธ์˜ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•จ์œผ๋กœ์จ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋Š ์ •๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. c_double ๋ฅผ f32 ๋กœ ์„ค์ •ํ•˜๋Š” AVR ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด FFI ๋ฐ”์ธ๋”ฉ์— libc ํฌ๋ ˆ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘ํ•ฉ์„ ์œ„ํ•ด ๊ธฐ์–ตํ•ด์•ผ ํ•  ์‚ฌํ•ญ์€ main() ์„œ๋ช…์— ์‚ฌ์šฉ๋œ c_int ์œ ํ˜•์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/rust-lang/rust/pull/44906#discussion_r141843808

ํŽธ์ง‘: MSP430์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/rust-lang/rust/issues/44934

main() ์„œ๋ช…์— ์‚ฌ์šฉ

@mattico ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ์ด์ƒํ•œ ๋ฐฉ์‹์œผ๋กœ ์ผ์„ ๋‚ด ์ฝ”๋“œ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ Rust์˜ main ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค .

#[no_mangle]
pub extern fn main() {

๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€, ์šฐ๋ฆฌ๊ฐ€ ์ •๋ง ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์˜์›ํžˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@mattico ์œ ํ˜•์ด AVR์šฉ GCC์™€ ์ผ์น˜ํ•˜๋„๋ก libc๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„, ๋ฌผ๋ก  main ์ด ์šฐ๋ฆฌ์—๊ฒŒ ์ „ํ˜€ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@shepmaster ๋‚ด์žฅ๋˜์ง€ ์•Š์€ ํ”Œ๋žซํผ์—์„œ๋„ ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ์—ˆ๊ณ  IR์„ ๊ฒ€์‚ฌํ•  ๋•Œ ์™ธ์—๋Š” ์•„๋ฌด๋„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ main์˜ argc ํฌ๊ธฐ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์— ํ‘œ์ค€ main() ์ง„์ž…์ ์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ถ€ RTOS๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด์จŒ๋“  ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ˆ˜์ •์‚ฌํ•ญ์„ ์ œ์ถœํ•˜๋Š” ๋ฐ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜„

์ด ๋ณ‘ํ•ฉ์„ ๋ฐฉํ•ดํ•˜๋Š” libcore ๋ฌธ์ œ๋ฟ์ž…๋‹ˆ๊นŒ? ๋…ธ๋ ฅ์„ ์–ด๋””์— ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ libcore์—์„œ ๊ฒช์—ˆ๋˜ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋ชจ๋ฅด๊ณ  32๋น„ํŠธ ์‹œํ”„ํŒ… ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์ด์ƒํ•œ ๋ง์ปค ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค(๋‚ด ์ƒ๊ฐ์— ๋‚ด์žฅ ๋ˆ„๋ฝ). ๊ทธ๊ฒƒ๋“ค์ด ๋ณ‘ํ•ฉ์„ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

chocol4te: ์ด ๋ณ‘ํ•ฉ์„ ๋ฐฉํ•ดํ•˜๋Š” libcore ๋ฌธ์ œ๋ฟ์ž…๋‹ˆ๊นŒ? ๋…ธ๋ ฅ์„ ์–ด๋””์— ์ง‘์ค‘ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์˜ˆ - ์—ฌ๊ธฐ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—… ์€ LLVM ๋‚ด์—์„œ ์ˆ˜ํ–‰

Restioson: ๋‚ด๊ฐ€ libcore์—์„œ ๊ฒช์—ˆ๋˜ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ณ  32๋น„ํŠธ ๋น„ํŠธ ์‹œํ”„ํŒ… ์˜ค๋ฅ˜(๋‚ด ์ƒ๊ฐ์— ๋‚ด์žฅ ๋ˆ„๋ฝ)๋กœ ์ธํ•œ ์ด์ƒํ•œ ๋ง์ปค ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

AVR ๋ฐฑ์—”๋“œ ์ดˆํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ์ฃผ์„ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. :)

Restioson: ๊ทธ๊ฒƒ์ด ๋ณ‘ํ•ฉ์„ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ง์ ‘์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ธฐ ์ „์— ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ด์™€ ๊ฐ™์€ ์ •๋ง ์„ฑ๊ฐ€์‹  ๋ฒ„๊ทธ๊ฐ€ ๋ช‡ ๊ฐ€์ง€ ์žˆ์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ์œ ์ง€๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@dylanmckay LLVM6์ด https://github.com/rust-lang/rust/pull/47828 ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด RFC์— ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

@kellerkindt "AVR ๋ฐฑ์—”๋“œ์˜ ํ˜„์žฌ ๋ฌธ์ œ"์— ๋‚˜์—ด๋œ ๋ชจ๋“  ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. avr-rust์˜ ํ˜„์žฌ HEAD๊ฐ€ ์žฌ๊ธฐ๋ฐ˜๋  ์ˆ˜ ์žˆ๊ณ  ํฅ๋ฏธ๋กœ์šด Rust ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์–ป์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์—ฌ์ „ํžˆ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ libcore๊ฐ€ ์ˆ˜์ • ์—†์ด ๋˜๋Š” ์ตœ์†Œํ•œ ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผ๋˜๋ฉด ์‹ค์ œ๋กœ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฆฌ๋ฒ ์ด์Šค๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ.

๊ฐœ๋ฐœ ๋ฐ˜๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, AVR์—์„œ Rust์˜ ํ˜„์žฌ ์ƒํƒœ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ๋งˆ์„์—์„œ ์ž‘์€ Arduino ํ”„๋กœ์ ํŠธ ๊ทธ๋ฃน์„ ์šด์˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋Œ€์‹  Rust๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ _์‚ฌ๋ž‘_ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค!

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ libcore๊ฐ€ ์ˆ˜์ • ์—†์ด ๋˜๋Š” ์ตœ์†Œํ•œ ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผ๋˜๋ฉด ์‹ค์ œ๋กœ ํŒจ์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค!

ํ˜„์žฌ avr-rust ํฌํฌ์—๋Š” libcore ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค.

์žฌ๊ณ  Rus์—์„œ AVR์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • AVR ๋ฐฑ์—”๋“œ ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜ LLVMInitializeAVR{Target,TargetInfo,AsmPrinter,AsmParser, ...} ๊ฐ€ ์„ ์–ธ๋˜๊ณ  ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์ตœ์†Œ avr ๋Œ€์ƒ ์‚ฌ์–‘ avr-unknown-unknown ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” avr-gcc์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. -mmcu=<avr mcu name> ์ธ์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” avr-gcc ์™€ ๋‹ฌ๋ฆฌ AVR์— AVR ๊ด€๋ จ ๋ช…๋ น์ค„ ์ธ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ๋Œ€์ƒ ์‚ฌ์–‘ JSON ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŽ์€ Rust ์ž„๋ฒ ๋””๋“œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
  • ํฌํฌ์—์„œ AVR LLVM ๋ฐฑ์—”๋“œ๋Š” ํ•ญ์ƒ ๊ธฐ๋ณธ Rust ์ฒดํฌ์•„์›ƒ์—์„œ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ๋˜๋ฉฐ config.toml.example ํŒŒ์ผ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. AVR์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ Rust์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์˜ตํŠธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  • ๋ชจ๋“  ์ƒˆ ๋Œ€์ƒ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ์— AVR ํŠน์ • ๋…ผ๋ฆฌ ์ถ”๊ฐ€
  • "avr-interrupt" ํ˜ธ์ถœ ๊ทœ์น™์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ extern "avr-interrupt" fn my_isr_handler() { .. } ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•ˆ์ •ํ™”๋˜๊ธฐ ์œ„ํ•ด ์•„๋งˆ๋„ RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๊ฐ€ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CPU์— ๋Œ€ํ•œ ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ ์ง€์›, #[cfg(target_cpu = "...")] ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์€ ์—ฌ๊ธฐ ์—์„œ ์ฐพ์„ ์ˆ˜ ruduino ์ƒ์ž๋Š” ์‹ค๋ฆฌ์ฝ˜์—์„œ ์ง€์›๋˜๋Š” ๋ชจ๋“  IO, ๋ ˆ์ง€์Šคํ„ฐ ๋ฐ ๋ชจ๋“ˆ์„ ๋…ธ์ถœํ•˜๋Š” ์žฅ์น˜๋ณ„ ๋ชจ๋“ˆ์„ ์กฐ๊ฑด๋ถ€๋กœ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—…์ŠคํŠธ๋ฆผ ์ „์— RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฐฑ์—”๋“œ๋ฅผ ๋น„์‹คํ—˜ ์ƒํƒœ๋กœ ์Šน๊ฒฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ RFC๋ฅผ LLVM-dev์— ๋ณด๋‚ผ ๋•Œ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์—์„œ ์—…์ŠคํŠธ๋ฆผ Rust์—์„œ avr-rust๋กœ์˜ ์ „์ฒด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ์„ ๋ณ„ํ•œ ์ง€๋‚œ ๋‘ ๋‹ฌ ๋™์•ˆ์˜ LLVM ํŒจ์น˜๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ๋ชจ๋“  ๋Œ€์ƒ์— ์‚ฌ์šฉ๋˜๋Š” LLVM ๋ฒ„์ „๊ณผ ์— ์Šคํฌ๋ฆฝํŠผ ๋ฒ„์ „์˜ LLVM์„ ๋ถ„๋ฆฌํ•˜๋ ค๋Š” ์—…์ŠคํŠธ๋ฆผ Rust์˜ ๋…ธ๋ ฅ์œผ๋กœ ์ •๋ง ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. rust-lang/llvm repo์—์„œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด์ œ ์ •๊ธฐ์ ์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ์— ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” <4๊ฐœ์˜ ์ฒด๋ฆฌ ํ”ฝ LLVM ํŒจ์น˜๋Š” ํ˜„์žฌ ์—…์ŠคํŠธ๋ฆผ LLVM์—์„œ ๊ฒ€ํ†  ์ค‘์ด๋ฏ€๋กœ ๊ฒ€ํ† ์ž๊ฐ€ ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ์ฐพ์œผ๋ฉด ํ•ด๋‹น ํŒจ์น˜๋Š” ์ž๋™์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ Rust๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. Upstream Rust์—๋Š” ๋Œ€์ƒ๋ณ„ Rust๋ณ„ ํŒจ์น˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฒด๋ฆฌ ์„ ํƒ LLVM ํŒจ์น˜๋Š” ์•„๋งˆ๋„ avr-rust upstream ๋ณ‘ํ•ฉ์„ ์œ„ํ•œ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AVR์—์„œ Rust์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ์•Œ๊ณ  ์‹ถ์–ด! ์ง€๊ธˆ์€ STM32 ๋ธ”๋ฃจ ์•Œ์•ฝ์„ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ „ํ™˜ํ–ˆ์ง€๋งŒ ๋…น์—์„œ avr์— ๋Œ€ํ•œ ์ง€์›์ด ์ค€๋น„๋˜๋ฉด ํ™•์‹คํžˆ arduino๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@slowtec ์€ ๋˜ํ•œ AVR ํ”„๋กœ์ ํŠธ์— Rust๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•  ๊ฒƒ์ด๋ฉฐ ๋ฌผ๋ก  ๋งŽ์€ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๋ฒ”ํ”„, ์ง€์›์ด ๊ณต์‹ํ™”๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ: ํ˜„์žฌ ํฌํฌ๋ฅผ ์ตœ์‹  ๋ฒ„์ „์˜ Rust(avr-rust/rust#137)๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฐœ๊ฒฌํ•œ ๋‘ ๊ฐ€์ง€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

LLVM ์˜ค๋ฅ˜: ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น ์ค‘ ๋ ˆ์ง€์Šคํ„ฐ ๋ถ€์กฑ

์ด๊ฒƒ์€ llvm/ llvm-project@45eb4c7e55341c0b83a21ddecc092e273795eda์˜ LLVM ํŠธ๋ ํฌ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค

LLVM ์˜ค๋ฅ˜: ์„ ํƒํ•  ์ˆ˜ ์—†์Œ: t2: i16 = addrspacecast[1 -> 0] undef:i16
t1: i16 = undef
๊ธฐ๋Šฅ: _ZN4core3ptr87_$LT$impl$u20$core..fmt..Debug$u20$for$u20$unsafe$u20$fn$LP$A$RP$$u20$.$GT$$u20$Ret$GT $3fmt17h0fdf8ca7140def9b

์ด๊ฒƒ์€ ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์™€ ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ํฌ์ธํ„ฐ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์žˆ๋Š” Harvard ์•„ํ‚คํ…์ฒ˜์—์„œ Rust๊ฐ€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…์€ @ecstatic-morse๊ฐ€ ๊ฐ€์žฅ ์ž˜ ํ•ฉ๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” *const T์— ํ•ญ์ƒ addrspace(0)์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช…์‹œ์  ์บ์ŠคํŠธ(ptr as *const T)๋Š” ์—ฌ๊ธฐ์—์„œ ์ž…๋ ฅ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋ณด์กดํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋Š” ํ•จ์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ std::fmt::Debug ๊ตฌํ˜„์— ์˜ํ•ด ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. Rust๋Š” ์•”์‹œ์ ์œผ๋กœ ๋น„ํŠธ์บ์ŠคํŠธ(iN -> iM ๋น„ํŠธ) ๋˜๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฃผ์†Œ ๊ณต๊ฐ„ ์บ์ŠคํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” LLVM ๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ addrspace(0)* i16 ๋Œ€์ƒ ํฌ์ธํ„ฐ ์œ ํ˜•์œผ๋กœ ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ๊ฒฝ์šฐ, Rust๋Š” addrspace(1)* i16 ํฌ์ธํ„ฐ๋ฅผ ์ฝ”๋“œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ LLVM์ด ( addrspacecast ) PROGMEM ํฌ์ธํ„ฐ๋ฅผ RAM ํฌ์ธํ„ฐ์— ๋งคํ•‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ฃผ์†Œ ๊ณต๊ฐ„์€ ๊ฒน์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๊ฐ€ ์ฃผ์š” ์ฐจ๋‹จ๊ธฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—…์ŠคํŠธ๋ฆผ Rust๊ฐ€ LLVM ๋งˆ์Šคํ„ฐ(AFAICT, 8.0 ๋ฆด๋ฆฌ์Šค์— ์žˆ์Œ)์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํฌ๋งํ•˜๋ฏ€๋กœ ๋งŽ์€ ์ฒด๋ฆฌํ”ฝ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ตœ๊ทผ์— AVR ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๊ณตํ•œ https://github.com/dylanmckay/avr-compiler-integration-tests/ ํ…Œ์ŠคํŠธ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ LLVM์ด ๋‚ด๋ฟœ๋Š” AVR ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  AVR-Rust ์ปค๋ฐ‹(GitLab ์ €์žฅ์†Œ ๋ฏธ๋Ÿฌ๋ฅผ ํ†ตํ•ด)์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก GitLab ๋Ÿฌ๋„ˆ๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ GitLab์€ pull ์š”์ฒญ์— ๋Œ€ํ•œ CI ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถ„๊ธฐ๋œ ์ €์žฅ์†Œ.

@dylanmckay ์—…๋ฐ์ดํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋‹น์‹ ์ด ์ด ์ผ์— ์Ÿ์€ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด์ œ Rust ๊ธฐ๋ฐ˜ rust-lang/ rust@fb7cca33f ์˜ ํฌํฌ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œ

์ด ๋ฌธ์ œ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ฃผ์†Œ ๊ณต๊ฐ„ ๋ฌธ์ œ๋กœ ์ธํ•ด PR์ด ์—ฌ์ „ํžˆ ์ง€์—ฐ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@dylanmckay๋‹˜ , ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๊ธฐ ์ €๋กœ๋ถ€ํ„ฐ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒด๋ฆฌ ๋”ฐ๊ธฐ ์ˆ˜์ •

libcore ์ž‘์—…์— ํ•„์š”ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์ˆ˜์ • ์‚ฌํ•ญ์ด LLVM ๋งˆ์Šคํ„ฐ๋กœ ์—…์ŠคํŠธ๋ฆผ๋˜์—ˆ์œผ๋ฉฐ ํ˜„์žฌ rust-lang/llvm ํฌํฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์ œ ์ €๋Š” AVR ํฌํฌ๋ฅผ 1.39.0(avr-rust/rust#155)์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์•„์ง ๊ฑฐ๊ธฐ์— ์—†๋Š” ํ•˜๋‚˜์˜ ์ˆ˜์ • ์‚ฌํ•ญ๋งŒ ์„ ํƒํ•˜๋ฉด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .

libcore๋Š” ์ˆ˜์ • ์—†์ด ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

AVR์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ์ž ์ง€์ • libcore ํฌํฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ avr-rust ํฌํฌ์—์„œ libcore ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ํ•˜๋‚˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. - avr-rust/ rust@44240ac59c5949b8a9fd191f5cd666d0206fbe85 - ์˜ฌ๋ฐ”๋ฅธ IR ์ƒ์„ฑ์„ ์œ„ํ•ด ํฌ์ธํ„ฐ ์บ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” AVR-Rust ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด xargo ์— ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ std-aware Cargo ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๊ฐ€

ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ 'ํ˜ธ์ถœ' ์•ก์„ธ์Šค RAM ์ด์™ธ์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ž‘์—…(avr-rust#68)

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

32๋น„ํŠธ ์‹œํ”„ํŠธ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปดํŒŒ์ผ๋Ÿฌ-rt ๋ฃจํ‹ด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(avr-llvm/llvm#163).

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ตœ์„ ์˜ ์ˆ˜์ •์€ LLVM AVR ๋ฐฑ์—”๋“œ์— ์‚ฌ์šฉ์ž ์ •์˜ ๋‚ฎ์ถ”๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ˆœ์ˆ˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ์˜ ์ „ํ™˜์„ ๋‚ฎ์ถ”๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ-rt ๋˜๋Š” libgcc์— ๋Œ€ํ•œ ABI ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ปค์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ ์ „ ์งˆ๋ฌธ

RFC ๋ฐ ๋ถˆ์•ˆ์ •ํ•œ ํ˜ธ์ถœ ๊ทœ์น™

์ด ๋Œ“๊ธ€์„ ์Šค๋ ˆ๋“œ์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค

"avr-interrupt" ํ˜ธ์ถœ ๊ทœ์น™์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ extern "avr-interrupt" fn my_isr_handler() { .. }๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•ˆ์ •ํ™”๋˜๊ธฐ ์œ„ํ•ด ์•„๋งˆ๋„ RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์ณ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๊ฐ€ ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ถˆ์•ˆ์ •ํ•œ ํ˜ธ์ถœ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ #![feature(abi_avr_interrupt)] ๊ธฐ๋Šฅ ๊ฒŒ์ดํŠธ ์•„๋ž˜์— "avr-interrupt" ๋ฐ "avr-non-blocking-interrupt" ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„ ์•ˆ์ •ํ™” RFC๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋ถˆ์•ˆ์ •ํ•œ ํ˜ธ์ถœ ๊ทœ์น™์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋นŒ๋“œ๋ด‡

LLVM ๋ฐฑ์—”๋“œ๋ฅผ ์—…์ŠคํŠธ๋ฆผํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ „์šฉ ๋นŒ๋“œ๋ด‡์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Rust์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ํ‘ธ์‹œํ•  ๋•Œ๋งˆ๋‹ค AVR ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? WASM๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋Š” ๋ฌด์—‡์„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋ถ„ํฌ

"avr-rust fork upstream ๋ณ‘ํ•ฉ"์€ ๋‹จ์ˆœํžˆ ๋‘ ๊ฐœ์˜ ํฌํฌ๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๋ฐฑ์—”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์•ผ๊ฐ„์—๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋Š” ๋ฌด์—‡์„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๊ทธ ์™ธ์—๋Š” avr-rust ํŠน์ • ํŒจ์น˜๊ฐ€ ๋งค์šฐ ์–‡์œผ๋ฉฐ ์š”์ฆ˜์€ ํ•ดํ‚น์ด ์—†์Šต๋‹ˆ๋‹ค.

์ „์ฒด ํŒจ์น˜ ์„ธํŠธ๋Š” https://github.com/rust-lang/rust/compare/master...avr-rust :avr-support์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด WIP 1.39.0 ๋ฆฌ๋ฒ ์ด์Šค ํŒจ์น˜ ์„ธํŠธ(๋Œ€๋ถ€๋ถ„ ๋™์ผ)๋Š” https://github.com/rust-lang/rust/compare/master...avr-rust :avr-support-1.39.0-4560ea788c์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ด๊ฒƒ์€ ์•ž์œผ๋กœ ๋ฉฐ์น  ๋‚ด์— avr-rust/master์— ๋ณ‘ํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์€ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํŒจ์น˜๋ฅผ ์ œ์ถœํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ๋ณผ ์‹œ๊ฐ„์ด ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://github.com/rust-lang/rust/issues/44036

์œ„์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ AVR ๋ฐฑ์—”๋“œ์˜ ์—…์ŠคํŠธ๋ฆผ์„ ์ฐจ๋‹จํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” AVR ์—†์ด๋„ ์ž‘๋™ํ•˜๊ณ  ์œ ์šฉํ•œ Rustc ๋ฒ„์ „์„ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋‹ค์‹œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ํ•ดํ‚น์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๊ฐ€ ๊ฐ€์ƒ์œผ๋กœ ๋ณ‘ํ•ฉ๋œ ํ›„์™€ API๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๊ณต์‹ ๋Œ€์ƒ CPU๊ฐ€ ๊ณต์‹ Rust์— ๋„์ฐฉํ•˜๊ธฐ ์ „์— AVR ์ƒ์ž์—์„œ ์žฅ์น˜ ๊ฐ์ง€.

๊ทธ๋Š” ์‚ฐ๋‹ค! @dylanmckay ์—…๋ฐ์ดํŠธ, ํฅ๋ฏธ๋กœ์šด ์ง„ํ–‰์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ž˜ํ–ˆ์–ด @dylanmckay! ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์ œ์—์„œ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚˜์ง€๋งŒ: avr์šฉ rustc๊ฐ€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ FFI๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ด๋ฏธ avr์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ C/C++๋กœ ์ž‘์„ฑ๋œ ์„ฑ์ˆ™ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ๋“ค์„ ์œ„ํ•œ ์•ฝ๊ฐ„์˜ ๋Ÿฌ์ŠคํŠธ ์Šคํƒ€์ผ ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค๊ณ  ์šฐ๋ฆฌ์˜ ๋Ÿฌ์ŠคํŠธ avr ํ”„๋กœ์ ํŠธ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Rust๋Š” ์ด๋ฏธ ์ผ๋ฐ˜์ ์œผ๋กœ C๋กœ FFI๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ •๋ง ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ์ด๊ฒƒ์ด rust-avr๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๊นŒ?

AVR์šฉ LLVM์˜ C ABI๊ฐ€ gcc์˜ ABI์™€ ์ผ์น˜ํ•˜๋Š” ํ•œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

RFC ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ถˆ์•ˆ์ •ํ•œ ํ˜ธ์ถœ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ํˆฌํ‘œ๋Š” AVR ํ˜ธ์ถœ ๊ทœ์น™์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€ํ™”๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ƒฅ ๊ทธ๋“ค์—๊ฒŒ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๊ณ  LLVM ๋ฒˆํ˜ธ์— ๋งคํ•‘๋˜๊ณ , yes์ž…๋‹ˆ๋‹ค. ๋ถˆ์•ˆ์ •ํ•œ ๊ทœ์น™์— ๋Œ€ํ•œ ์ง€์›์ด ์ด๋ฏธ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

LLVM ๋ฐฑ์—”๋“œ๋ฅผ ์—…์ŠคํŠธ๋ฆผํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ์ „์šฉ ๋นŒ๋“œ๋ด‡์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Rust์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ํ‘ธ์‹œํ•  ๋•Œ๋งˆ๋‹ค AVR ๋ชจ๋“œ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? WASM๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ๋Š” ๋ฌด์—‡์„ ํ–ˆ์Šต๋‹ˆ๊นŒ?

Rust์˜ ํ‹ฐ์–ด ์‹œ์Šคํ…œ์€ ์•ฝ๊ฐ„ ๋Š์Šจํ•˜๊ฒŒ ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ AVR ์ „์šฉ ์ฝ”๋“œ ๋ฅผ ๋ณ‘ํ•ฉ Tier 3 ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ ๋˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ์— ๋งค๋‹ฌ๋ ค ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ด๋Š” ํ•ด๋‹น ํŒŒ์ผ์ด ์ปดํŒŒ์ผ๋Ÿฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

"avr-rust fork upstream ๋ณ‘ํ•ฉ"์€ ๋‹จ์ˆœํžˆ ๋‘ ๊ฐœ์˜ ํฌํฌ๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, ํ•˜๋‚˜์˜ ์ปค๋ฐ‹ ์„ PR๋กœ ์ œ์ถœํ•˜๋Š”

์•„๋งˆ๋„ ํŒจ์น˜๋ฅผ ์ œ์ถœํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค

๋‚˜๋„ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด.

@edvorg ์ฃผ์ œ IMO์— ๋งค์šฐ

์ฃผ์ œ์—์„œ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚˜์ง€๋งŒ: avr์šฉ rustc๊ฐ€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ FFI๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ด๋ฏธ avr์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ C/C++๋กœ ์ž‘์„ฑ๋œ ์„ฑ์ˆ™ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ค.. ๋Œ€๋ถ€๋ถ„. AVR ๋ฐฑ์—”๋“œ์— ์˜ํ•ด ๊ตฌํ˜„๋œ AVR ํ˜ธ์ถœ ๊ทœ์น™์€ AVR-GCC( ์—ฌ๊ธฐ์— ๋ฌธ์„œํ™”๋จ)์™€ ์ผ์น˜ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ๊ฒ€ํ† ํ•ด์•ผ ํ•˜๋Š” LLVM ํŒจ์น˜ D68524 ๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Rust ํ˜ธ์ถœ ์‚ฌ์ดํŠธ๋Š” ํ•ญ์ƒ Rust ๋˜๋Š” avr-clang ์ปดํŒŒ์ผ๋œ ํ•จ์ˆ˜(avr-clang C๊ฐ€ Rust ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋™์ผํ•œ extern "C" ํ˜ธ์ถœ ๊ทœ์น™ ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—) ๋ฐ AVR-GCC์™€์˜ ์ƒํ˜ธ ์ž‘์—…์„ _should_ ์ž‘๋™ํ•˜๋„๋ก ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜ ์„œ๋ช…์˜ ๊ฒฝ์šฐ์—๋Š” ์งˆ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ D68524 ์„ค๋ช… ์ฐธ์กฐ).

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ทธ๋ƒฅ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

LLVM AVR ๋ฐฑ์—”๋“œ๋ฅผ ๊ณต์‹ ๋ฐฑ์—”๋“œ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ œ์ถœ๋œ ์š”์ฒญ - https://reviews.llvm.org/D75099

@dylanmckay ์ˆ˜๋ฝ๋˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ฐ ๋‚จ์€ ๋ถ€๋ถ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@dylanmckay ์ˆ˜๋ฝ๋˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ฐ ๋‚จ์€ ๋ถ€๋ถ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ธฐ์ˆ ์ ์œผ๋กœ Rust๋Š” ๊ณต์‹ ๋ฐฑ์—”๋“œ์™€ ์‹คํ—˜์  ๋ฐฑ์—”๋“œ ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์˜ ๋Œ€๋ถ€๋ถ„์„ ์—…์ŠคํŠธ๋ฆผํ•˜๊ธฐ ์œ„ํ•ด #69478์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

AVR์„ Tier 3 ๋Œ€์ƒ์œผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด AVR์ด ๊ณต์‹ LLVM ๋ฐฑ์—”๋“œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋ฉด, LLVM์˜ ๊ณต์‹ ๋Œ€ ์‹คํ—˜์  ๊ตฌ๋ณ„์€ Rust์˜ ๊ณ„์ธต ์‹œ์Šคํ…œ์— ๋งคํ•‘๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ค‘ Rust์—๋Š” 3๊ฐœ์˜ ๊ณ„์ธต์ด ์žˆ๊ณ  LLVM์—๋Š” 2๊ฐœ์˜ ๊ณ„์ธต์ด ์žˆ์Šต๋‹ˆ๋‹ค. LLVM ๊ณต์‹ ๋ฐฑ์—”๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ ๋ฐ ๊ณต์‹ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋œ Tier 1 ๋ฐ 2์˜ ํ˜ผํ•ฉ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ LLVM ์‹คํ—˜์  ๋ฐฑ์—”๋“œ๋Š” ์˜๋ฏธ์ƒ Rust Tier 3 ๋ฐฑ์—”๋“œ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ํŠธ๋ฆฌ์— ํฌํ•จ, ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋˜์ง€ ์•Š์Œ, ๊ธฐ๋ณธ CI ํ…Œ์ŠคํŠธ์— ํฌํ•จ๋˜์ง€ ์•Š์Œ ๋“ฑ

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ๋ฌธ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ฐ ๋‚จ์€ ์œ ์ผํ•œ ๋ถ€๋ถ„์€ #69478์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— ๋‚˜์˜ค๋Š” ๋ถ€๋ถ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

tl;dr AVR ๋ฐฑ์—”๋“œ๊ฐ€ ๋ณ‘ํ•ฉ๋˜๋ฉด rust-lang/rust#69478์˜ Tier 3 ์—…์ŠคํŠธ๋ฆผ ๋Œ€์ƒ์ด ๋˜์–ด ํฌํฌ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

avr-rust/rust ํฌํฌ์™€ #69478์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ AVR ํฌํฌ์—๋Š” ์žˆ์ง€๋งŒ ์—…์ŠคํŠธ๋ฆผ์—๋Š” ์—†๋Š” target_cpu cfg ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ PR์—์„œ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ์กฐ๊ฐ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ

๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ปดํŒŒ์ผ์ด ์—ฌ์ „ํžˆ ๋งŽ๋‹ค๊ณ  ํ™•์‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‹œ๋„ํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌ์‹ ํฌํฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋Œ€์‹  ๋งค์ผ ๋ฐค ์ผ๋ฐ˜ Rust๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์‹œ๋„ํ•˜๋„๋ก ๋ง‰๋Œ€๊ฐ€ ๋‚ฎ์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Tier 3 ๋Œ€์ƒ์œผ๋กœ ์—…์ŠคํŠธ๋ฆผ๋˜๋ฉด AVR ๊ฐœ๋ฐœ์ด ํ™”๋ฌผ์˜ -Z build-std ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด xargo๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? Rust์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” LLD๋Š” AVR์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด gnu ๋ง์ปค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

AVR ๊ฐœ๋ฐœ์€ ํ™”๋ฌผ์˜ -Z build-std ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด xargo๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? Rust์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” LLD๋Š” AVR์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด gnu ๋ง์ปค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ๋Š” ์—†์ง€๋งŒ ๋‚ด๊ฐ€ ํ•œ ๋ชจ๋“  ๊ฒƒ์€ Xargo์™€ GNU ๋ง์ปค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

GNU ๋ง์ปค๋Š” Windows์—์„œ ์„ค์ •ํ•˜๊ธฐ ์–ด๋ ต๊ณ  xargo๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋„๊ตฌ๊ฐ€ ํ•˜๋‚˜ ๋” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ๋ฌป์Šต๋‹ˆ๋‹ค.

Rust์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” LLD๋Š” AVR์„ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด gnu ๋ง์ปค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

LLD๋Š” AVR ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ์ง€์›๋งŒ ์ œ๊ณตํ•˜๋ฉฐ ์•„์ง ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ avr-ld ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๋ฌป๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‹ค์ˆ˜ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋˜ํ•œ ๊ทธ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์ตœ์ข… ๋ชฉํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ์˜ ์„ธ๊ณ„ ์ƒํƒœ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ, ๋‚˜๋Š” ์˜ค๋ฒ„ ํ—ค๋“œ๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋‚ฎ์ถ”๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์ด๋ฅผ ์œ„ํ•œ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

์ด์ œ AVR ๋ฐฑ์—”๋“œ๊ฐ€ ๊ณต์‹ LLVM ๋Œ€์ƒ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ AVR์„ ํฌํ•จํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ LLVM ๋ฆด๋ฆฌ์Šค๋Š” ์•ฝ 6๊ฐœ์›” ํ›„์— LLVM 11์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉ‹์ง„! ๋ชจ๋“  ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์•„์ฃผ ๋ฉ‹์ ธ!

์ด ๋†€๋ผ์šด ์„ฑ๊ณผ์— @dylanmckay ๋ฅผ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ž ์‹œ ๋™์•ˆ ์ด ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•ด ์™”์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„ ์ฃผ์ œ๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ํ‰๊ท  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค... ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ Rust๋กœ Arduino Uno๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” Rust๊ฐ€ ์ถฉ๋ถ„ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์— ๊ฐ€์žฅ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@Jimmio92 ์ œ๊ฐ€ ์•Œ๊ธฐ๋กœ๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. "์˜ˆ, ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค"์™€ ๊ฐ™์ด. ๋˜๋Š” ํŠน๋ณ„ํžˆ ๋ณต์žกํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ตœ์†Œํ•œ ๊ธธ๊ณ  ์ง€๋ฃจํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์—์„œ Rust ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ํฌํฌ๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์—์„œ LLVM์„ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์ž˜๋˜๋ฉด ๋ณดํ†ต ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค

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

์œ„์˜ (ํ›Œ๋ฅญํ•œ) ๋‰ด์Šค๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” LLVM์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด์ œ ๊ณต์‹์ ์œผ๋กœ AVR์„ ๋ชฉํ‘œ๋กœ/์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ(?) LLVM์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—๋Š” AVR ์ง€์›์ด ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ Rust๊ฐ€ ๋‹จ๊ธฐ๊ฐ„์— AVR๋„ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ์ง€์›ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค . ๋ฌธ์ œ์™€ ์œ„์˜ ๋Œ“๊ธ€์„ ๋ณด๋ฉด AVR ์ง€์›์ด ๊ธฐ๋ณธ Rust ๋„๊ตฌ ์ฒด์ธ์—์„œ "๊ทธ๋ƒฅ ์ž‘๋™"ํ•  ๋•Œ๊นŒ์ง€ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

LLVM ๋งˆ์Šคํ„ฐ์—์„œ Rust LLVM ํฌํฌ๋กœ AVR ์ˆ˜์ • ์‚ฌํ•ญ์„ ์„ ๋ณ„ํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค/์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ Rust๋Š” ์—ฌ์ „ํžˆ LLVM ๋งˆ์Šคํ„ฐ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๊นŒ? ์™ธ๊ด€์ƒ์œผ๋กœ๋Š” ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์™€ ์ผ๋ถ€ ์ฒด๋ฆฌ ์„ ํƒ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. LLVM ๋ฒ„์ „์„ ๋งˆ์Šคํ„ฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” PR์ด ๊ณ„์† ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ?

@dylanmckay

๋˜ํ•œ Rust๋Š” ์—ฌ์ „ํžˆ LLVM ๋งˆ์Šคํ„ฐ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๊นŒ?

๋‹น์‹ ์ด ๋ˆˆ์น˜ ์ฑ˜์„ ๋•Œ ๊ทธ๊ฒƒ์€ ์ง€๊ธˆ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

LLVM ๋ฒ„์ „์„ ๋งˆ์Šคํ„ฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” PR์ด ๊ณ„์† ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ cc @nikic

@dylanmckay 10.0 ๋ฆด๋ฆฌ์Šค์™€ ๋น„๊ตํ•˜์—ฌ Rust์˜ LLVM ํฌํฌ์— ๋งŽ์€ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/rust-lang/llvm-project/commits/rustc/10.0-2020-05-05

LLVM ๋งˆ์Šคํ„ฐ์—์„œ Rust LLVM ํฌํฌ๋กœ AVR ์ˆ˜์ • ์‚ฌํ•ญ์„ ์„ ๋ณ„ํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค/์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://rustc-dev-guide.rust-lang.org/backend/updating-llvm.html#bugfix -updates

๋˜ํ•œ Rust๋Š” ์—ฌ์ „ํžˆ LLVM ๋งˆ์Šคํ„ฐ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๊นŒ? ์™ธ๊ด€์ƒ์œผ๋กœ๋Š” ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์™€ ์ผ๋ถ€ ์ฒด๋ฆฌ ์„ ํƒ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. LLVM ๋ฒ„์ „์„ ๋งˆ์Šคํ„ฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” PR์ด ๊ณ„์† ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ?

Rust๋Š” ํ˜„์žฌ LLVM ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถ”์ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ๋“ค์€ ํ•ด๋‹น clang ๋ฒ„์ „์œผ๋กœ ์–ธ์–ด ๊ฐ„ LTO๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์˜ ๊ธฐ๋ณธ ๋Œ€๋‹ต์€ ์•„๋งˆ๋„ "์•„๋‹ˆ์˜ค"์ž…๋‹ˆ๋‹ค.

์ฆ‰, LLVM 10 ์ปดํŒŒ์ผ ํƒ€์ž„ ํšŒ๊ท€๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด LLVM ๋งˆ์Šคํ„ฐ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ‰๊ฐ€ ๋ชฉ์ ์œผ๋กœ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  LLVM 10 ํฌํฌ์— ๋Œ€ํ•ด ์ฒด๋ฆฌ ํ”ฝ์„ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(๋งŽ์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)

ํฌํฌ๊ฐ€ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์˜ค๋Š˜ ์˜คํ›„์— ์ ์ ˆํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://github.com/rust-lang/rust/pull/69478

์˜ค๋Š˜ ์˜คํ›„์— ์ ์ ˆํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์—…๋ฐ์ดํŠธ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. @dylanmckay ์–ด๋””์— ๊ฒŒ์‹œํ•  ๊ณ„ํš์ธ๊ฐ€์š”?

๋‚˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ช‡ ๋…„ ๋™์•ˆ Rust ์ƒํƒœ๊ณ„์— ์ด ์ถ”๊ฐ€๋ฅผ ๊ฐ„์ ˆํžˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์„ ๋งˆ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ˆœ์ง„ํ•œ ์‹œ๋„๋Š” ๊ฒฐํ•จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ./x.py build ํ‘œ์ค€ master ์œผ๋กœ ๋งํฌ๋œ ๋‹ค์Œ avr-rust/blink ์˜ˆ์ œ๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค( llvm_asm! ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก src/main.rs ์—…๋ฐ์ดํŠธ ํ›„). llvm_asm! ):

RUST_TARGET_PATH=`pwd`
XARGO_RUST_SRC=/home/nixpulvis/Projects/rust

rustup run master xargo build --target avr-atmega328p --release

์ด๊ฒƒ์€ ๋‹ค์Œ๊ณผ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

error: no matching package named `core` found
location searched: registry `https://github.com/rust-lang/crates.io-index`
required by package `sysroot v0.0.0 (/tmp/xargo.oXlxlujoXvXJ)`
error: `"cargo" "build" "--release" "--manifest-path" "/tmp/xargo.oXlxlujoXvXJ/Cargo.toml" "--target" "avr-atmega328p" "-p" "core"` failed with exit code: Some(101)
note: run with `RUST_BACKTRACE=1` for a backtrace

์•„์ง ๋ˆ„๋ฝ๋œ ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

@nixpulvis ์ฐธ์กฐ https://github.com/rust-lang/rust/issues/44052#issuecomment -591396417

libcore๊ฐ€ ์ž˜๋ชป ์ปดํŒŒ์ผ๋œ ๊ฒƒ์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ์ง€๊ธˆ์€ ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

AVR Rustc ํฌํฌ๊ฐ€ ์—…์ŠคํŠธ๋ฆผ์— ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ ํฌํฌ๋Š” ์•„์ง ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋ฐœ์ƒํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

AVR LLVM ์—…์ŠคํŠธ๋ฆผ์—์„œ Rust๊ฐ€ ์•„์ง ์„ ๋ณ„ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

@nikic ์˜ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ

์ €๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LLVM ์—…์ŠคํŠธ๋ฆผ์—์„œ ๋กœ์ปฌ ํฌํฌ๋กœ _all_ AVR ์ปค๋ฐ‹์„ ์ž๋™์œผ๋กœ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํฐ ๋ง์น˜์ด๋ฉฐ ๋ถˆํ•„์š”ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ธฐ ์ „์— ์—…์ŠคํŠธ๋ฆผ Rust๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ์—…์ŠคํŠธ๋ฆผ LLVM ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฑธ๋Ÿฌ๋‚ด๊ณ  ์ƒ๋ฅ˜ Rust๋กœ ์ฒด๋ฆฌ ํ”ผํ‚นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ Rust ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ AVR LED ๊นœ๋ฐ•์ž„ ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ

์—…์ŠคํŠธ๋ฆผ ๋…ธ๋ ฅ์ด ์ด์ œ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ๋‹ค์šด์ŠคํŠธ๋ฆผ avr-rust ํฌํฌ
์•„์ง Rust์˜ ํŠนํžˆ ์˜ค๋ž˜๋œ ๋ฒ„์ „์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ LLVM ์ฃผ์žฅ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  AVR์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜ํ™”๊ฐ€ ํ•„์š”ํ•œ ์—…์ŠคํŠธ๋ฆผ Rust์— ์ตœ์†Œํ•œ ํ•œ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด pull request #73270์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

AVR์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์—…์ŠคํŠธ๋ฆผ Rust์— ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊นœ๋ฐ•์ž„ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋ฉด ๊ทธ ์‹œ์ ์—์„œ ์—…์ŠคํŠธ๋ฆผ AVR ์ง€์›์ด ์‚ฌ์šฉ/์‹คํ—˜ ์ค€๋น„๊ฐ€ ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

AVR ํ†ต์‹ ์ด ๋ฐœ์ƒ/๊ฒŒ์‹œ๋˜์–ด์•ผ ํ•˜๋Š” ์œ„์น˜

@wezm ์ข‹์€ ์ง€์ ์„ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ "์ถ•๋ณต๋ฐ›์€" ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ฑ„๋„์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ํ‹ฐ์ผ“์€ ์ž˜ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ๊ณง ๋ถ€๋“์ดํ•˜๊ฒŒ ๋‹ซํž ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AVR-Rust Gitter ์ฑ„๋„์€ ํ˜„์กดํ•˜๋Š” ๊ฐ€์žฅ ์ž์—ฐ์Šค๋Ÿฌ์šด ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๋Š” ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค). Gitter ์ฑ„๋„์—๋Š” ํ† ๋ก ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ณต์ง€/์—…๋ฐ์ดํŠธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜๋ ค๋ฉด ๋ธ”๋กœ๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์บ์ฅฌ์–ผํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์›ํ•˜๋Š” ๋ถ„๋“ค์ด ๋†“์น˜์ง€ ์•Š๋„๋ก "๊ณต์‹ ๋งค์ฒด"๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ๋Š” ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ
๊ด€์‹ฌ์žˆ๋Š” ๋ชจ๋“  ๋ถ„๋“ค. ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์—ด๋ฆฐ ์งˆ๋ฌธ

  • avr-rust ํฌํฌ์˜ GitHub ๋ฌธ์ œ๋ฅผ ์—…์ŠคํŠธ๋ฆผ Rust ์ €์žฅ์†Œ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•˜๋‚˜์š”?
    ** ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—…์ŠคํŠธ๋ฆผ ์ €์žฅ์†Œ์—์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋ฅผ ์ข…๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • AVR๋กœ Rust๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์€ ์–ด๋””์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋ฏธ๋ž˜๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ๋“ค(์ฝ๊ธฐ: ์šฐ์„ ์ˆœ์œ„)

  • AVR Rust ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ํŒจํ‚ค์ง• ๋ฐ ๋ฐฐํฌ. Rust๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋งŽ์€ ๋ฐฐํฌํŒ์—๋Š” ํŠน์ • ์›Œํฌํ”Œ๋กœ์—์„œ ๋•Œ๋•Œ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ OOM ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜๋ชป ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„๊ทธ. ์ง„์ž… ์žฅ๋ฒฝ์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋†’์œผ๋ฉฐ ๋‚ฎ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ด๋™ํ•˜์„ธ์š”.
    ์ถ”์  https://github.com/avr-rust/rust/issues/162
  • "์ง€์›๋˜๋Š”" ๋˜๋Š” ์ตœ์†Œํ•œ ํ…Œ์ŠคํŠธ๋œ ๊ตฌ์„ฑ ๋ชฉ๋ก ์ž‘์„ฑ. (rustc version, Xargo version) ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•˜๋ฏ€๋กœ
    Xargo๊ฐ€ ์˜์กดํ•˜๋Š” ๋น„๊ณต๊ฐœ Rust API์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ AVR Rust ๋„๊ตฌ ์ฒด์ธ์„ ์†์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    Xargo๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌ ๋ชจ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค - ํ™”๋ฌผ xbuild๊ฐ€ ์ƒ๋‹นํžˆ ์ œํ•œ์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ช‡ ์ฃผ ์ „์— ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ด์œ ๊ฐ€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Œ).
    ์šฐ๋ฆฌ๋Š” Xargo๋ฅผ ํฌํฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋ฅผ Cargo์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ).
  • ๋‹ค์šด๋กœ๋“œ ๋งํฌ๋ฅผ ํฌํ•จํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ผ์ข…์˜ ํ™ˆํŽ˜์ด์ง€ ์„ค์ •
  • ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ(์—๋ฎฌ๋ ˆ์ดํŠธ/์‹œ๋ฎฌ๋ ˆ์ด์…˜๋œ AVR์—์„œ ๊ฐ ์ปค๋ฐ‹ ์‹œ)

๋‹น๋ถ„๊ฐ„์€ ๋” ๋‚˜์€ ๋งค์ฒด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ด GitHub ๋ฌธ์ œ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Gitter์—๋„ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณต์ง€/์—…๋ฐ์ดํŠธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•˜๋ ค๋ฉด ๋ธ”๋กœ๊ทธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์บ์ฅฌ์–ผํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์›ํ•˜๋Š” ๋ถ„๋“ค์ด ๋†“์น˜์ง€ ์•Š๋„๋ก "๊ณต์‹ ๋งค์ฒด"๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ๋Š” ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ
๊ด€์‹ฌ์žˆ๋Š” ๋ชจ๋“  ๋ถ„๋“ค. ์ œ์•ˆ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์€ ๋ธ”๋กœ๊ทธ(RSS ํ”ผ๋“œ ํฌํ•จ)๋ฅผ ๊ฐ•๋ ฅํžˆ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋กœ๊ทธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒ€์ƒ‰ ์—”์ง„ ๊ฒฐ๊ณผ์— ๋” ์ž˜ ๋‚˜ํƒ€๋‚˜๋ฉฐ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๋งํฌํ•˜๊ธฐ์— ๋” ์ข‹์Šต๋‹ˆ๋‹ค. RSS ํ”ผ๋“œ๋Š” ํ™•์ธ/ํ†ต์ง€ ์ธก๋ฉด์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ๊ณ ์˜ ์žฅ์†Œ์ธ์ง€ 100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ Embedded WG ๋ธ”๋กœ๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ์ ๊ฒŒ ๋“œ๋Š” ์ฑ„๋„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://rust-embedded.github.io/blog/

์•„๋งˆ๋„ ํŠธ์œ„ํ„ฐ ๊ณ„์ •๋„? ์ƒˆ๋กœ์šด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด).

๋‚ด์žฅ๋œ ์ž‘์—… ๊ทธ๋ฃน์ด ์—ฌ๊ธฐ์—์„œ ๊ธฐ๊บผ์ด ๋„์›€์„ ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠธ์œ„ํ„ฐ ๊ณ„์ • @rustembedded ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋‰ด์Šค๋ ˆํ„ฐ์—๋„ AVR ๊ด€๋ จ ๋‰ด์Šค๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์–ผ๋งˆ ์ „์— O-AVR ๋ ˆ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ AVR ๊ด€๋ จ ๋ฌธ์ œ์—๋„ Rust ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ์™ธ์—๋„ ๋Œ€๋ถ€๋ถ„์˜ Rust ํŒ€์ด ์žˆ๋Š” ๊ณณ์ด๊ธฐ ๋•Œ๋ฌธ์— Rust-lang Zulip์—์„œ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ํŠน์ • Rust ๋Œ€์ƒ(์˜ˆ: Windows ๋˜๋Š” Arm)์— ์ดˆ์ ์„ ๋งž์ถ˜ "๋Œ€์ƒ ๊ทธ๋ฃน"์„ ๋Š˜๋ฆฌ๋Š” ๊ณผ์ •์— ์žˆ์œผ๋ฉฐ AVR๋„ ์ด์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” Zulip์— ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค.

์—…๋ฐ์ดํŠธ.

libcore ๊ฐ€ ์Šคํ†ก rust-lang/master ๋ธŒ๋žœ์น˜์—์„œ AVR์šฉ์œผ๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ์ „์— ๋‘ ๊ฐ€์ง€๊ฐ€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. AVR์—์„œ ์ผ๋ จ์˜ "์ฃผ์†Œ ๊ณต๊ฐ„ ์บ์ŠคํŠธ ๋ฌดํšจ" ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ’€ ์š”์ฒญ์ด ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Rust์˜ ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ดœ์ฐฎ์€ Von-Neumann ๋Œ€์ƒ๊ณผ ๋น„๊ตํ•˜์—ฌ Harvard ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ addrspace(1) ๋กœ ํƒœ๊ทธ ์ง€์ •๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. addrspace(0) . Rust-lang/rust#73270 - ํ˜„์žฌ ์ฝ”๋“œ ๊ฒ€ํ†  ์ค‘์ž…๋‹ˆ๋‹ค.

~2. blink ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค - avr-rust/rust#92. ์•„์ง ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์€ ํŒจ์น˜๊ฐ€ ์žˆ์–ด ์ด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - https://reviews.llvm.org/D68524. ์ด๊ฒƒ์€ ์—…์ŠคํŠธ๋ฆผ๋œ ๋‹ค์Œ ์œ ๋‹› ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋ฉด

์ด ๋‘ ๊ฐ€์ง€ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์—…์ŠคํŠธ๋ฆผ๋œ Rust AVR ๋Œ€์ƒ์€ ํ˜„์žฌ avr-rust/rust ํฌํฌ์™€ ๋™์ผํ•œ ์ˆ˜์ค€์œผ๋กœ AVR ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ blink ์˜ˆ์ œ ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , arduino ํฌ๋ ˆ์ดํŠธ, ๋ฌธ์„œ, ๊ฐ€์ด๋“œ, ์—…์ŠคํŠธ๋ฆผ ๋ถ„๊ธฐ์šฉ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—…์ŠคํŠธ๋ฆผ ๋ถ„๊ธฐ๋ฅผ ์‹คํ—˜์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ ํ•˜๋‚˜์˜ TODO:

  1. ~์—…์ŠคํŠธ๋ฆผ Rust์˜ ์ƒˆ๋กœ์šด ์ธ๋ผ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ ๊ตฌ๋ฌธ์„ ์œ„ํ•œ AVR ๋ฐฐ๊ด€ ์ถ”๊ฐ€~

    • ~์ƒˆ๋กœ์šด ์ธ๋ผ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ ๊ตฌ๋ฌธ์ด ์ง€์›๋˜๋ฉด Arduino ํฌ๋ ˆ์ดํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      Arduino ํฌ๋ ˆ์ดํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๊นœ๋ฐ•์ž„ ํฌ๋ ˆ์ดํŠธ๋ฅผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค.~ ์•ผ๊ฐ„์— ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋ฏ€๋กœ ์ง€๊ธˆ์€ llvm_asm! ๋ฅผ ํ†ตํ•ด ์ด์ „ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. LLVM ๋งˆ์Šคํ„ฐ์—์„œ ์—…์ŠคํŠธ๋ฆผ Rust LLVM ํฌํฌ(ํŽธ์ง‘: PR: https://github.com/rust-lang/llvm-project/pull/66)๊นŒ์ง€ AVR ์ˆ˜์ • ํŒจ์น˜(๋Œ€๋ถ€๋ถ„ Ayke)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋œ ๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค. https://github.com/dylanmckay/rust/commits/dylan/avr-workable-upstream-candidate. ์ด ๋ถ„๊ธฐ๋Š” libcore๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์—…์ŠคํŠธ๋ฆผ rust-lang/master ์—์„œ ๋นŒ๋“œ๋˜์ง€๋งŒ ์•„์ง ์—…์ŠคํŠธ๋ฆผ๋˜์ง€ ์•Š์€ LLVM ํŒจ์น˜ D68524 , ์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ Rust PR rust-lang/rust#73270, ์—…์ŠคํŠธ๋ฆผ LLVM์—์„œ ์ž๋™์œผ๋กœ ์ฒด๋ฆฌ ์„ ํƒ๋˜๋Š” 46๊ฐœ์˜ AVR ๊ด€๋ จ ์ปค๋ฐ‹๋„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ(LLVM ๋ถ„๊ธฐ: https://github.com/dylanmckay/llvm-project/commits/dylan/avr-workable-upstream-candidate). 46๊ฐœ ๋ชจ๋‘๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ์ตœ์ข… ๋ชฉ๋ก์€ ๋” ์ž‘์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋ชจ๋“  ์—…์ŠคํŠธ๋ฆผ LLVM ์ˆ˜์ • ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๋Š” ํ’€ ์š”์ฒญ์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ LED ๊นœ๋ฐ•์ž„ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋‚จ์€ ์ž‘์—…์˜ ์ „์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๋‚จ์€ ์ผ

  • [x] Land Rust PR rust-lang/rust#73270 . ์ด ํ’€ ์š”์ฒญ์€ AVR์—์„œ ์ผ๋ จ์˜ "์ฃผ์†Œ ๊ณต๊ฐ„ ์บ์ŠคํŠธ ๋ฌดํšจ" ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ด๋Š” Rust์˜ ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’์ธ addrspace(0)์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š” Von-Neumann ๋Œ€์ƒ๊ณผ ๋น„๊ตํ•˜์—ฌ Harvard ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ addrspace(1)๋กœ ํƒœ๊ทธ ์ง€์ •๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ํ˜„์žฌ ์ฝ”๋“œ ๊ฒ€ํ†  ์ค‘์ž…๋‹ˆ๋‹ค.
  • [x] Land Rust LLVM ํ™๋ณด https://github.com/rust-lang/llvm-project/pull/66 . ์ด๊ฒƒ์€ ์—…์ŠคํŠธ๋ฆผ LLVM์—์„œ Rust์˜ LLVM ํฌํฌ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  AVR ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ~17~16๊ฐœ์˜ LLVM ์ˆ˜์ • ์‚ฌํ•ญ์„ ์„ ๋ณ„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • [x] LLVM ํ•˜์œ„ ๋ชจ๋“ˆ์˜ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” Land Rust PR rust-lang/rust#73658 . Rust ์ปดํŒŒ์ผ๋Ÿฌ ๋ฌธ์„œ ์—๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ ๊ฒ€ํ†  ์ค‘ ์ž…๋‹ˆ๋‹ค.
  • [x] Land Rust PR ~rust-lang/rust#74625~ rust-lang/rust#74631 . 79a42e37084d0์—์„œ Rust๋Š” --eh-frame-hdr ์ธ์ˆ˜๋ฅผ ๋ง์ปค์— ๋ฌด์กฐ๊ฑด ์ „๋‹ฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. AVR-GCC ๋ง์ปค๋Š” ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ์กด Windows ์ œ์™ธ์™€ ์œ ์‚ฌํ•˜๊ฒŒ AVR์— ๋Œ€ํ•ด ์ „๋‹ฌํ•˜์ง€ ์•Š๋„๋ก ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์†”๋ผ๋ฆฌ์Šค, UEFI.

๋„๊ตฌ๋ฅผ Cargo์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ).

๋‚˜๋Š” ์ด๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ œ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค: rust-lang/cargo#4959.

cargo build -Z build-std=core ๋Š” ๋‚ด AVR ์˜ˆ์ œ ์‚ฌ๋ก€์—์„œ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

@shepmaster ์–ด์จŒ๋“  ์ €์™€ ๊ฐ€๊นŒ์›Œ์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ง€๊ธˆ์€ ๋น„ํŠธ์บ์ŠคํŠธ ํ•ญ๋ชฉ์— ๊ฐ‡ํžŒ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ๋ณ‘ํ•ฉ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค(PR์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” IDK๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ๋ˆ„๋ฝ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ).

-Z build-std=core ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ target triple์„ ์ œ๊ณตํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— rustc +master --print target-list | grep avr ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  avr-unknown-unknown ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด๊ด€๋œ ๋ฌธ์ œ avr-llvm/llvm#35๋Š” ํŠธ๋ฆฌํ”Œ์ด ์‹ค์ œ๋กœ avr-atmel-none (์–ด์จŒ๋“  ๋‚˜์—๊ฒŒ ๋” ์ดํ•ด๊ฐ€ ๋จ)์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

avr-unknown-unknown ๋งž์Šต๋‹ˆ๋‹ค.

์—ด๋ฆฐ ์งˆ๋ฌธ

* Should GitHub issues on the avr-rust fork be moved to the upstream Rust repository?
  ** Regardless, new issues should be raised on the upstream repository - the old issue tracker will need to be wound down.

* Where should the instructions for compiling Rust with AVR live?

๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์šฉ์ž ์ธก๋ฉด์—์„œ ๋„ˆ๋ฌด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ddg ๋ฐ/๋˜๋Š” ์ด๋ฒˆ ์ฃผ ๋Ÿฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์—‡์ด๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์—ด๋ฆฐ ์งˆ๋ฌธ

* Should GitHub issues on the avr-rust fork be moved to the upstream Rust repository?
  ** Regardless, new issues should be raised on the upstream repository - the old issue tracker will need to be wound down.

* Where should the instructions for compiling Rust with AVR live?

๋‚˜๋Š” ์ด๊ฒƒ์ด ์‚ฌ์šฉ์ž ์ธก๋ฉด์—์„œ ๋„ˆ๋ฌด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ddg ๋ฐ/๋˜๋Š” ์ด๋ฒˆ ์ฃผ ๋Ÿฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์—‡์ด๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Rust๋ฅผ AVR๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ https://docs.rust-embedded.org/์— ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

AVR์— ํ•„์š”ํ•œ ๋ชจ๋“  ํŒจ์น˜ ๋Š” ์˜ค๋Š˜์˜ nighty rustc 1.47.0-nightly (0820e54a8 2020-07-23) ํ˜„์žฌ Rust nightly ์ปดํŒŒ์ผ๋Ÿฌ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค . Rust ์•ผ๊ฐ„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ˆ˜์ • ์—†์ด ์ด์ œ LED ๊นœ๋ฐ•์ž„ ์˜ˆ์ œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  AVR ELF ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • https://avr-rust.com/ ์—์„œ ์ƒ์„ฑ๋œ ์ƒˆ๋กœ์šด ์ค‘์•™ ์ง‘์ค‘์‹ ํ”„๋กœ์ ํŠธ ๋žœ๋”ฉ ํŽ˜์ด์ง€
  • ์ƒˆ ์ฑ… - AVR-Rust ๊ฐ€์ด๋“œ๋ถ ์ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ book.avr-rust.com์˜ GitHub ํŽ˜์ด์ง€์—์„œ ํ˜ธ์ŠคํŒ…๋ฉ๋‹ˆ๋‹ค.
  • avr-rust/rust ํฌํฌ ์ €์žฅ์†Œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜๊ตฌ์ ์œผ๋กœ ์ž ๊ฒจ ๋‹ซํžˆ๊ธฐ ์ „์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์กด ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์•„์ง ๋ณด๊ด€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • Xargo๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - ์—…์ŠคํŠธ๋ฆผ Rust์˜ -Z build-std ํ”Œ๋ž˜๊ทธ๊ฐ€ AVR์—์„œ Xargo์˜ ํ•„์š”์„ฑ์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ํ™”๋ฌผ ํฌํฌ๋Š” ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ๋ฅ˜ ํ™”๋ฌผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Rust nightly ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด์ œ AVR์„ ์ง€์›ํ•˜๋Š” Rust์˜ ๊ถŒ์žฅ ์ฑ„๋„๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ง€๊ธˆ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค - ์šฐ๋ฆฌ๊ฐ€ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค!

๋ฒ„๊ทธ ๋ณด๊ณ  ๋‹จ๊ณ„๋Š” AVR ๊ฐ€์ด๋“œ๋ถ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AVR ๊ฐ€์ด๋“œ๋ถ ๊ณผ https://github.com/avr-rust/blink ์˜ ๊นœ๋ฐ•์ž„ ์˜ˆ์ œ๋Š” ๋Œ€์ƒ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค.

์ด ์—…์ŠคํŠธ๋ฆผ ๋…ธ๋ ฅ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋…ผ์˜ํ•˜๊ณ  ์ง€์›ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊นŠ์ด ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ง€๋Š๋Ÿฌ๋ฏธ

์™€์šฐ ์™€์šฐ ์™€์šฐ.

์ด ์ผ์— ๊ธฐ์—ฌํ•ด ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ด ๋‚ ์„ ๊ณ ๋Œ€ํ•ด ์™”์Šต๋‹ˆ๋‹ค!

๋…น์„ avr๋กœ ์ด์‹ํ•˜๊ธฐ ์ „์˜ Dylan McKay

image
๊ทธ๋ฆฌ๊ณ  ํ›„์—
image

๋ชจ๋“  ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! :-) ํ‘น ์‰ฌ์„ธ์š”!

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