프로그래밍 언어 탐방 - Nim
(본 글은 2020년 9월에 Nim 1.2.6 버전 기준으로 작성했습니다.) Nim은 System Programming Language를 표방하고 있습니다. System Programming Language의 대표적인 언어는 C이므로, Nim은 "더 나은 C"가 되는 것이 목표인 것으로 보입니다. 그렇다면 C에서 불편했던 점이 Nim에서 어떻게 개선됐는지 살펴봅시다. 1. 메모리 관리 C에서는 메모리를 수동으로 관리해줘야합니다. malloc, calloc, realloc 함수로 메모리를 동적할당했으면, free 함수로 메모리를 해제해줘야합니다. 반면에 Nim은 Garbage Collector를 사용하고 있습니다. type Entity* = ref object x*: int y*: int 이렇게 ref object 키워드를 사용해서 타입을 정의하면 참조 타입이 되고, 참조 타입의 메모리 관리를 자동으로 해줍니다. 여기까지는 Java와 다를 게 없습니다. 그런데 성능상의 이유로 참조 타입말고 값 타입을 사용하고 싶은 경우가 있는데, 이럴 때는 object 키워드만 사용해서 타입을 정의하면 됩니다. type EntityObj* = object x*: int y*: int 여기까지는 C#에서도 가능합니다. (struct는 값 타입, class는 참조 타입) 재미있는 점은 둘을 섞어서 사용할 수 있다는 것입니다. type EntityObj* = object x*: int y*: int type Entity* = ref EntityObj 위와 같이 하면, EntityObj를 값 타입으로 정의하고 Entity를 참조 타입으로 정의해서 둘 다 사용할 수 있게 됩니다. 값 타입(EntityObj)의 변수에 addr 함수를 사용하면 포인터(pointer)를 얻을 수 있는 반면에, 참조(Entity)를 얻을 수는 없습니다. 따라서 값 타입(EntityObj)용 함수와 참조 타입(Entit...