반응형

tutorial 54

쪼잔한 Rust 16. 두렵지 않은 Concurrency

Chapter 16. 두렵지 않은 Concurrency Concurrent 프로그래밍을 안전하고 효율적으로 다루는 것이 Rust가 삼는 주된 목표 중 하나이다. 프로그램의 여러 부분을 독립적으로 실행시키는 concurrent 프로그래밍과 동시에 실행시키는 parallel 프로그래밍은 많은 컴퓨터들이 여러 프로세서를 이용함에 따라 더욱이 중요하게 여겨지고 있다. 역사적으로 볼 때, 이러한 영역의 프로그래밍은 어렵고 오류가 나기 쉬운 것으로 생각되어왔다. Rust는 이러한 인식을 바꾸고 싶다. Rust 팀은 애초에 메모리의 안전을 보장하는 것과 concurrency 문제를 예방하는 것은 완전히 별개의 문제라고 생각했었다. 시간이 지나면서, Rust 팀은 소유권과 타입 시스템이 이 두 가지 문제를 해결하는데 ..

Programming/Rust 2018.09.11

쪼잔한 Rust 4.3. Slice 타입

Chapter 4.3. Slice 타입 Ownership을 가지지 않는 또 다른 데이터 타입으로 _slice_가 있다. Slice는 데이터 모음의 전체가 아닌 일정 부분만을 가리키는 reference이다.여기 작은 프로그래밍 문제가 주어졌다고 해보자. String 하나를 받아서 그 첫 번째 단어를 반환하는 함수를 만들어보자. 만약 함수가 string의 공백 문자를 찾지 못한다면, string 전체가 한 단어일테니까 전체 string을 반환해주면 된다.이 함수의 signature부터 생각해보자: fn first_word(s: &String) -> ? 이 함수 first_word는 &String을 parameter로 받는다. 우리는 ownership을 원치 않으므로 괜찮은 일이다. 하지만 무엇을 반환해줘야 ..

Programming/Rust 2018.08.19

쪼잔한 Rust 4.2. 참조와 대여

Chapter 4.2. 참조와 대여 이전 글에서 tuple을 사용했던 예제 4-5는 이런 문제가 있었다: String의 ownership이 calculate_length 함수 안으로 이동했기 때문에, 함수 호출이 끝난 후에 그 String을 다시 사용하기 위해서 ownership을 다시 내보내야 했던 것이다.아래는 함수가 parameter로서 그 값의 ownership을 가져가는 대신, 참조값(reference)만 가져가는 방법을 보여준다. // Filename: src/main.rs fn main() { let s1 = String::from("hello"); let len = calculate_length(&s1); println!("The length of '{}' is {}.", s1, len);..

Programming/Rust 2018.08.14

쪼잔한 Rust 4.1. 소유권이 무엇이냐

Chapter 4. 소유권 이해하기 소유권(ownership)은 Rust의 특유한 개념으로, garbage collector 없이도 메모리를 안전하게 사용할 수 있도록 보장해준다. 따라서 Rust에서 소유권이 어떻게 작동하는 지 아는 것은 중요한 일이다. 이번 챕터에서 소유권과 관련된 borrowing, slice 등의 여러 가지 개념과 Rust가 어떻게 데이터를 메모리에 관리하는 지에 대해 얘기해보겠다. Chapter 4.1. 소유권이란? 모든 프로그램은 실행하는 동안 컴퓨터의 메모리를 관리해야 한다. 어떤 언어는 실행하는 동안 사용하지 않는 메모리를 계속 추적해서 관리하는 garbage collection을 사용하기도 하고, 어떤 언어는 직접 메모리를 할당하고 풀어줘야 한다. Rust는 또 다른 방식..

Programming/Rust 2018.08.09

쪼잔한 Rust 3. 일반적인 프로그래밍 개념들

Rust는 그 사용법을 익히는 것만으로도 주니어 레벨에서 안전한 프로그래밍에 대한 철학을 배울 수 있겠다고 생각하게 될 정도로 철저하게 설계된 언어라고 생각한다. 공식 문서인 "The Rust Programming Language" 1독을 했지만, 역시나 일로써 계속 접하지 않으면 그 지식이 조금씩 날라가버리는 것이 아까웠다. 그래서 내 스스로도 다시 정리를 하고, 요점만 정리해서 공유하고자 "쪼잔한 Rust" 시리즈를 시작한다. 이 이름은 clickbait 용도로 사용했을 뿐, 공식 문서를 번역하는 것이 주된 내용이 될 것이다. 본문 번역에 치중하되, 그 양이 많기 때문에 핵심적인 내용만 고르려고 노력했다.한 챕터씩 차근 차근 이어나가겠다. Chapter 2는 생략하고 (그래도 직접 읽어보시길 추천한다..

Programming/Rust 2018.07.20

작지만 강하다, Suckless 소프트웨어

Suckless 데스크탑 환경에 대해 간단하게 설명하고, 그 중 가장 핵심적인 프로그램인 dwm의 설치 과정과 사용법을 정리해본다. 미리보는 Suckless 환경 백문이 불여일견이므로, 서브레딧 r/unixporn에서 Suckless 소프트웨어를 충실히 사용하면서도 가장 예쁜 예시를 꼽아왔다 (홍보 대사 급 무브). [dwm] Cherry and rose from r/unixporn 위에 보이는 전반적인 디스플레이 환경과, 터미널 에뮬레이터, 인터넷 브라우저, 탭 도구 모두 Suckless 소프트웨어이다. 위 예시는 커스터마이징 경험이 꽤 있어야 구축 가능한 환경이고, 초보인 나는 외관 변경 없이 기본적인 기능만을 사용하고 있다. 그래도 기본적으로 웹서핑을 제외한 자신의 대부분의 일이 터미널에서 이루어진..

GNU-Linux 2018.06.16

왜 Python에는 GIL이 있는가

Python 사용자라면 한 번 쯤은 들어봤을 (안 들어봤다 해도 괜찮아요) 악명 높은 GIL (Global Interpreter Lock)에 대해 정리해본다. Global Interpreter Lock그래서 GIL은 무엇인가? Python Wiki에서는 이렇게 말한다. In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. This lock is necessary mainly because CPython's memory management is not threa..

Programming/Python 2018.06.02

Deep Learning, NLP, 그리고 Representation

이 글은 Christopher Olah가 2014년 7월에 쓴 글을 우리 말로 번역한 것이다. Deep learning이 자연어 처리(natural language processing, NLP) 분야에서 성취해낸 많은 연구 결과들을 짚어보면서, 도대체 어떻게 deep learning이 이렇게 문제를 잘 해결해 내는 것인지에 대한 대답을 굉장히 구체적으로 설명한 멋진 글이라고 생각한다. 기본적으로 neural network에 대해서 이해하고 있어야 이 글의 내용을 원활하게 이해할 수 있으리라 생각한다. 저자의 홈페이지에 neural network에 대한 주옥같은 글들이 많으므로 관심이 있다면 둘러보시길 추천한다. 우리 말로 옮기기 애매한 용어는 영어 단어 그대로 표기했고, 원문에 있는 그림을 그대로 가져다..

Machine Learning 2018.04.17

Long Short-Term Memory (LSTM) 이해하기

이 글은 Christopher Olah가 2015년 8월에 쓴 글을 우리 말로 번역한 것이다. Recurrent neural network의 개념을 쉽게 설명했고, 그 중 획기적인 모델인 LSTM을 이론적으로 이해할 수 있도록 좋은 그림과 함께 한 걸음씩 설명하는 멋진 글이라고 생각한다. 기본적으로 neural network에 대해서 이해하고 있어야 이 글의 내용을 원활하게 이해할 수 있으리라 생각한다. 저자의 홈페이지에 neural network에 대한 주옥같은 글들이 많으므로 관심이 있다면 둘러보시길 추천한다. 우리 말로 옮기기 애매한 용어는 영어 단어 그대로 표기했고, 원문에 있는 그림을 그대로 가져다 썼다. 물론 저자의 허락을 받고 번역했다. 오역에 대한 지적이나 내용에 대한 피드백은 항상 감사합..

Machine Learning 2018.04.10

Convolutional Neural Networks: 모듈 별로 쪼개서 보기

이 글은 Christopher Olah가 2014년 7월에 쓴 글을 우리 말로 번역한 것이다. Convolutional layer가 기존 neural network를 어떻게 발전시켰는지에 대해 좋은 그림들과 함께 이론적으로 잘 설명했고, 그 당시 핫한 연구 결과를 토대로 그 의미를 느낄 수 있도록 한 굉장히 좋은 글이라고 생각한다. 저자의 홈페이지에 neural network에 대한 주옥같은 글들이 많으므로 관심이 있다면 둘러보시길 추천한다.기본적으로 neural network에 대해서 이해하고 있어야 이 글의 내용을 원활하게 이해할 수 있으리라 생각한다. (염치없는 홍보 문구) 혹시 neural network를 먼저 알고 싶다면 역자의 다른 글도 나쁘지 않다. 우리 말로 옮기기 애매한 용어는 영어 단어..

Machine Learning 2018.04.07