Мова Bel напісаны на мове Bel.
У 1960 годзе Джон МкКарці апісаў Lisp - новы тып мовы праграмавання. Я кажу "новы тып" таму што Lisp уяўляў сабой не проста новую мову, але новы спосаб апісання моў.
Каб вызначыць Lisp, ён пачаў з малога набору аператараў, свайго роду аксіём, якія затым выкарыстоўваў для напісання інтэрпрэтатара для самой мовы.
Ён не ставіў за мэту апісаць мову праграмавання ў звычайным сэнсе – мову, якая выкарыстоўваецца, каб паказваць кампутару, што яму рабіць. У яго працы 1960 гады Lisp разумеўся як фармальная мадэль вылічэння падобна Машыне Цюрынга. МакКарці не задумваўся аб яе выкарыстанні на кампутарах, пакуль гэта не прапанаваў Стыў Расэл, яго дыпломнік.
У Lisp 1960 гады не было магчымасцяў, звычайных для моў праграмавання. Напрыклад, там не было лікаў, памылак ці ўводу/высновы. Таму людзям, якія выкарыстоўвалі Lisp як аснову для моў, якія выкарыстоўваюцца для праграмавання кампутараў, даводзілася дадаваць гэтыя магчымасці самім. І яны рабілі гэта за кошт адмовы ад аксіяматычнага падыходу.
Такім чынам, развіццё Lisp ішло ў два – і, здаецца, дастаткова незалежных – этапы: фармальны этап, прадстаўлены ў працы 1960 года, і этап рэалізацыі, у якім мова была адаптаваная і пашыраная для запуску на кампутарах. Асноўная работа, калі мераць колькасцю рэалізаваных магчымасцей, ішла на этапе рэалізацыі. Lisp 1960 гады, трансляваны ў Common Lisp утрымоўвае ўсяго 53 радкі. Ён робіць толькі тое, што неабходна каб інтэрпрэтаваць выразы. Усё астатняе было дададзена на этапе рэалізацыі.
Мая гіпотэза такая, што, нягледзячы на цяжкую гісторыю, Lisp пайшло на карысць тое, што яго развіццё адбывалася ў дзве фазы; што першапачатковае практыкаванне па вызначэнні мовы праз напісанне яго інтэрпрэтатара на ім самім надзяліла Lisp яго лепшымі якасцямі. І калі так, чаму не пайсці далей?
Бел - Гэта спроба адказу на пытанне: што, калі замест пераходу ад фармальнага этапу да этапу выканання на раннім этапе, ажыццявіць гэты пераход як мага пазней? Калі вы будзеце працягваць выкарыстоўваць аксіяматычны падыход да таго часу, пакуль у вас не апынецца нешта блізкае да завершанай мовы праграмавання, якія аксіёмы вам спатрэбяцца, і як будзе выглядаць атрыманая мова?
Я хачу ўнесці яснасць наконт таго, што ёсць Bel, і чым ен не з'яўляецца. Хаця ў яго нашмат больш магчымасцяў, чым у Lisp МакКарці 1960 года, Bel ўсё яшчэ прадукт у фармальнай фазе. Як і Lisp, апісаны ў працы 1960 гады, гэта не мова, якую вы можаце выкарыстоўваць для праграмавання. Галоўным чынам, таму, што падобна Lisp МакКарці, ён не клапоціцца аб эфектыўнасці. Калі я дадаю нешта ў Bel, я апісваю сэнс гэтага дадання, не спрабуючы даць эфектыўную рэалізацыю.
Для чаго? Навошта працягваць фармальны этап? Адзін з адказаў - каб убачыць, куды нас можа завесці аксіяматычны падыход, што само па сабе з'яўляецца цікавым практыкаваннем. Калі б кампутары былі настолькі магутнымі, як нам бы хацелася – як бы тады выглядалі мовы?
Але я таксама веру, што магчыма напісаць эфектыўную рэалізацыю, заснаваную на Bel, дадаючы абмежаванні. Калі вам патрэбен мова, які валодае выразнай моцай, яснасцю і эфектыўнасцю, магчыма, варта пачаць з выразнай магутнасці і яснасці, і затым дадаць абмежаванні, чым рухацца ў процілеглым кірунку.
Так што калі хочаце паспрабаваць напісаць рэалізацыю, заснаваную на Bel - калі ласка. Я буду адным з першых карыстальнікаў.
У канчатковым рахунку, я прайграў некаторыя рэчы з папярэдніх дыялектаў. Або іх дызайнеры ўсё зрабілі правільна, або, знаходзячыся пад уплывам раней выкарыстоўваных дыялектаў, я не бачу правільнага адказу - час пакажа. Я таксама стараўся не адыходзіць занадта далёка ад пагадненняў, прынятых у Lisp. Што азначае, што калі вы ўбачыце адыход ад пагадненняў Lisp, магчыма, на тое былі свае прычыны.
За пераклад дзякуй: Denis Mitropolsky
PS
Крыніца: habr.com