Дивні мови
серпень 2021 р
Коли люди кажуть, що з їхнього досвіду всі мови програмування в основному еквівалентні, вони роблять заяву не про мови, а про тип програмування, який вони зробили.
99,5% програмування складається зі склеювання викликів бібліотечних функцій. Усі популярні мови однаково добре справляються з цим. Таким чином, можна легко провести всю свою кар’єру, працюючи на перетині популярних мов програмування.
Але інші 0,5% програмування непропорційно цікаві. Якщо ви хочете дізнатися, з чого вона складається, дивовижність дивних мов — це хороша підказка, якій слід слідувати.
Дивні мови не є дивними випадково. Принаймні не хороші. Дивність хороших зазвичай передбачає існування певної форми програмування, яка не є просто звичайним склеюванням викликів бібліотеки.
Конкретний приклад: макроси Lisp. Макроси Lisp здаються дивними навіть багатьом програмістам Lisp. Вони не тільки не знаходяться на перетині популярних мов, але за своєю природою їх було б важко належним чином реалізувати в мові, не перетворюючи її на діалект Lisp. І макроси, безперечно, є доказом техніки, яка виходить за рамки програмування клею. Наприклад, розв’язувати задачі, спочатку написавши мову для задач такого типу, а потім написавши на ній свою конкретну програму. Це ще не все, що ви можете робити за допомогою макросів; це лише один регіон у просторі технік програмного маніпулювання, який навіть зараз ще далеко не повністю вивчений.
Отже, якщо ви хочете розширити своє уявлення про те, чим може бути програмування, один із способів зробити це — вивчити дивні мови. Виберіть мову, яку більшість програмістів вважають дивною, але середній користувач якої розумний, а потім зосередьтеся на відмінностях між цією мовою та перетином популярних мов. Що ви можете сказати цією мовою, що було б незручно сказати іншими? У процесі навчання тому, як говорити те, що ви раніше не могли сказати, ви, ймовірно, навчитеся думати те, про що раніше не могли думати.
дякую Тревору Блеквеллу, Патріку Коллісону, Деніелю Ґаклу, Амджаду Масаду та Роберту Моррісу за прочитання чернеток цього.
