Пол Грэм анонсировал новый язык программирования Bel

Автор оригинала: Paul Graham
  • Перевод
Язык Bel написан на языке Bel.

image

В 1960 году Джон МкКарти описал Lisp — новый тип языка программирования. Я говорю «новый тип» потому что Lisp представлял собой не просто новый язык, но новый способ описания языков.

Чтобы определить Lisp, он начал с малого набора операторов, своего рода аксиом, которые затем использовал для написания интерпретатора для самого языка.

Он не ставил целью описать язык программирования в обычном смысле — язык, используемый, чтобы указывать компьютеру, что ему делать. В его работе 1960 года Lisp понимался как формальная модель вычисления сродни Машине Тюринга. МакКарти не задумывался об ее использовании на компьютерах, пока это не предложил Стив Рассел, его дипломник.

В Lisp 1960 года не было возможностей, обычных для языков программирования. Например, там не было чисел, ошибок или ввода/вывода. Поэтому людям, использовавшим Lisp как основу для языков, используемых для программирования компьютеров, приходилось добавлять эти возможности самим. И они делали это за счет отказа от аксиоматичного подхода.

Таким образом, развитие Lisp шло в два — и, похоже, достаточно независимых — этапа: формальный этап, представленный в работе 1960 года, и этап реализации, в котором язык был адаптирован и расширен для запуска на компьютерах. Основная работа, если мерить количеством реализованных возможностей, шла на этапе реализации. Lisp 1960 года, транслированный в Common Lisp содержит всего 53 строки. Он делает только то, что необходимо чтобы интрепретировать выражения. Все остальное было добавлено на этапе реализации.

Моя гипотеза такова, что, несмотря на трудную историю, Lisp пошло на пользу то, что его развитие происходило в две фазы; что изначальное упражнение по определению языка через написание его интерпретатора на нем самом наделило Lisp его лучшими качествами. И если так, почему не пойти дальше?

Bel — это попытка ответа на вопрос: что, если вместо перехода от формального этапа к этапу исполнения на раннем этапе, осуществить этот переход как можно позже? Если вы будете продолжать использовать аксиоматический подход до тех пор, пока у вас не окажется что-то близкое к завершенному языку программирования, какие аксиомы вам понадобятся, и как будет выглядеть получившийся язык?

Я хочу внести ясность насчет того, что есть Bel, и чем он не является. Хотя у него намного больше возможностей, чем у Lisp МакКарти 1960 года, Bel все еще продукт в формальной фазе. Как и Lisp, описанный в работе 1960 года, это не язык, который вы можете использовать для программирования. Главным образом, потому, что подобно Lisp МакКарти, он не заботится об эффективности. Когда я добавляю что-то в Bel, я описываю смысл этого добавления, не пытаясь предоставить эффективную реализацию.

Для чего? Зачем продлевать формальный этап? Один из ответов — чтобы увидеть, куда нас может завести аксиоматический подход, что само по себе является интересным упражнением. Если бы компьютеры были настолько мощными, как нам бы хотелось — как бы тогда выглядели языки?

Но я также верю, что возможно написать эффективную реализацию, основанную на Bel, добавляя ограничения. Если вам нужен язык, обладающий выразительной мощью, ясностью и эффективностью, возможно, стоит начать с выразительной мощности и ясности, и затем добавить ограничения, чем двигаться в противоположном направлении.

Так что если хотите попробовать написать реализацию, основанную на Bel — пожалуйста. Я буду одним из первых пользователей.

В конечном счете, я воспроизвел некоторые вещи из предыдущих диалектов. Либо их дизайнеры все сделали правильно, либо, находясь под влиянием ранее используемых диалектов, я не вижу правильного ответа — время покажет. Я также старался не отходить слишком далеко от соглашений, принятых в Lisp. Что означает, что если вы увидите отход от соглашений Lisp, возможно, на то были свои причины.

Продолжение описания языка тут.


За перевод спасибо: Denis Mitropolsky

P.S.


Комментарии 5

    +5
    Изобретение диалекта LISP это «упала сосиска», от мира IT.

    image
      0
      Ну вот Пол Грэм это такой celebrity от IT вообще и мира Лиспа в частности, Лиспа, что новый диалект Лиспа от него — новость. Пусть это и не первый лисп от Пола Грэма.
      0

      А кто-нибудь понял чем оно от scheme отличается?

        0
        Ну из переведённого куска текста видно только, что это минималистический лисп, близкий к какому-нибудь Lisp 1.5, где заявлена как цель как можно более позднее связывание (т. е. изначальная ориентация на компиляцию, а не интерпретацию, хотя JIT и AOT-компиляцией в современных лиспах, конечно, никого не удивишь). И, из этого же текста следует что это state of the art, и чтобы компиляция была эффективной там надо работать и над реализацией, и над «дополнительными ограничениями» (статической типизацией?).
        +1
        Выглядит весьма грустно. Как будто разработчик аркад из 80-х решил напоследок тряхнуть стариной и сделать правильную, идеальную и гениальную игру. Но с 2d-графикой, как будто развития за прошедшие 40 лет и не было.

        Bel вообще не знает о типизации. Как будто Haskell и т.п. и не рождались никогда.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое