Rust 프로그래밍에서 concurrency 모델의 핵심 메커니즘을 비교적 간단한 소스 코드를 통하여 단계별로 정리해보았다1. Go(lang)에서 goroutine, channel을 사용하여 함수와 메소드의 동시성을 구현할 수 있게 해주는 것2처럼 Rust에서는 ‘Concurrency, Threads, Channels, Mutex and Arc’로 동시성을 구현할 수 있다.
use std::sync::{mpsc, Arc, Mutex};
use std::thread;
use std::time::Duration;
fn main() {
let v = vec![1, 2, 3];
let handle = thread::spawn(move || {
println!("vector: {:?}", v);
});
// - error : value borrowed here after move
// println!("{:?}", v);
// - channel을 이용하여 해결
handle.join().unwrap();
}
C#에서 ‘using’ 키워드는 네임스페이스에서 유형을 가져오고 이에 대한 별칭을 만드는 지시문에 사용되는 것 외에 IDisposable 인터페이스에 사용하는 ‘using’이다1. 이것은 닷넷에 사용한 자원을 제거하도록 유도한다. 특히 C# 8버전에서는 ‘using’을 single line으로 구성할 수 있다2.
public class AResource : IDisposable
{
public void UseIt() => Console.WriteLine($"{nameof(UseIt)}");
public void Dispose()
{
Console.WriteLine($"Dispose {nameof(AResource)}");
GC.SuppressFinalize(this);
}
}
Go 언어 학습 후 처음 실습해보는 예제로 REST API를 만들어보았다1. 동영상 강좌로 TutorialEdge, Golang Development를 추천한다.
GOPATH는 Go 언어에서 프로젝트를 생성하고 개발할 때 기본 작업 디렉터리로 사용한다. 아래처럼 ‘GoProjects’ 폴더를 만들었다면 이 안에 ‘bin’, ‘pkg’, ‘src’ 폴더를 만들고 다시 src 폴더에 프로젝트 폴더(예, hello)를 만들고 이 안에 ‘main.go’ 파일을 만든다. 이제 ‘go run’을 실행할 경우 화면에 결과를 보여주며(temp폴더에 임시빌드), ‘go build’ 하면 프로젝트 폴더명(hello)으로 실행 파일(hello.exe)을 만들어 준다.
rem C:\GoProjects\bin
rem C:\GoProjects\pkg
rem C:\GoProjects\src\hello\main.go
set Path=%PATH%;C:\Go\bin
set GOCACHE=C:\GoProjects\go-build
set GOENV=C:GoProjects\env
set GOPATH=C:\GoProjects
set GOTMPDIR=C:\GoProjects\temp
Temp 디렉터리는 ‘go run’을 실행할 때 백신에 따라 ‘access denied’가 메시지가 나오는 데 백신에 예외처리를 해주어 해결한다.