Помилкове почуття безпеки . Це нісенітниця.
Кілька основних типів . Тепер OCaml має байти та байтові масиви, але немає вбудованих рядків Unicode, 16-бітових цілих чисел, непідписаних цілих чисел, 32-бітових поплавків, векторів чи матриць. Деякі з них надають сторонні бібліотеки.
Мовчазне переповнення цілого числа . Без змін, але це ніколи не було проблемою.
Модуль Незмінність . Його рекомендація щодо того, що функції та модулі повинні бути незмінними, - це похмурий відкат Lisp і справді погана ідея. Ви можете замінити модулі, використовуючи, include
якщо хочете, але ви, звичайно, не можете їх вимкнути.
Поліморфізм викликає помилки типу виконання . Це велика проблема з OCaml, і вона не була виправлена. По мірі того, як ваші типи розвиваються в поліморфній рівності, порівняння та хеширование почнуть виходити з ладу, коли вони зустрінуть такі типи, як функції, і налагодження проблеми буде дуже важким. F # чудово вирішує цю проблему.
Немає Макроси . Як не дивно, коли він писав цей OCaml, фактично мав повну підтримку макросів, але вони вирішили витягнути цю функцію.
Обгортки . Це була справжня проблема, і вона не була виправлена. Досі не існує try ... finally
конструкції на мові OCaml, і жодної обгортки, що реалізує її в stdlib.
Місця . Без змін, але без проблем.
Записати поле іменування пекла . Правильно структуруйте свій код за допомогою модулів.
Синтаксис . Без змін, але без проблем.
Ніякого поліморфізму . Це були переважно дурниці, коли він це писав і нічого не змінилося.
Невідповідні набори функцій . OCaml все ще не має cons
функції. Це чудово. Я не хочу, щоб слова Lisp були моєю мовою, дякую.
Немає динамічних змінних . Була гарна річ про OCaml. Все ще гарна річ про OCaml.
Необов'язково ~ аргументи смоктати . Необов’язкові аргументи рок. Я надавав значню Microsoft, щоб змусити їх додавати необов'язкові аргументи до F #.
Часткове невідповідність програми аргументу . Так?
Читання арифметики . Це змінилося з моменту припинення використання OCaml ~ 8 років тому. Мабуть, тепер ви можете це зробити Int64.((q * n - s * s) / (n - 1L))
.
Мовчазне вирішення конфлікту імен . Він намагався зробити повноцінну розробку програмного забезпечення в системі REPL, як і в Lisp. Не робіть цього в OCaml. Використовуйте файли та компіляцію пакетів, використовуючи REPL лише для тестування, запуску одноразового коду та інтерактивних технічних обчислень.
Порядок оцінювання . Це було неправильно, коли він це писав. Порядок оцінювання не визначений в OCaml.
Немає об'єкта введення / виводу . Він посилався на сторонню бібліотеку, яка вже вирішила цю "проблему".
Компілятор зупиняється після першої помилки . Так?
Немає сліду стека для вбудованих виконуваних файлів . Виправлено.
Відладчик смокче . Я ніколи не використовував налагоджувач. Статична перевірка типу виявляє майже всі мої помилки.
GC смокче . Я виявив, що GC OCaml є чудовим за винятком однієї основної проблеми: глобальне блокування запобігає паралельному програмуванню.
Без неявних форвардних декларацій . Взаємна рекурсія явна за задумом у всіх МС. Єдина вірогідність полягає в тому, що type
визначення за замовчуванням є рекурсивними, тоді як let
прив'язки нерекурсивні за замовчуванням.
Функція раунду відсутня . У OCaml все ще є голі кістки stdlib, але сторонні бібліотеки, такі як Core Jane Jane's Core, надають round
друзям.
Списки . List.map
досі не є хвостовим рекурсивним. Я надсилав виправлення, щоб виправити подібні серйозні помилки, і довелося чекати років, перш ніж вони з’являться у випусках. Списки, звичайно, незмінні. І так вони повинні бути.
Швидкість . Я вважаю, що часи компіляції для великих поліморфних варіантів були встановлені.
Узгодження шаблону . Торжество надії на реальність. Спільнота Лісп цього не змогла. Звідси моє десяте правило: будь-яка досить складна програма Lisp містить спеціальну, неофіційну та неофіційну реалізацію половини компілятора шаблону відповідності шаблону OCaml.
але ви можете викликати гарненький принтер із верхнього рівня як виклик бібліотеки, надаючи йому необхідну інформацію про тип. І був макрос, який можна використовувати для коментування структур даних для того, щоб симпатичні принтери автогенерувались.