250x250
Notice
Recent Posts
Recent Comments
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

자기개발하는 QA

Rust 01 본문

지식/Rust

Rust 01

뚜뚜히 2022. 11. 1. 20:16

시작전

사용 PC : Mac Book Pro 14'' M1

   Compiling hello v0.1.0
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-arch arm64"

이런 형식의 에러가 계속 발생 -> X-code  최신 업데이트가 필요하다고 해서 최신으로 설치

에러 계속 발생 -> X-code developer 가 자동으로 설치되지 않아서 발생된 문제

아래 스택오버플로우가 도와줌 ㅠ

https://stackoverflow.com/questions/28124221/error-linking-with-cc-failed-exit-code-1

 

error: linking with `cc` failed: exit code: 1

I have a single .rs file. When I compile it by rustc test1.rs, I get an error: error: linking with `cc` failed: exit code: 1 note: cc '-m64' '-L' '/usr/local/Cellar/rust/1.0.0-alpha/lib/rustlib/

stackoverflow.com

fn greet_world() {
    println!("Hello, world!");     // <1>

    let southern_germany = "Grüß Gott!";         // <2>
    let japan = "ハロー・ワールド";                // <3>

    let regions = [southern_germany, japan];     // <4>

    for region in regions.iter() {               // <5>
            println!("{}", &region);             // <6>
    }
}

fn main() {
    greet_world();                               // <7>
}

-> &는 읽기 전용

 fn main() {                 // <1> <2>
  let penguin_data = "\
  common name,length (cm)
  Little penguin,33
  Yellow-eyed penguin,65
  Fiordland penguin,60
  Invalid,data
  ";

  let records = penguin_data.lines();

  for (i, record) in records.enumerate() {
    if i == 0 || record.trim().len() == 0 {  // <3>
      continue;
    }

    let fields: Vec<_> = record     // <4>
      .split(',')                   // <5>
      .map(|field| field.trim())    // <6>
      .collect();                   // <7>

    if cfg!(debug_assertions) {              // <8>
      eprintln!("debug: {:?} -> {:?}",
	             record, fields);            // <9>
    }

    let name = fields[0];
    if let Ok(length) = fields[1].parse::<f32>() { // <10>
        println!("{}, {}cm", name, length);        // <11>
    }
  }
}

-> \ 는 줄바꿈을 피한다 {} default template {:?} object 등의 템플릿 {:#?} object new line

#[derive(Debug)]    // <1>
enum Cereal {       // <2>
    Barley, Millet, Rice,
    Rye, Spelt, Wheat,
}

fn main() {
    let mut grains: Vec<Cereal> = vec![];   // <3>
    grains.push(Cereal::Rye);               // <4>
    drop(grains);                           // <5>

    println!("{:?}", grains);               // <6>
}

댕글링 포인터를 컴퍼일시에 에러로 확인 가능

use std::thread;                          // <1>

fn main() {
    let mut data = 100;

    thread::spawn(|| { data = 500; });    // <2>
    thread::spawn(|| { data = 1000; });   // <2>

    println!("{}", data);
}

멀티 쓰레드에서 경합 조건이 발생할때 컴파일시 에러 메시지 발생 mut 가 아닌경우 쓰레드가 아니라 data에 수정 접근할떄 에러 발생

fn main() {
  let fruit = vec!['🥝', '🍌', '🍇'];

  let buffer_overflow = fruit[4];    // <1>

  assert_eq!(buffer_overflow, '🍉')  // <2>
}

버퍼 오버플로가 발생하는 경우 컴파일 에러 발생

fn main() {
  let mut letters = vec![            // <1>
      "a", "b", "c"
  ];

  for letter in letters {
      println!("{}", letter);
      letters.push(letter.clone());  // <2>
  }
}

반복중에 배열에 접근, 변경하는 변경

use std::rc::Rc;
use std::sync::{Arc, Mutex};
fn main() {
  let a = 10;
  let b = Box::new(20);
  let c = Rc::new(Box::new(30));
  let d = Arc::new(Mutex::new(40));
  println!("a: {}, b: {}, c: {}, d: {:#?}", a, b, c, d);
}

a - 스택 b - 힙 c - 힙 + 레퍼런스 카운터 + 싱글 쓰레드 d - 멀티 쓰레드 + 레퍼런스 카운터 + 락(poisoning)을 통한 멀티 쓰레드 프로텍팅

 

ref. https://rinthel.github.io/rust-lang-book-ko/appendix-04-macros.html

728x90

'지식 > Rust' 카테고리의 다른 글

Rust 4  (0) 2022.11.23
Rust 03  (0) 2022.11.15
Rust 02  (1) 2022.11.15