마이크로소프트(MS)가 Rust에서 영감을 받은 신규 프로그래밍 언어 개발(Verona Project)에 매진하고 있다. 프로젝트 베로나는 메모리 관리, 구획화 및 보안 샌드박스를 통해 안전한 시스템을 구축하기 위한 프로젝트다1. Rust는 최근에 스택오버플로우에서 좋아하는 개발언어 순위 1위에 오르기도 하였다2. Rust는 C++의 성능과 더불어 메모리 안정성을 확보한 언어이다.
Rust 컴파일러는 변수의 소유권을 컴파일 단계에서 모두 추적할 수 있다. 이를 이용해 메모리 할당과 해제를 오버헤드 없이 암묵적으로(Implicit) 수행함으로써, Rust는 런타임 오버헤드가 없는 안전한 메모리 관리를 이루어낸다3.
Microsoft 공식 웹사이트에서는 Project Verona를 ‘a programming language for the modern cloud’로 소개하고 있다4.
Rust는 기본적으로 UTF-8 중심으로 문자열을 처리한다1. 그러나 MS-Windows는 euc-kr을 확장한 CP949(MS949)와 Unicode로 한글을 처리하므로2 MS-Windows에서는 영문, 숫자와 별개로 한글을 byte 단위로 처리할 때 2byte 또는 3byte의 문자가 혼재할 수 있다. 아래의 예제는 2byte (AnsiString) 한글만으로 Hex를 encode, decode 필요가 있을 때 참고할 만한 소스이다.
[dependencies]
encoding = "0.2.33"
hex = "0.4.2"
use encoding::{label::encoding_from_whatwg_label, EncoderTrap, DecoderTrap};
use hex;
fn main() {
let kor_eng_num = String::from("가나다 ABC 123");
println!("{}", kor_eng_num);
println!("---------------------");
let mut vec = Vec::new();
let string_list = kor_eng_num.split_whitespace();
for s in string_list {
println!("UTF8: {} / MS949: {}", hex::encode(s).to_uppercase(), split_hex(s.into()));
vec.push(split_hex(s.into())); // s.into() -> &s
}
println!("---------------------");
for hex_str in vec.iter() {
println!("{} : {}", hex_str, hex2str(hex_str));
}
}
Rvalue reference는 C++11에서 처음 소개된 기능으로 다소 이해하기 어려운 구조1로 되어있다. Each C++ expression (an operator with its operands, a literal, a variable name, etc.) is characterized by two independent properties: a type and a value category. Each expression has some non-reference type, and each expression belongs to exactly one of the three primary value categories: prvalue, xvalue, and lvalue2.
C++의 RValue 참조 및 Move 생성자 개념을 간단한 예제3를 통하여 정리해보았다.