본문 바로가기
반응형

전체 글861

소유권으로 알아보는 러스트의 상큼한(?) 메모리 관리 시스템 러스트(Rust)라는 언어의 유명세는 그 특유의 메모리 관리 시스템 덕분에 널리 알려진 것 같습니다. 독창적이면서도 릭(leak)이나 레퍼런스 공유로 발생하는 여러 문제를 컴파일 때 미리 대비할 수 있기도 하기에 러스트의 특징과 장단점이 잘 드러나는 기능인 것 같네요. 이번 글은 러스트의 소유권 개념과 메모리 관리 시스템을 간단히 살펴보는 글입니다. 메모리의 라이프사이클(Life Cycle) 대부분의 언어들이 그렇지만, 변수가 인스턴스화 되는 시점에 메모리가 할당(allocate)됩니다. 상식적이라면 상식적인 이야기지요. 그렇다면 이 메모리는 언제 해제(deallocate) 될까요? 러스트의 메모리 관리의 기본은 바로 스코프(Scope)입니다. 변수는 자신이 생성된 스코프를 벗어나면 사라지는데 이걸 메모.. 2020. 8. 15.
Emacs 27.1 안정버전 공식 릴리즈 GNU Emacs의 27.1 버전이 공식 릴리즈 되었습니다. 이번 릴리즈는 안정 버전 릴리즈이며 27 버전의 첫 릴리즈이기도 합니다. 아래는 공식 사이트에서 정리하고 있는 릴리즈 내용입니다.Built-in support for arbitrary-size integersText shaping with HarfBuzzNative support for JSON parsingBetter support for Cairo drawingPortable dumping used instead of unexecSupport for XDG conventions for init filesAdditional early-init initialization fileLexical-binding is used by defaultBui.. 2020. 8. 12.
러스트의 함수와 클로저 함수는 반복되는 명령을 별도로 분리해서 쉽게 호출할 수 있게 해 주기 때문에 모든 프로그래밍 언어에서 아주 중요한 기능입니다. 러스트도 당연히 이 함수 기능이 제공되지요. 이 함수 기능을 살펴보고, 하는 김에 함수와 비슷한 클로저도 살펴보기로 했습니다.함수(Functions)이미 main 함수에서도 봐왔지만 함수는 fn이라는 명령으로 정의할 수 있습니다.fn hello() { println!("Hello?");}fn main() { hello();}설명할 필요도 없을 만큼 간단한 예제이지만 간략히 설명하자면 "Hello?"라는 메시지를 출력하는 hello라는 이름의 함수를 만들고 이를 main 함수에서 호출하고 있는 예제입니다. 이제 저 "Hello?" 메시지를 찍고 싶다면 hello 함수만 .. 2020. 8. 10.
드디어 27인치 아이맥 리프레시, 하지만... 아직 한국 출시일은 미정이지만 애플스토어에서 신형 27인치 아이맥이 출시되었습니다. 하지만 문제는 뭐요? 네. 디자인이 옛날 투박한 그대로라는 점입니다. 물론 안쪽은 싹 갈아 엎어졌죠. 10세대 인텔 프로세서가 탑재되었습니다. 하지만 미세 공정을 따라가지 못하는 곧 죽을 운명(?)의 인텔 칩이라 그다지 땡기지가 않네요. 거기다 새로운 디자인을 기대했던 사람에겐 찬물을 끼얹는 셈이지요. 이미 앞선 소식에서 이럴 거라는 것을 알고 있었기에 충격이 크진 않지만, 그래도 신형 디자인을 기대하고 있던 사람으로서 이 물은 정말 차가운 물이네요. 물론 사진, 영상, 음악 작업용 맥이 필요하다면 아이맥은 가격 대비 효율이 굉장히 좋은 맥 중 하나이므로 추천할 수 있는 제품입니다. 27인치 아이맥 최저가가 250만 원 .. 2020. 8. 5.
러스트의 제어 구조 이번 편은 러스트(Rust)의 제어 구조 혹은 흐름 제어(Control Flow)에 관해서 살펴보는 글입니다. 매우 기초적인 내용이고 앞선 글들에서 일부 언급된 내용도 있어서 신선하지 않을 수도 있는 내용입니다. 제어 구조라는 개념은 소프트웨어에서 굉장히 중요합니다. 예를 들어 게임을 하는데 키를 눌러도 정해진 대로만 캐릭터가 움직인다면 무슨 의미가 있을까요? 이런 식으로 직렬 흐름에 변화를 가하는 것이 바로 이 제어 구조 혹은 흐름 제어입니다. 조건에 따라 흐름을 다르게 하면서 필요한 일을 할 수 있게 제어하는 것이지요. 논리식 본론으로 가기 전에 러스트의 논리식도 간단히 살펴봅시다. 다른 언어를 안다면 그다지 언급하지 않아도 될 정도로 러스트의 논리식도 평이(?)한 편입니다. let cond = !(.. 2020. 8. 5.
애플 페이가 가까워지는 소리 애플은 애플 페이(Apple Pay)라는 자체 간편 결제 서비스가 있었지만 없었습니다(?). 한국에서는 말이죠. 여러 루머가 돌고 있지만 한국에서는 여러 사유로 아직 애플 페이가 서비스되고 있지 않습니다.그럼에도 언제 한국에 애플 페이가 들어오는지 혹은 애플 카드는 언제 나오는지에 관한 루머는 끊임없이 나오고 있습니다. 그만큼 기대치가 상당히 높다고 할 수 있겠지요. 다만 루머가 현실성이 부족했다는 지적도 함께 나오고 있습니다.그런데 오늘 블룸버그에서 나온 소식은 한국에 애플 페이의 등장 가능성을 더욱 높여줄 수 있을 것 같습니다.Apple Buys Startup to Turn iPhones Into Payment Terminals위 기사는 애플이 NFC를 이용하는 결제 스타트업인 모비웨이브(Mobeew.. 2020. 8. 1.
러스트의 기본 타입들 프로그램의 정의는 데이터를 이용해 연산을 하거나 컴퓨터에 특정 명령을 내리는 것입니다. 특히 이 연산 작업이 핵심이고 이걸 하려면 타입(Types)이라는 것을 필수적으로 알아야 합니다. 이 글에서는 러스트에서 제공하는 기본 타입을 정리하려 합니다. 참고로 여기서 기본 타입이라는 의미는 원시 타입(Primitive Types)과 함께 별도의 use 선언 없이 쓸 수 있는 타입들이라는 의미입니다. 물론 자의적인 기준입니다. 수치 타입 숫자 데이터를 저장하거나 연산하기 위한 타입을 뭉뚱그려서 수치 타입이라고 칭하겠습니다. 이 분류는 크게는 정수형과 실수형으로 나눌 수 있습니다. 정수형(Integer Types) 수치 타입 중 가장 자주 사용하게 될 것이 바로 정수형입니다. 정수란 소수점 없이 깔끔(?)한 숫자.. 2020. 7. 31.
러스트의 모듈 시스템과 접근 제어 모듈화는 프로그래밍에 있어 정말 중요한 요소입니다. 코드의 가독성과 함께 유지보수의 편리성에도 영향을 끼치지만, 그 자체로 설계가 되어 기능과 성능 자체에도 영향을 끼치지요. 러스트도 그래서 당연히 모듈화를 지원합니다. 다만 러스트의 모듈 시스템은 좀 독특한 편입니다. 몇 가지 시험을 해보면서 알아낸 내용을 정리해 보겠습니다. 러스트 모듈 시스템의 기초 러스트에서 모듈은 mod라는 키워드를 이용해 코드 어디서든 정의할 수 있습니다. mod foo { pub fn public_foo() { println!("foo::public_foo!") } fn private_foo() { println!("foo::private_foo!") } } fn main() { foo::public_foo(); } 위 예제는.. 2020. 7. 29.
2020 신형 아이맥(의 기운 빠지는) 루머 아이맥은 얇은 디자인이 채택된 지난 수년간, 즉 상당히 긴 기간 동안 디자인이 바뀌지 않고 있는 유일한(?) 애플의 맥 제품 중 하나입니다. 그래서 최근 들어 이 아이맥의 디자인 변경에 대해 많은(?) 기대와 시선이 몰리고 있습니다. (라고 개인적으로 생각합니다ㅋ)그 덕분에 최근 아이맥에 관한 다양한 루머가 나오고 있었습니다. 아이맥이 아이패드와 비슷한 디자인으로 새롭게 나올 것이다, 지난 WWDC20에서 신형 아이맥이 발표될 거다, 애플 실리콘을 탑재한 첫 맥은 아이맥이 될 것이다 등등 다양한 루머가 있었지만 정작 아직 제대로 발표된 소식은 없는 상태입니다. 그래서 기대만 부풀어 가고 있었지요.그런데 이번에 나온 루머는 이 기대에 약간 찬물을 끼얹는 것 같습니다.https://9to5mac.com/20.. 2020. 7. 26.
러스트의 시작점 main 함수 살펴보기 단독 실행 프로젝트에서 시작점은 매우 중요합니다. 그야 시작하는 곳이니깐요. C 언어와 비슷하게 러스트(Rust)도 시작점은 main이라는 이름의 함수에서 출발합니다. 이 함수와 관련해 개인적으로 궁금했던 몇 가지 사항을 정리해 보겠습니다. main 함수 위에서도 언급했지만, 러스트 프로그램이 시작되는 지점은 main이라는 이름을 가진 함수입니다. fn main() { // ... } 튜토리얼 등에서 자주 볼 수 있는 러스트의 메인 함수는 위와 같은 모양입니다. 여기에 코딩하는 모든 코드는 프로그램 실행 시 바로 실행됩니다. 보이지 않는 리턴 타입 C 언어에 익숙하다면 표준(?)적인 main 함수는 아래와 같이 기본적으로 리턴 타입을 가지고 있다는 것을 알고 있을 것입니다. int main() { ret.. 2020. 7. 26.
Cargo :: 러스트 프로젝트 및 패키지 매니저 러스트(Rust) 공부를 시작하기에 앞서 우선 Cargo에 대해 알아두면 좋을 것 같아 먼저 살펴봤습니다. Cargo는 러스트 프로젝트를 생성하고 의존성을 관리하기 위한 도구입니다. 거기다 필요한 외부 유틸리티 패키지도 설치할 수 있게 도와줍니다. 참고로 러스트를 제대로 설치했다면 Cargo도 설치되어 있을 테니 별도의 설치 걱정은 없습니다.이미 공식 매뉴얼 등에도 사용 방법이 잘 정리되어 있겠지만, 그냥 넘기기는 좀 섭섭하기도 해서 간단한 사용법을 정리해 보고자 합니다.새 프로젝트 생성하기아래와 같은 명령으로 새 러스트 프로젝트를 시작할 수 있습니다.cargo new PROJECT_NAME --bin위 명령은 실행 가능한 파일 프로젝트를 현재 디렉터리에 새로 생성합니다. 즉 PROJECT_NAME에 해.. 2020. 7. 24.
러스트(Rust) 시작해보기 최근 주변에서 러스트(Rust)라는 언어에 대한 관심이 폭증하고 있는 것 같습니다. 그래서 저도 자연스럽게 관심을 가지게 되는 것 같습니다. 그러다보니 궁금해져서 슬슬 공부를 시작해볼까 합니다. 이 글은 첫 글로써 간단한 소개와 함께 macOS에서 러스트 개발에 필요한 컴파일러와 도구들을 설치하는 방법을 알아봅시다. Rust? 러스트(Rust)는 프로그래밍 언어의 한 종류입니다. 소스 파일을 작성하여 이를 컴파일하여 기계어 파일로 변환한 후 이를 실행시키는 방식이며 따라서 시스템 소프트웨어 개발에 유리한 언어입니다. 그래서 C 언어가 사용되는 분야를 상당수 대체할 수 있을 것으로 생각됩니다. 그런데 여기에 현대적인 언어들이 가지고 있는 다양한 편의 기능을 추가로 제공하고 있어서 C 언어가 다루기 힘들었던.. 2020. 7. 23.
메뉴와 카테고리, 태그를 정비했습니다 생각만 하고 실천하지 않았던 일들을 이제야 저질러(?) 버렸습니다. 카테고리의 경우는 글을 쓰는 주제가 점점 넓어짐에 따라 이에 맞춰 늘리는 것이 좀 부담되었습니다. 티스토리 시스템 자체가 귀찮은 것도 있지만 현재 쓰는 스킨이 카테고리에 친화적이지 않거든요. 그래서 카테고리를 두 분류로 줄였습니다. 전문적인 글과 비전문적인 글로 말이죠. 나머지 구분은 이제 태그로 하기로 했습니다. 태그 구성에도 약간의 변화가 생겼는데, 카테고리를 대체할 메인 태그를 몇 가지 선발했습니다. 상단의 메뉴 대부분은 대표 태그로 구분하고 있습니다. 이제 주제를 늘리면 해당 주제의 태그로 메뉴를 추가하기만 하면 되겠네요. 당분간 운영해보면서 장단점을 파악해 봐야 할 것 같습니다만, 이미 저질렀기에 돌아가는 일은 거의 불가능하겠네.. 2020. 7. 22.
깃헙 페이지 VS 일반 블로깅 플랫폼 한동안 이 블로그를 방치하면서까지 깃헙 페이지를 열심히 관리하고 있었습니다. 하지만 GitHub을 마이크로소프트에서 인수한 뒤로 크고 작은 서버 장애들이 발생하고 있네요. 그러다 보니 깃헙 페이지(GitHub Pages)의 단점들이 조금씩 눈에 들어오기 시작했습니다.그래서 약간의 화풀이(?) 겸 다시 일반적인 블로그 플랫폼으로 옮겨올까 하는 진지한 고민을 하는 김에 일반 블로깅 플랫폼과 깃헙 페이지의 경험을 비교해보는 글을 한번 써보고자 합니다.깃헙 페이지의 장점원하는 마크업 언어 및 에디터 사용 가능아마도 가장 큰 장점은 이것일 것 같습니다. 원하는 언어로 원하는 에디터로 편하게 글을 작성할 수 있다는 큰 장점이 있습니다.개인적으로는 이맥스에서 글쓰기에 좋게 흰색 배경이라는 변태(?) 같은 색상을 쓸 .. 2020. 7. 21.
차세대 맥은 과연 어떻게 변화할까? 애플 실리콘 맥 출시 계획이 발표되면서 애플의 차세대 제품에 대한 관심이 나름(?) 뜨겁습니다. 예전 같으면 아이폰이 주목의 대상이었겠지만, 요즘은 이 ARM 기반의 맥에 이목이 집중되어 있을 않을까 생각됩니다. 그래서 여러 루머들도 덩달아서 많이 나오는 것 같네요. sixcolors.com/post/2020/07/what-changes-might-be-coming-to-new-mac-hardware/ What changes might be coming to new Mac hardware? macOS Big Sur is a big software change. Will the hardware follow? This week on Upgrade, Myke Hurley and I had some fun en.. 2020. 7. 6.
iOS에서 IDFA는 이제 못 쓰겠네요 IDFA란 IDentifier For Advertisers의 약자로 번역하자면 광고주를 위한 아이디 정도로 해석할 수 있습니다. 보통 사용자의 행동을 추적하기 위해 사용하는 디바이스 고유 아이디와도 비슷하게 볼 수 있는 아이디입니다.이미 WWDC20 키노트에서도 다수 강조했지만 애플은 프라이버시 보호를 전면에 내세우고 있습니다. 그 덕분인지 iOS 14부터 IDFA 제한을 좀 더 강화하겠다는 소식이 전해졌습니다. 앱스토어에 앱을 제출할 때 항상 IDFA를 사용하느냐고 물어오곤 하는데 바로 그 IDFA입니다.굳이 이 소식을 자세하게 적기 보다는 잘 정리된 글을 찾았기에 해당 글을 링크해 봅니다.https://singularkorea.github.io/2020-06-25/ios14-idfa-limit-ad-.. 2020. 6. 26.
Emacs 업그레이드 후 겪은 Doom Emacs 오류 문제 어느 날 Emacs 버전을 새로 올렸습니다. 대망의 27 버전으로 올렸지요. 별문제 없이 빌드가 되었고 Doom Emacs 스크립트만 다시 설치하는 과정을 거친 후 정상적으로 동작하는 것을 확인하였습니다.문제 발생그런데 개인적으로 작성한 어떤 스크립트를 동작시키니 아래와 같은 오류가 나기 시작했습니다.if: No catch for tag: emacs-version-changed, nil우와. 뭔 소린지 모르겠습니다. 태그를 잡을 수 없다니요. 아아...하지만 다행히도 구글링을 통해 선구자(?)들의 한숨과 해답을 찾을 수 있었습니다.이 문제의 원인은 빌드된 패키지가 들어있는 straight가 현재 동작 중인 Emacs 버전과 다른 버전으로 빌드가 되어서 발생한다고 합니다. 그렇다면 이 부분을 새로 빌드해 .. 2020. 6. 17.
야생의 Apple Developer 앱의 나타났다! 코로나19로 인해 온갖 국제 콘퍼런스들이 취소되고 축소되고 온라인으로 열리는 등 다양한 변화가 나타나고 있습니다. 애플 역시 6월 22일에 열릴 WWDC를 온라인으로 열겠다고 발표했지요. 그동안 뭔가를 준비하고 있다고 말만 무성했는데, 드디어 이 온라인 WWDC와 관련된 앱이 등장하였습니다. 앱스토어에서 Apple Developer 라는 이름으로 찾을 수 있는 이 앱은 이번 이벤트뿐만 아니라 과거 WWDC의 이벤트도 다루고 있어서 일회성 앱이라고 하기엔 너무 용도가 많겠네요. 대부분의 정보는 웹에서도 찾을 수 있어서 WWDC20의 정보를 획득하는 데 주로 사용될 것으로 생각됩니다. 따라서 이 이벤트를 기대하고 있었다면 미리 준비해 둬야겠지요? 그나저나 앱스토어 설치 페이지에서 이 앱은 앱 내 구입이 가능.. 2020. 6. 16.
728x90
반응형