문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 D언어 (문단 편집) === 주요 기능 및 특징 === D언어는 멀티 패러다임을 추구하며, 문제에 대한 가장 명확한 한 가지 해답을 추구하는 것이 아닌 다양한 해답을 추구한다. 재밌는 점은 함수형 프로그래밍과 객제 지향 프로그래밍 그리고 계약에 의한 프로그래밍이라는 개념을 동시에 괴리감 없이 잘 통합해낸 언어라는 것이다. 자세한 내용은 [[http://dlang.org/overview.html|dlang.org - Overview의 Major Features of D]]를 참고할 것. * [[명령형 프로그래밍]]: [[C언어]]와 거의 동일 * [[객체 지향 프로그래밍]]: 클래스, 연산자 오버로딩 * [[함수형 언어|함수형 프로그래밍]]: 불변이 타입(immutable), 순수 함수(pure), 람다와 클로저 * [[배열|배열 지향 프로그래밍]]: 정적배열, 동적배열, 연관배열, 인덱싱, 슬라이싱 * [[일반화|일반화 프로그래밍]] * [[템플릿]] [[메타 프로그래밍]]: 컴파일 타임 함수 실행, 튜플, 문자열 혼합 등 [[http://dlang.org/spec/template.html|(C++의 템플릿보다 훨씬 단순하다.)]] * [[멀티태스킹]] * 멀티스레드 프로그래밍: [[https://dlang.org/phobos/core_thread.html|core.thread]] 라이브러리로 [[스레드]]를 생성한 후 core.sync 계열 라이브러리로 스레드들을 제어 * [[동시 프로그래밍]]: [[https://dlang.org/phobos/std_concurrency.html|std.concurrency]] 라이브러리를 이용하여 [[행위자 모델]]을 기반으로 구현 * [[병렬 프로그래밍]]: [[https://dlang.org/phobos/std_parallelism.html|std.parallelism]] 라이브러리를 이용하여 구현 * [[FFI]] - C, C++(일부), Objective-C * 신뢰성: 계약에 의한 프로그래밍, 유닛 테스트, Debug 속성 등등... * 자동 메모리 관리: [[쓰레기 수집]]기(GC)가 내장되어 있어 RAII(Resource Acquisition Is Initialization) 패턴을 기반으로 메모리를 자동으로 관리해준다. 물론 C, C++처럼 저수준 메모리 관리를 원하는 프로그래머를 위해 [[https://dlang.org/phobos/core_memory.html|core.memory]] 라이브러리를 가져와서 @nogc와 같은 키워드를 사용하면 GC를 사용하지 않을 수도 있다. 프로그래머가 C/C++처럼 직접 포인터 산술을 하거나 메모리를 제어할 수 있는 셈이다. 하지만, 이 기능 때문에 D언어를 발목 잡고 있다. 자세한 내용은 아래 문제점 항목에 후술. * SafeD: 메모리를 손상시키지 않고 안전하게, 신뢰하고 사용할 수 있도록 메모리를 직접적으로 만짐으로서 발생할 만한 행동들을 강제적으로 제한하는 일종의 규칙이다. 대표적으로 SafeD가 적용된 코드는 타입시스템을 cast 연산자로 깨거나, 포인터 값의 임의 변경 그리고 지역 변수 또는 함수의 매개 변수의 주소의 언급이 불가능하다. 메모리를 다룰 수 있는 허용 범위에 따라 @system, @trusted, @safe로 나뉜다. @safe의 경우는 다음과 같이 상당히 엄격하다. * 포인터가 아닌 타입을 포인터 타입으로 캐스팅 불가 * 포인터 값의 임의변경 금지 * 다른 타입의 오버래핑 참조나 포인터를 가진 unions타입의 접근 불가 * @system 속성의 함수 사용 불가 * Exception 클래스의 catching 불가[* D에서는 catching 가능한 클래스로 Error와 Exception 두가지가 있다. Error가 아니라 Exception의 발생은 이미 그 프로그램이 더 이상의 동작이 위험한 상황에 도달했음을 뜻하므로 안전하게 프로그램을 종료하도록 권장한다. ] * 인라인 어셈블러 사용 불가(x86 asm block) * 스레드 로컬 객체 ↔ shared객체: 명시적 캐스팅 불가 * 불변이 객체(immutable) ↔ 변이 객체(table): 명시적 캐스팅 불가 * 지역 변수 또는 함수의 매개 변수의 주소의 언급 불가 * __gshared 타입 접근 불가저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기