프로그래밍 언어의 몇 가지 좋은 아이디어

4 days ago 16

흐름 타이핑, 차용 검사, 계약 프로그래밍은 각각 타입 추론, 메모리 접근 규칙, 불변식 명시를 통해 프로그램을 다루는 유용한 언어 기능임 Crystal의 흐름 타이핑은 코드 위치에 따라 변수의 타입을 추론하고, 여러 타입이 가능하면 유니온 타입으로 처리해 정적 타입 언어에서도 동적인 사용감을 제공함 Rust의 차용 검사기는 가변 참조 하나 또는 여러 불변 참조만 허용하는 규칙으로 컴파일 시점에 데이터 경쟁을 방지하지만, 컴파일 시점 검사와 복잡성 증가라는 비용이 있음 D의 계약 프로그래밍은 함수의 사전/사후 조건과 객체 수준 불변식을 언어 문법으로 지원해 프로그램이 지켜야 할 조건을 명시함 D는 프로그램의 정확성 버그를 나타내는 assert 와 입력이나 환경 같은 외부 문제로 예외를 발생시키는 enforce 를 의미상 구분함 흐름 타이핑과 타입 좁히기 Crystal은 Ruby와 문법이 매우 비슷한 정적 타입 검사 기반 컴파일 언어이며, 변수의 생애 동안 서로 다른 타입의 값을 대입할 수 있음 흐름 타이핑(flow typing) 은 코드의 각 위치에서 보장할 수 있는 타입을 추론함 my_var = 5 직후에는 타입이 Int32임 조건문 안에서 my_var = "hello!"를 실행한 직후에는 String임 조건문을 벗어나면 어느 값인지 확정할 수 없으므로 타입이 Int32 | String이 됨 유니온 타입인 변수에 곧바로 String 메서드를 호출할 수는 없으며, 타입 좁히기(type narrowing) 가 필요함 if my_var.is_a?(String) 같은 검사로 가능한 타입을 String으로 좁힌 뒤 호출할 수 있음 정교한 타입 추론 덕분에 큰 런타임 비용을 치르지 않고도 컴파일 언어를 동적 언어처럼 사용할 수 있음 TypeScript도 흐름 타이핑과 타입 좁히기를 지원함 차용 검사와 데이터 경쟁 방지 Rust는 가비지 컬렉터 없이 메모리 안전성을 보장하는 시스템 프로그래밍 언어임 데이터 경쟁(data race) 은 여러 스레드가 동기화 없이 같은 메모리 위치를 동시에 읽고 쓰는 상황이며, 동시성 프로그램의 주요 메모리 안전성 버그 유형임 차용 검사기(borrow checker) 는 다음 규칙을 컴파일 시점에 강제해 데이터 경쟁을 정적으로 방지함 차용은 소유자의 스코프보다 오래 유지될 수 없음 가변 참조 &mut T 하나 또는 불변 참조 &T 하나 이상 중 한쪽만 허용함 이 규칙은 여러 읽...

Read Entire Article