잘못된 보안 감각 . 이것은 말도 안됩니다.
몇 가지 기본 유형 . OCaml에는 바이트 및 바이트 배열이 있지만 기본 제공 유니 코드 문자열, 16 비트 정수, 부호없는 정수, 32 비트 부동 소수점, 벡터 또는 행렬은 없습니다. 타사 라이브러리는 이들 중 일부를 제공합니다.
자동 정수 오버플로 . 변경되지 않았지만 결코 문제가되지 않았습니다.
모듈 불변성 . 함수와 모듈이 변경 가능해야한다는 그의 추천은 Lisp에 대한 심각한 후퇴와 정말 나쁜 생각입니다. include
원하는 경우 사용하여 모듈을 대체 할 수 있지만 물론 변경할 수는 없습니다.
다형성으로 인해 런타임 유형 오류가 발생 합니다. 이것은 OCaml의 큰 문제이며 해결되지 않았습니다. 유형이 다형성 평등을 발전함에 따라 함수와 같은 유형을 발견하고 문제를 디버깅하는 것은 비교 및 해싱이 실패하기 시작합니다. F #에는이 문제에 대한 훌륭한 해결책이 있습니다.
매크로 없음 . 아이러니하게도,이 OCaml을 작성할 때 실제로 매크로를 완전히 지원했지만 이제는 기능을 꺼내기로 결정했습니다.
포장지 . 이것은 실제 문제였으며 해결되지 않았습니다. 여전히 try ... finally
OCaml 언어 에는 구성이없고 stdlib에는이를 구현하는 래퍼가 없습니다.
장소 . 변경되지 않았지만 문제가 아닙니다.
필드 명명 지옥을 기록하십시오 . 모듈을 사용하여 코드를 올바르게 구성하십시오.
구문 . 변경되지 않았지만 문제가 아닙니다.
다형성 없음 . 그가 썼을 때 이것은 대부분 넌센스였으며 아무것도 바뀌지 않았습니다.
일치하지 않는 기능 세트 . OCaml에는 여전히 cons
기능 이 없습니다 . 괜찮아. 언어로 된 리스프를 원하지 않습니다. 감사합니다.
동적 변수가 없습니다 . OCaml에 대해 좋은 일이었습니다. 여전히 OCaml에 대해 좋은 것입니다.
선택적 ~ 인수 suck . 선택적인 주장은 흔들린다. F #에 선택적 인수를 추가하도록 Microsoft에 기장했습니다.
부분 인수 응용 프로그램 불일치 . 뭐라고?
산술의 가독성 . ~ 8 년 전 OCaml 사용을 중단 한 이후로 변경되었습니다. 분명히 당신은 할 수 있습니다 Int64.((q * n - s * s) / (n - 1L))
.
자동 이름 충돌 해결 . 그는 Lisp에서와 마찬가지로 REPL에서 본격적인 소프트웨어 개발을 시도했습니다. OCaml에서는 그렇게하지 마십시오. 테스트, 일회용 코드 실행 및 대화식 기술 컴퓨팅을 위해서만 REPL을 사용하는 파일 및 배치 컴파일을 사용하십시오.
평가 순서 . 그가 썼을 때 이것은 잘못되었습니다. 평가 순서는 OCaml에 정의되어 있지 않습니다.
객체 입 / 출력이 없습니다 . 그는 이미이 "문제"를 해결 한 타사 라이브러리를 인용했습니다.
첫 번째 오류 후에 컴파일러가 중지됩니다 . 뭐라고?
기본적으로 컴파일 된 실행 파일에 대한 스택 추적이 없습니다 . 결정된.
디버거가 짜증 난다 . 나는 디버거를 사용한 적이 없다. 정적 유형 검사는 거의 모든 버그를 잡아냅니다.
GC는 짜증나 . OCaml의 GC가 한 가지 큰 문제를 제외하고는 훌륭하다는 것을 알았습니다. 전역 잠금은 병렬 프로그래밍을 방지합니다.
암시 적 전달 선언이 없습니다 . 상호 재귀는 모든 ML에서 설계 상 명시 적입니다. 유일한 예외는 type
정의가 기본적으로 재귀 적이지만 let
바인딩은 기본적 으로 비 재귀 적이라는 것입니다.
함수 라운드가 없습니다 . OCaml에는 여전히 뼈대 stdlib가 있지만 Jane St 's Core와 같은 타사 라이브러리가 제공 round
하고 친구가 있습니다.
목록 . List.map
여전히 꼬리 재귀가 아닙니다. 나는 이와 같은 심각한 버그를 수정하기 위해 패치를 제출했으며 릴리스에 나타나기까지 몇 년을 기다려야했습니다. 물론 목록은 여전히 불변입니다. 그래서 그들은해야합니다.
속도 . 큰 다형성 변형에 대한 컴파일 시간이 수정되었다고 생각합니다.
패턴 매칭 . 현실에 대한 희망의 승리. Lisp 커뮤니티는이를 수행하지 못했습니다. 따라서 제 10 번째 규칙 : 충분히 복잡한 Lisp 프로그램에는 OCaml의 패턴 일치 컴파일러의 절반에 대한 비공식적으로 지정되고 버그에 의해 작성된 임시 구현이 포함됩니다.
그러나 최상위 수준에서 라이브러리 호출로 pretty printer를 호출하여 필요한 유형 정보를 제공 할 수 있습니다. 그리고 예쁜 프린터를 자동 생성하기 위해 데이터 구조에 주석을 달 때 사용할 수있는 매크로가있었습니다.