[Nim 언어 특강] 템플릿
·
Programming Languages/Nim
Templates (템플릿)템플릿(Templates) 은 Nim의 추상 구문 트리(AST, Abstract Syntax Tree) 수준에서 작동하는 단순한 치환(substitution) 메커니즘입니다. 템플릿은 컴파일러의 의미 분석 단계(semantic pass) 에서 처리되며, 언어의 나머지 부분과 자연스럽게 통합됩니다. C언어의 전처리기 매크로(preprocessor macros) 와 달리 템플릿은 구조적이며, 부작용이나 예측 불가능한 문제를 일으키지 않습니다. 템플릿 호출 방법템플릿을 호출할 때는 일반적인 프로시저 호출 문법(proc call) 을 그대로 사용합니다. ```nimtemplate `!=` (a, b: untyped): untyped = # 이 정의는 System 모듈 안에 존재합니다..
[Gleam 언어 강좌] Multi target externals, External gleam fallbacks
·
Programming Languages/Gleam
Multi target externals (다중 타깃 외부 함수)하나의 함수에 대해 여러 개의 외부 구현(external implementation) 을 지정할 수 있습니‍다.이렇게 하면 동일한 함수가 Erlang과 JavaScript 양쪽 런타임(runtime) 에서 모두 동작할 수 있습니‍다. 만약 현재 컴파일 대상(target)에 대한 구현이 존재하지 않는다면,컴파일러는 에러(error) 를 발생시킵니‍다. 구현 시 유의점가능하다면 모든 타깃(Erlang, JavaScript) 에 대해 구현을 제공하는 것이 바람직합니‍다.하지만 입출력(IO) 과 동시성(concurrency) 처리 방식이 서로 다르기 때문에 항상 가능한 것은 아닙니다.Erlang 에서는 동시 입출력(concurrent IO)이 런타..
[Nim 언어 강좌] 제네릭
·
Programming Languages/Nim
Generics (제네릭)제네릭(Generics) 은 Nim에서 프로시저(proc), 이터레이터(iterator), 또는 타입(type) 을타입 매개변수(type parameters) 로 매개화(parametrize) 하는 기능입니다. 제네릭 매개변수는 대괄호([]) 안에 작성하며, 예를 들어 `Foo[T]` 와 같이 사용합니다.이 기능은 효율적이고 타입 안전한 컨테이너(type-safe container) 를 만들 때 특히 유용합니다. ```nimtype BinaryTree*[T] = ref object # BinaryTree는 제네릭 타입이며, 제네릭 매개변수 T를 가짐 le, ri: BinaryTree[T] # 왼쪽(left), 오른쪽(right) 서브트리 — nil일 수 있음..
[Gleam 언어 강좌] Bool assert, Externals
·
Programming Languages/Gleam
Bool assertBool `assert`는 Gleam에서 프로그램을 강제로 패닉(panic) 시킬 수 있는 마지막 방법으로, 주로 테스트(assertion) 를 작성할 때 사용합니‍다. 이는 `let assert`와 유사하지만, 특정 패턴에 맞는지를 검사하는 대신,불리언(Boolean) 값이 `True`로 평가되는지를 검사합니‍다. 다른 패닉 관련 키워드(panic, todo, let assert)와 마찬가지로,`as` 키워드를 사용하면 커스텀 메시지를 추가할 수 있습니‍다.이 경우, 값이 `False`로 평가되면 일반적인 "Assertion failed" 대신지정한 메시지가 표시됩니‍다. Bool `assert`는 테스트 코드(test code) 에서 사용하도록 설계되었으며,애플리케이션이나 라이브러..
[Nim 언어 강좌] 예외처리 - try, raise, 예외발생명시
·
Programming Languages/Nim
Exceptions (예외 처리)Nim에서 예외(Exception) 는 객체(Object) 로 구현됩니다.관례적으로, 예외 타입의 이름은 'Error' 로 끝납니다. 표준 라이브러리의 system 모듈에는 예외 계층 구조(exception hierarchy) 가 정의되어 있으며,보통 여기에 맞춰 정의하는 것이 좋습니다. 모든 예외 타입은 `system.Exception` 을 상속하며,이 기본 클래스가 공통 인터페이스(common interface) 를 제공합니다. 예외의 메모리 관리예외 객체는 힙(heap) 에서 할당되어야 합니다.그 이유는 예외의 생존 기간(lifetime)이 예측 불가능하기 때문입니다.컴파일러는 스택(stack) 에서 생성된 예외를 raise 하려고 하면 오류를 발생시킵니다. 모든 예..
[Gleam 언어 강좌] todo, panic, let assert
·
Programming Languages/Gleam
todo`todo` 키워드는 아직 구현되지 않은 코드(not yet implemented) 를 표시하는 데 사용됩니‍다. `as "some string"` 구문은 선택 사항(optional)이지만,코드 내에 여러 개의 todo 블록이 있는 경우에는 어떤 부분이 미완성인지 구분하기 위해 메시지를 포함시키는 것이 좋습니‍다. todo가 사용되면 Gleam 컴파일러는코드가 완성되지 않았다는 경고(warning) 를 출력합니‍다.만약 해당 코드가 실제로 실행되면, 프로그램은 해당 메시지와 함께 충돌(crash) 합니‍다. ```rustpub fn main() { todo as "I haven't written this code yet!"}pub fn todo_without_reason() { todo}```..
[Nim 언어 강좌] 프로퍼티, 동적 디스패치
·
Programming Languages/Nim
Properties (프로퍼티)앞선 예시에서 볼 수 있듯이, Nim은 get 프로퍼티(get-properties) 가 따로 필요하지 않습니다.일반적인 getter 프로시저(proc) 를 메서드 호출 구문(method call syntax) 으로 호출하면 같은 효과를 얻을 수 있습니다. 하지만 값을 설정(set) 할 때는 다른 문법이 필요합니다 — 이를 위해 setter 전용 구문이 존재합니다. ```nimtype Socket* = ref object of RootObj h: int # 별표(*)가 없으므로 외부 모듈에서 접근 불가 proc `host=`*(s: var Socket, value: int) {.inline.} = ## host 주소 설정자(setter) s.h = value pro..
[Gleam 언어 강좌] opaque type, use
·
Programming Languages/Gleam
불투명 타입 (Opaque types)Opaque type(불투명 타입) 이란,타입 자체(custom type)는 공개(public)되어 다른 모듈에서도 사용할 수 있지만,그 생성자(constructor) 는 비공개(private)이며 해당 타입을 정의한 모듈 내부에서만 사용할 수 있는 타입을 말합니‍다. 이 방식은 다른 모듈이 그 타입의 값을 직접 생성하거나패턴 매칭(pattern matching)을 수행하는 것을 방지합니‍다. 이러한 특성은 스마트 생성자(smart constructor) 를 만들 때 유용합니‍다.스마트 생성자는 타입의 값을 생성하되,프로그래머가 직접 생성자를 호출할 때보다 더 제한적인 규칙을 적용하는 함수입니‍다.이를 통해 타입이 항상 올바르게 사용되도록 보장할 수 있습니‍다. 예를..
[Nim 언어 강좌] 형 변환, object variant
·
Programming Languages/Nim
Type Conversions (형 변환)Nim은 형 변환(type conversion) 과 형 캐스팅(type casting) 을 명확히 구분합니다.캐스팅(cast) 은 `cast` 연산자를 사용하여, 비트 패턴(bit pattern) 을 다른 타입으로 강제로 해석하도록 합니다.반면, 형 변환(conversion) 은 값의 의미(abstract value) 를 보존하면서 다른 타입으로 변환합니다. (비트 패턴 자체를 보존할 필요는 없습니다.) 형 변환이 불가능한 경우, 컴파일러가 에러를 발생시키거나 예외(exception) 를 던집니다.형 변환의 문법은 다음과 같습니다: `목표타입이름(변환할 표현식)` 즉, 함수 호출 구문처럼 작성합니다. ```nimproc getID(x: Person): int = ..
[Gleam 언어 강좌] Dict, Option Module
·
Programming Languages/Gleam
Dict 모듈 (Dict Module)`gleam/dict` 표준 라이브러리 모듈은 Gleam의 `Dict` 타입과 이를 다루기 위한 함수들을 정의합니‍다.Dict(딕셔너리) 는 키(key) 와 값(value) 의 쌍으로 이루어진 집합(collection)이며,다른 언어에서는 hashmap 혹은 table(테이블) 이라고 부르기도 합니‍다.`new` 와 `from_list` 함수는 새로운 Dict를 생성하는 데 사용됩니‍다.`insert` 와 `delete` 함수는 Dict에 항목을 추가하거나 제거하는 데 사용됩니‍다. 리스트(List)와 마찬가지로, Dict도 불변(immutable) 합니‍다.즉, Dict에 항목을 삽입하거나 삭제하면 기존 Dict를 수정하는 대신,해당 항목이 추가 또는 제거된 새로운..
sierraKilo
'Programming Languages' 카테고리의 글 목록