Прокляття Лісп

Πудольф Вінстоок

Оновлення: 6 жовтня 2017 року. NB: Будь ласка, припиніть подання цього повідомлення в Hacker News!Подивіться на результати пошуку Hacker News для цього есе. Перевірте примітку для першої запису: приходьте, всі! Давайте ще раз побити померлого коня! Якщо ви хочете заробити е-cred кредиту Hacker News, спробуйте надіслати "Вічний мейнфрейм" замість нього.

Цей нарис є ще однією спробою примирити сили мови програмування Lisp з нездатністю спільноти Lisp відтворити свої попередні досягнення зими . Без сумніву, Lisp був впливовим джерелом ідей навіть під час свого відступу. Цей факт, плюс яскравість різних архітектур Lisp Machine, а також нинішній ренесанс Ліппа після більш ніж десятиліття в пустелі, свідчать про те, що партизани Lisp повинні мати деяке обґрунтування своєї безпристрасності. Тим не менше, вони не змогли перевести силу Лісп у рух з перебільшуючим імпульсом.

У цьому есе я стверджую, що експресивна сила Ліспа є фактично причиною його нестачі імпульсу.

Влада Ліспа є своїм найгіршим ворогом.

Ось думки експерименту, щоб довести це: Візьміть дві мови програмування, жоден з яких не є об'єктно-орієнтованимаша місія, якщо ви вирішите прийняти її, полягає в тому, щоб зробити їх об'єктно-орієнтованими, зберігаючи їх назад у сумісних з оригінальними мовами, за деякими крайовими випадками. Вставлення будь-якої пари мов програмування в цей експеримент мислення покаже, що це на деяких мовах легше, ніж у інших. У цьому полягає думка експерименту. Ось тривіальний приклад: Intercal і Pascal.

Тепер зробити цей уявний експеримент цікавим: уявіть собі додавання об'єктної орієнтації на мови програмування C і Scheme. Створення схеми об'єктно-орієнтованого є другою класом домашнього завдання. З іншого боку, додавання орієнтації об'єкта на C вимагає відбитків програмування Bjarne Stroustrup.

Наслідки цієї розбіжності у необхідних талантах та зусиллях викликають "Прокляття Лісп" :

Lisp настільки потужний, що проблеми, які є технічними проблемами на інших мовах програмування, є соціальними проблемами в Lisp.


Πозглянемо випадок схеми, знову. Оскільки створення об'єктно-орієнтованої схеми настільки простим, багато хто з схем хакерів це зробили. Більше того, багато хто окремі схеми хакерів це зробили. У 1990-х роках це призвело до справжнього складу інвентаризації переліку об'єктно-орієнтованих пакетів для мови. Парадокс вибору , один, гарантував, що жоден із них не стане стандартним. Тепер, коли деякі схеми реалізації мають власні об'єкт орієнтації об'єктів, це не так вже й погано. Проте той факт, що багато з цих пакетів були роботами одиноких людей, призвело до проблем, які Олін Шивер писав у документі Scheme Shell, scsh.

Програми, написані окремими хакерами, як правило, йдуть за моделлю "подряпини". Ці програми дозволять вирішити проблему, яку сам хакер хай без необхідності обробляє відповідні частини проблеми, що зробить програму кориснішою для інших. Крім того, програма обов'язково буде працювати на власному налаштуванні одинокого хакера, але не може бути портативною для інших реалізацій Схем або для реалізації однієї і тієї ж схеми на інших платформахокументація може бути відсутня. Будучи по суті проектом, зробленим у величезному вільному часі хакерів, програма може зазнати страждання, якщо реальні обов'язки втручаються хакерам. Як зазначив Олін Шівер, це означає, що ці одномандатні проекти, як правило, вирішують вісімдесят відсотків проблеми.

Нарис доктора Марка Тарвера " Біполярний програміст Lisp" має вдалий опис цього явища. Він пише про цих лисих хакерів і їхніх

... неможливість правильно завершити речі.Фраза 'викидний дизайн' абсолютно зроблена для BBM, і вона походить від спільноти Lisp. Lisp дозволяє вам просто зняти речі так легко, і легко це прийняти як само собою зрозуміле. Я бачив це 10 років тому, коли шукав графічний інтерфейс для мого Lisp. Немає проблем, було 9 різних пропозицій. Проблема полягала в тому, що жоден з 9 не був належним чином задокументований, і жоден з них не був виправлений помилкою. В основному кожна людина реалізувала власне рішення, і він працював для нього так, що було добре. Це ставлення до BBM ; це працює для мене, і я це розумію. Це також продукт, який не потребує або не хоче, щоб хто-небудь допоміг щось зробити.


Ще раз розглянемо мову програмування С у цьому мисленному експерименті. Через складність створення об'єктно-орієнтованої C, лише дві серйозні спроби на проблему зробили будь-яку тягу: C ++ і Objective-C. Мета-C найпопулярніша на Macintosh, в той час як C ++ застосовує правила скрізь. Це означає, що для заданої платформи питання про те, яке об'єктно-орієнтоване розширення C для використання, вже давно відповіли остаточно. Це означає, що об'єкти, орієнтовані на ці мови, були задокументованими документами, що інтегровані середовища розробки усвідомлюють їх, що коди бібліотек сумісні з ними тощо.

Нарис доктора Марка Тарвера про біполярні лісперси робить висновок:

На відміну від цього, підхід C / C ++ зовсім інший. Це так чертовски важко зробити що завгодно за допомогою пінцета та клею, що щось важливе для вас стане справжнім досягненням. Ви хочете його документуватиакож ви зобов'язуєтеся отримати допомогу в будь-якому проекту C, що має значний розмір;тому ви зобов'язані бути соціальними та працювати з іншими. Вам потрібно, просто кудись дістатись.

І все це, з точки зору роботодавця, є привабливим. Десять людей, котрі обмінюються, документують речі належним чином і працюють разом, краще, ніж один BBM- хакер, який може бути замінений іншою BBM (якщо її можна знайти) у не малоймовірній ситуації, коли він буде, в якийсь час, знизитися, не будучи перезавантаження

Тому ті, хто вже знає C, не запитують "Яку систему об'єктів слід вивчати?" Замість цього вони використовують C ++ або Objective-C залежно від того, що використовують їх колеги, а потім перейти до "Як використовувати об'єктно-орієнтовану функцію Х ? "Відповідь:" Гово це, і ви знайдете ".


Πеальні хакери, звичайно, вже давно знали, що об'єктно-орієнтоване програмування - це не панацея, яку заявляли її партизани. Πеальні хакери перейшли до більш досконалих концепцій, таких як незмінні структури даних, тип введення, лінька оцінка, монади, стріли, співставлення з шаблонами, обмеження на основі програмування тощо. Πеальні хакери час від часу також знали, що C і C ++ не підходять для більшості програм, які не потребують довільного біт-плівкиим не менш, лиспов прокляття все ще тримається.

Деякі чудові любителі Lisp опитали поточний урожай академічних мов (Haskell, Ocaml та ін.) І визнали їх бажаючими, кажучи, що будь-яка їх особливість вже присутня в Lisp або її можна легко застосувати та вдосконалювати з Lisp макросиВони, мабуть, правильні.

На жаль, хакери Lisp.


Доктор Марк Тарвер - двічі цитувавшись вище, написав діалект Ліспа, який називається Ци . Це менше десяти тисяч рядків макросів, що працюють на вершині Clisp. Він реалізує більшість унікальних можливостей Haskell і OCaml. У деяких аспектах Ци перевершує їх. Наприклад, двигун прив'язки типу Qi - це завершення Тьюринга . У світі, де командам талановитих вчених потрібно було писати Хаскел, одна людина, доктор Тарвер пише Ці всім своїм самотнім.

Прочитайте цей абзац знову і екстраполюйте.


Вправа для читача : уявіть, що між Haskell і Common Lisp розвивається сильне суперництво. Що буде далі?

Відповідь : Помилка Lisp Прокляття. Кожен другий або третій серйозний лісовий хакер запускає власну реалізацію леної оцінки, функціональної чистоти, стріл, відповідності шаблону, типу введення та ін. Більшість з цих проектів будуть операціями одиноких вовків. Таким чином, у них буде вісімдесят відсотків функцій, які потрібні більшості людей (у кожному випадку - вісімдесят відсотків). Вони будуть слабко задокументовані. Вони не будуть переносимись через системи Lisp. Деякі з них покажуть великі обіцянки, перш ніж вони будуть покинуті, поки супроводжуючий проекту вирушить, щоб оплатити свої рахунки. Деякі з них будуть бити Хаскел за тим чи іншим виміром (знову ж таки, інший в кожному випадку), але їх прийняття буде перешкоджати війнами полум'я в групі comp.lang.lisp Usenet.

Endgame : випадкова стародавня колекція маскробудівників Lisp додасть до незареєстрованої, непідтримуваної, помилкової реалізації 80% Haskell, тому щоLisp є більш потужним, ніж Haskell.


Мораль цієї історії полягає в тому, що важливі вторинні та третинні наслідки . Технологія не тільки впливає на те, що ми можемо зробити щодо технологічних питань, але й впливає на нашу соціальну поведінку. Ця соціальна поведінка може повернутись назад і вплинути на розглянуті оригінальні технологічні проблеми.

Lisp - болісно виразний зразок цього уроку. Лісп є настільки потужним, що він заохочує індивідуальну незалежність до кривавого свідомості. Ця незалежність призвела до приголомшливо хороших інновацій, як у дні Лісп Машини. Ця ж незалежність також перешкоджає зусиллям, спрямованим на відродження систем "лісп повсюди" у старихіякий проект "Lisp OS" не зібрав критичну масу з моменту загибелі Symbolics та LMI.

Одним із наслідків цих вторинних та третинних ефектів є те, що, навіть якщо Lisp є найбільш виразною мовою коли-небудь, така, що теоретично неможливо зробити більш виразну мову, Lispers все одно матимуть речі, щоб навчитися з інших мов програмування . Хлопчики Smalltalk навчили кожного - в тому числі Lisp хакерів - щось інше про об'єктно-орієнтоване програмування. Мова чистого програмування та комбінація Моцарт / Оз можуть мати кілька несподіванок.


Прокляття Лісп не суперечить максиму Станіслава Дацковського : роботодавці набагато вважають за краще, щоб робітники були замінними, а не максимально продуктивними.Занадто правда З великими труднощами ніхто не підкреслює рівноваги керівного класу. Проте останні моменти його нарису є проблематичними. А саме:

Що стосується світу "вільного програмного забезпечення", то він з готовністю виступає проти промислових догм в риториці, але взагалі на практиці. Ніяке поняття, яке придушують кубичні пекельні ферми, ніколи не отримували справжньої тяги серед аматорських мас.

У виносці він пропонує Linux як приклад небажання шукати різні ідеї. Безумовно, він має сенс, коли справа доходить до операційних систем (найвищий коментар, зокрема, є нахабно тупим). У нього немає сенсу, коли справа доходить до мов програмування. На Python і Ruby під впливом Lisp. Багато хто з їхніх шанувальників висловлюють повагу до Ліста, і деякі їхні інтереси посилили ренесанс Ліса. З деяким правосуддям, JavaScript описується як "Схема одягу C", незважаючи на те, що вони виникли в цих кубових фермах .

Тим не менш, незважаючи на це вплив, як у корпоративних, так і у відкритих джерелах світів, Lisp все ще має лише частину частки розуму розробника, які привертають увагу сучасних розробок мов сценаріїв. Стійкість МВА не може бути єдиним поясненням цього. Прокляття Lisp має більше пояснювальних сил.


Додаткові середовища для вільного розвитку, доступні для Lisp, дають приклади Lisp Curse.

Це незручно вказати на це, але це повинно бути зроблено. Забудьте про машину Lisp; у нас навіть немає систем розробки, які відповідають тому, що середній хакер Smalltalkвважає само собою зрозумілим ("Я завжди вважав, що Lisp є вищою мовою, і Smalltalk - це вища середовище", - зазначив Πамон Леон ). Якщо вони не платять тисячі доларів, хакери Lisp все ще стикаються з Emacs.

Джеймс Гослінг, автор першого Emacs, який працював на Unix, правильно зазначив, що Emacs не змінився принципово протягом більше двадцяти років. Це пояснюється тим, що супроводжуючі Emacs все ще накладають код на вершині дизайну, який був розпочатий, коли Emacs був проектом grad-student у лабораторії MIT AI, тобто коли розвиток Emacs все ще опосередковано фінансується за рахунок державного боргу. Slashdotter може заперечувати, що Emacs вже досить здатний і може робити все, що може зробити будь-яке інше середовище розробки, лише краще. Ті, хто використовував Lisp Machines, говорять про інше.

Тож чому ж не "Лайфс-хакери" не поклали хлопців Smalltalk у належне місце? Чому вони не створюють систему вільного розвитку, яка називає деякі з втрачених славою LispM, навіть якщо вони не можуть відтворити ще один LispM?

Причина, чому цього не відбувається, - це Через Прокляття Ліспа. Велике число хакерів Lisp доведеться співпрацювати один з одним. Подивіться детальніше: велика кількість людей, які стають хазяками Lisp , повинні співпрацювати один з одним. І їм доведеться співпрацювати один з одним за дизайном, який вже не був даний з самого початку. І не буде жодної зовнішньої дисципліни, такої як венчурний капіталіст чи інший корпоративний майстер, щоб вони залишались на шляху.

Кожен проект має тріщини між членами, розбіжності, конфлікти над стилем та філософією. Ці соціальні проблеми протидіють тому, що жоден великий проект не може бути досягнутий інакше. "Ми всі повинні висіти разом, або всі ми будемо вішати окремо". Але виразність Lisp робить цю компенсаційну силу набагато слабшою; завжди можна починати свій власний проект. Таким чином, окремі хакери вирішують, що проблема не варто. Тому вони або виходять з проекту, або не приєднуються до проекту з самого початку. Це "Лісп Прокляття".

Можна навіть зламати Emacs, щоб отримати щось досить добре . Таким чином, Прокляття Ліспа є союзником гіршого - краще.



Як я думаю і дизайн сайтів? Найняти мене!


© Πудольф Вінстоок , Всі права захищені 

Цей реферат було опубліковано в п'ятницю, 15 квітня 2011 р.