'concept'에 해당되는 글 3건
- 2009/10/20 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6)
- 2009/07/23 잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째 (8)
- 2009/07/13 수학적 엄밀함으로 살펴보는 C++ 타입과 알고리즘
- 차세대 게임개발 언어로 D에 주목하는 이유 - 2
Tweet
- Game Development
- 2009/10/20 21:10
- Alexander Stepanov, C++0x, concept, D programming language, D 언어, generic programming, lambda, metaprogramming, Range, 람다, 메타프로그래밍
-
이전글: 차세대 게임개발 언어로 D에 주목하는 이유 - 1
람다
함수형 언어의 대두와 함께 최근 각종 언어에서 람다의 지원이 유행인데요. C++0x에서도 지원 예정입니다. D는 역시 아주 깔끔하고 간소한 문법으로 익명 함수를 지원하고 있습니다.
위에서 다음 줄에 주목해주세요.
기본적으로 다음과 같은 문법으로 정렬 시의 정렬 함수를 지정해 줄 수 있습니다.
!(...) 안의 다음 부분이 실제 람다식입니다.
이와 같이 인자형이나 리턴 타입을 따로 명시해줄 필요도 없습니다. 또한, 전역 변수가 아닌 freqs 변수를 람다 함수 내에서 접근하고 있는데요. 이러한 기능으로 매우 강력한 람다식이 가능해집니다. 보통은 이런 기능을 위해 성능이 희생되는 경우가 많은데, D언어는 "지역 인스턴스화(local instantiation)"이라는 고유의 기능으로 간접 호출 없이 이러한 기능을 제공하고 있습니다.
참고자료
How Nested Functions Work - part1 by Walter Bright
How Nested Functions Work - part2 by Walter Bright
템플릿
C++에서 템플릿은 고급 기법에 속합니다. 대부분의 프로그래머들은 형 매개변수화 정도로만 템플릿을 사용하고, 코드생성엔진으로 템플릿 메타프로그래밍을 활용하는 것은 선택받은(?) 일부를 위한 흑마법의 영역으로 남겨져 있습니다. D는 이러한 템플릿의 강력함을 쉽게 활용할 수 있도록 설계되었습니다.
어떤 언어가 제너릭 프로그래밍을 제대로 지원하는지 평가하는데 일명 STL의 창시자인 Alexander Stepanov가 제시한 "스테파노프의 리트머스 테스트"가 유용합니다. 해당 언어 내에서 다음 세 함수를 구현할 수 있느냐가 바로 그 테스트입니다.
1. max 제너릭 함수
함수 정의 중간에 나오는 if가 신기하실 겁니다. 사용자가 크기 비교가 불가능한 타입들을 max 함수의 두 인자로 주었을 때, 깔끔한 에러 메시지를 출력하기 위해 제한을 거는 역할을 합니다. C++0x에 도입될뻔했던 concept의 기능을 어느정도 수행한다 보시면 되겠습니다.
아래와 같이 인자를 세 개 이상 받는 경우도 간단히 처리가능합니다.
2. swap 제너릭 함수
의외로 각 경우에 모두 최적으로 돌아가도록 구현하기 매우 힘든 경우 중 하나입니다. D에서는 위와 같이 구현하면 되는데요, pointsTo 함수를 어떻게 구현하는지는 설명하지 않겠습니다. (궁금하신 분은 책을 구입해주세요. ^^)
3. linearSearch 제너릭 함수
선형검색 제너릭 함수는 위처럼 D가 기본지원하는 range 개념을 이용해 매우 간단하게 구현됩니다.
참고자료
An Interview with A. Stepanov
이번 회는 여기까지입니다. 사실 짧은 내용과 부족한 글솜씨로 D의 강력함과 깔끔함을 충실히 전달하기가 힘들군요; 책을 사보고 싶은 욕구가 생기실 정도로만 동기부여가 되었으면 좋겠습니다. ^^
기타 참고자료
D (programming language) - Wikipedia
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
람다
함수형 언어의 대두와 함께 최근 각종 언어에서 람다의 지원이 유행인데요. C++0x에서도 지원 예정입니다. D는 역시 아주 깔끔하고 간소한 문법으로 익명 함수를 지원하고 있습니다.
위에서 다음 줄에 주목해주세요.
기본적으로 다음과 같은 문법으로 정렬 시의 정렬 함수를 지정해 줄 수 있습니다.
!(...) 안의 다음 부분이 실제 람다식입니다.
이와 같이 인자형이나 리턴 타입을 따로 명시해줄 필요도 없습니다. 또한, 전역 변수가 아닌 freqs 변수를 람다 함수 내에서 접근하고 있는데요. 이러한 기능으로 매우 강력한 람다식이 가능해집니다. 보통은 이런 기능을 위해 성능이 희생되는 경우가 많은데, D언어는 "지역 인스턴스화(local instantiation)"이라는 고유의 기능으로 간접 호출 없이 이러한 기능을 제공하고 있습니다.
참고자료
How Nested Functions Work - part1 by Walter Bright
How Nested Functions Work - part2 by Walter Bright
템플릿
C++에서 템플릿은 고급 기법에 속합니다. 대부분의 프로그래머들은 형 매개변수화 정도로만 템플릿을 사용하고, 코드생성엔진으로 템플릿 메타프로그래밍을 활용하는 것은 선택받은(?) 일부를 위한 흑마법의 영역으로 남겨져 있습니다. D는 이러한 템플릿의 강력함을 쉽게 활용할 수 있도록 설계되었습니다.
어떤 언어가 제너릭 프로그래밍을 제대로 지원하는지 평가하는데 일명 STL의 창시자인 Alexander Stepanov가 제시한 "스테파노프의 리트머스 테스트"가 유용합니다. 해당 언어 내에서 다음 세 함수를 구현할 수 있느냐가 바로 그 테스트입니다.
1. n>=2 의 원소들 중에서 최대값을 알려주는 제너릭 함수. 이 함수는 모든 정렬 가능 타입에 적용할 수 있어야 한다.D로 이러한 것들이 어떻게 가능한지 간단히 결과만 보여드리겠습니다.
2. 두 값을 효율적으로(예를 들면, 상수 메모리 소모) 뒤바꾸는(swap) 제너릭 함수
3. 임의의 컬렉션에서 한 아이템을 선형 검색하는 제너릭 함수. 컬렉션은 빌트인 타입일 수도 혹은 언어가 정의한 일련의 프로토콜을 만족하는 사용자정의 타입일 수도 있다.
1. max 제너릭 함수
함수 정의 중간에 나오는 if가 신기하실 겁니다. 사용자가 크기 비교가 불가능한 타입들을 max 함수의 두 인자로 주었을 때, 깔끔한 에러 메시지를 출력하기 위해 제한을 거는 역할을 합니다. C++0x에 도입될뻔했던 concept의 기능을 어느정도 수행한다 보시면 되겠습니다.
아래와 같이 인자를 세 개 이상 받는 경우도 간단히 처리가능합니다.
2. swap 제너릭 함수
의외로 각 경우에 모두 최적으로 돌아가도록 구현하기 매우 힘든 경우 중 하나입니다. D에서는 위와 같이 구현하면 되는데요, pointsTo 함수를 어떻게 구현하는지는 설명하지 않겠습니다. (궁금하신 분은 책을 구입해주세요. ^^)
3. linearSearch 제너릭 함수
선형검색 제너릭 함수는 위처럼 D가 기본지원하는 range 개념을 이용해 매우 간단하게 구현됩니다.
참고자료
An Interview with A. Stepanov
이번 회는 여기까지입니다. 사실 짧은 내용과 부족한 글솜씨로 D의 강력함과 깔끔함을 충실히 전달하기가 힘들군요; 책을 사보고 싶은 욕구가 생기실 정도로만 동기부여가 되었으면 좋겠습니다. ^^
기타 참고자료
D (programming language) - Wikipedia
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 차세대 게임개발 언어로 D에 주목하는 이유 - 마지막 (0) | 2009/12/18 |
|---|---|
| 크라이텍 아카데미 (0) | 2009/12/02 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 2 (6) | 2009/10/20 |
| 크라이엔진 3 발표와 크라이텍코리아 구인 (0) | 2009/10/18 |
| 분산버전관리 머큐리얼로 개인작업 관리하기 (2) | 2009/10/03 |
| 차세대 게임개발 언어로 D에 주목하는 이유 - 1 (10) | 2009/09/19 |
- 잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째
Tweet
- Game Development
- 2009/07/23 19:59
- C++, C++0x, concept, constant expressions, constexpr, CPP, Cpp0x, defaulted and deleted functions, delegating constructors, enum class
-
최근 C++0x에서 concept 기능을 빼기로 최종 결정되면서 C++계가 나름 시끄러웠습니다. 그러면서 C++0x에 제가 알고 있던 큰 변화들 말고도 자잘하지만 유용한 변화가 꽤 많다는 것을 알게 되었습니다. 앞으로 두세 차례에 걸쳐 그런 기능들을 정리해보려 합니다.
enum class 열거형 클래스
기존 열거형의 다음과 같은 세가지 문제를 해결하고자 나온 놈입니다.
constant expressions 상수표현식
위에서 세번째 case문 같은 것이 가능해집니다.
당연히 컴파일 시점에 계산할 수 있는 것만 constexpr로 지정 가능합니다.
위와 같은 활용도 가능
defaulted and deleted functions 함수 자동생성 버전 사용 및 사용불가 지정
기존에는 복사를 방지하려고 복사 생성자와 대입 연산자를 private에 둔다던가 하는 방법을 썼었죠. 이제 다음과 같이 명시적 지정이 가능합니다.
또한 다음과 같이 컴파일러 자동 생성 버전을 사용함을 명시적으로 나타낼 수도 있습니다.
delegating constructors 생성자 위임
C++98에서는 여러 생성자가 같은 작업을 하도록 하려면 중복 코드를 짜거나 다음과 같이 "init()" 함수 같은 것을 만들어야 했습니다.
C++0x에서는 다음과 같이 한 생성자에서 다른 생성자에 작업을 위임할 수 있습니다.
이번 회는 여기까지입니다. C++ 사용하면서 불편하거나 번거로웠던 사항들을 많이 해결하고 있는 느낌입니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
enum class 열거형 클래스
기존 열거형의 다음과 같은 세가지 문제를 해결하고자 나온 놈입니다.
- 기존 열거형은 암묵적으로 int로 변환이 되어, 그런 행동을 원치 않을 경우 문제가 된다.
- 기존 열거형은 그를 포함하는 스코프로 각 토큰들을 노출시켜, 이름 충돌을 발생시킬 수 있다.
- 열거형의 기반 타입을 지정할 수 없어, 혼란과 호환성 문제가 발생하고 전방 선언을 할 수 없다.
constant expressions 상수표현식
- 더 일반적 상수표현식 제공
- 사용자 정의 타입에 대한 상수표현 허용
- 컴파일 시점에 초기화가 이루어지도록 보장하는 도구 제공
위에서 세번째 case문 같은 것이 가능해집니다.
당연히 컴파일 시점에 계산할 수 있는 것만 constexpr로 지정 가능합니다.
위와 같은 활용도 가능
defaulted and deleted functions 함수 자동생성 버전 사용 및 사용불가 지정
기존에는 복사를 방지하려고 복사 생성자와 대입 연산자를 private에 둔다던가 하는 방법을 썼었죠. 이제 다음과 같이 명시적 지정이 가능합니다.
또한 다음과 같이 컴파일러 자동 생성 버전을 사용함을 명시적으로 나타낼 수도 있습니다.
delegating constructors 생성자 위임
C++98에서는 여러 생성자가 같은 작업을 하도록 하려면 중복 코드를 짜거나 다음과 같이 "init()" 함수 같은 것을 만들어야 했습니다.
C++0x에서는 다음과 같이 한 생성자에서 다른 생성자에 작업을 위임할 수 있습니다.
이번 회는 여기까지입니다. C++ 사용하면서 불편하거나 번거로웠던 사항들을 많이 해결하고 있는 느낌입니다.
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Game Development' 카테고리의 다른 글
| 크라이텍 한국 지사에서 일할 프로그래머분들 모십니다 (14) | 2009/08/01 |
|---|---|
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 두번째 (2) | 2009/07/29 |
| 잘 알려지지 않은 C++0x의 유용한 기능들 - 첫번째 (8) | 2009/07/23 |
| Parallelism이란 무엇인가?! (0) | 2009/07/22 |
| 두가지 C++ 차세대 병렬 플랫폼 간단 비교 (1) | 2009/07/21 |
| VSTS 2010 팀 3분기 맴버 모집 (0) | 2009/07/09 |
- 수학적 엄밀함으로 살펴보는 C++ 타입과 알고리즘
Tweet
- Book Review
- 2009/07/13 04:16
- C++, concept, Elements of Programming, iterator, STL, 알고리즘
-
책 제목과 C++을 만든 이인 Bjarne Stroustrup의 추천 글귀에 끌려 이북으로 구입하였습니다.
일단 총평은 다음과 같습니다.
- 굉장히 신선한 접근이다.
- C++ 기준으로 설명하니 좋다.
- 신선한 만큼 개념 잡기가 쉽지 않다; (생소한 용어와 상당히 추상적 수학적 개념 대거 등장)
- 제대로 이해하려면 최소 한번 더 읽어봐야 할듯
- 그럼에도 건질만한 건 있었다...
* 이 포스트는 blogkorea [블코채널 : 웹, 컴퓨터, it에 관련된 유용한 정보 및 소식] 에 링크 되어있습니다.
'Book Review' 카테고리의 다른 글
| 프로그래밍 언어의 창시자들 (0) | 2009/09/17 |
|---|---|
| 글쓰기 공작소 - 나도 글 잘 쓰고 싶다 (4) | 2009/07/31 |
| 수학적 엄밀함으로 살펴보는 C++ 타입과 알고리즘 (0) | 2009/07/13 |
| 번역으로 살펴보는 우리말 (0) | 2009/06/01 |
| The Productive Programmer (10) | 2009/04/12 |
| 긍정과 부정, 3:1의 임계점을 향해 (6) | 2009/04/09 |











Recent comment