Liscript — реализуем TCO
2016-04-21 05:03:39
... написал пару
интерпретаторов Lisp-подобного ... — оптимизацию
интерпретатором хвостовых вызовов функций ...
+ развернуть текст сохранённая копия
В своей прошлой статье Пишем Lisp-интерпретатор на Java я кратко и тезисно рассказал про то, что написал пару интерпретаторов Lisp-подобного языка, который назвал Liscript — на Haskell и на Java. Ничего особо уникального и выдающегося в этом нет, но для меня это было приятным, интересным и познавательным времяпровождением. Среди прочих особенностей, я упомянул про реализацию TCO (tail call optimization) — оптимизацию интерпретатором хвостовых вызовов функций. Этот вопрос вызвал интерес отдельных участников сообщества, и поступило предложение детальнее раскрыть его в отдельной статье, что я и попытался сделать. Интересующихся прошу под кат.
Читать дальше →
Тэги:
java,
lisp,
алгоритмы,
веб-сайтов,
интерпретаторы,
разработка
[Из песочницы] Cинтаксический сахар для PHP
2013-07-15 14:43:28
... написать собственный
интерпретатор, не ... вначале нативный
интерпретатор парсит изменённые исходники ...
+ развернуть текст сохранённая копия
Только ленивый, точнее, ну очень ленивый не скажет про PHP пару ласковых. Стоит мимолётом покритиковать разработчиков за то, что больше половины попыток исправить ситуацию с фаршированием стандартной библиотеки, несогласованности и отсутствием того, что очень сильно понравилось в *подставить свой любимый язык* только её (ситуацию) ухудшают, а те, что влияют положительно — не доработаны; Конечно же это провокация и ведёт к неизбежному холивару, но давайте постараемся избежать этого. Из довольно продолжительных размышлений на эту тему и родилась одна затея…
Скажите, а ведь вы хотите что-то изменить в языке, поправить? Знакомясь с новыми языками и подходами, лично у меня — эта мысль крепла. Я испробовал довольно много подходов, начиная от попытки написать собственный интерпретатор, не обладая достаточными знаниями — попытка провалилась, заканчивая переписыванием php исходников (не интерпретатора, а самих *.php файлов) — вначале нативный интерпретатор парсит изменённые исходники, затем транслирует в код\сохраняет данные и уже их интерпретирует, но, добившись определённых результатов — и эта попытка была погребена благодаря своему неудобству и «костылеобразности». И, уже почти разочаровавшись в этой затее — мне помог докладчик на DevConf (если не ошибаюсь — Александр NightTiger), сам того не подозревая. Доклад был про аспектно-ориентированное программирование и одной из просьб докладчика, которая и подтолкнула меня на правильный путь, была: «Поднимите руки те, кто знает про php фильтры». Читать дальше →
Тэги:
php,
велосипедостроение,
интерпретатор,
песочница,
сахар
Ненормальное программирование / Изобретаем язык программирования для тренировки мозгов. Или эзотерический язык программирования за 5 минут
2011-09-10 00:46:53
Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования
Piet. ...
+ развернуть текст сохранённая копия
Изучая вики по эзотерическим языкам я наткнулся на интересный язык программирования
Piet. Отличительной особенностью которого является графическое представление программы. Например, эта программа выводит «Hello World!»
И показалось мне, что данная программа похожа на QR-Code.
Только Piet использует цветовую кодировку. А QR-Code использует комбинацию расположения точек.
Читать дальше →
Тэги:
brainfuck,
path,
piet,
qr-path,
интерпретатор,
эзотерический,
язык
JavaScript / Замыкания и объекты JavaScript. Переизобретаем интерпретатор
2011-08-02 16:46:04
... уровне компилятора или
интерпретатора набор синтаксических карамелек ...
+ развернуть текст сохранённая копия
Обычно концепции или парадигмы программирования объясняют либо описательно — «разжёвывая» новые идеи простыми словами, либо метафорически — уподобляя их хорошо знакомым аудитории предметам и понятиям. Но ни первый, ни второй способ не дает такого точного и полного представления о предмете, как взгляд с точки зрения низкоуровневой реализации.
Когда в изучении языка доходишь до нетривиальных вещей, бывает полезно сместить уровень абстракции, чтобы понять, как на самом деле всё устроено. Ведь, по большому счету, любые понятия и конструкции языков сколь угодно высоко уровня сводятся к старому доброму машинному коду. Писать в объектно-ориентированном или функциональном стиле можно и на чистом C, и даже на ассемблере. Грубо говоря, любой высокоуровневый язык — это зафиксированный на уровне компилятора или интерпретатора набор синтаксических карамелек и шоколадок. Повышение уровня абстракции позволяет писать более сложные программы с меньшими усилиями, но вот понять в начале пути, что конкретно имеется в виду под наследованием или замыканием, как это всё работает и почему, гораздо легче, разобравшись, каким образом всё это реализовано.
JavaScript, как никакой другой язык, нуждается в именно таком объяснении. Функциональная природа, скрытая за Си-подобным синтаксисом, и непривычная прототипная модель наследования поначалу сильно сбивают с толку. Давайте мысленно понизим уровень JavaScript до простого процедурного, наподобие Си. Отталкиваясь от этого «недоязыка», переизобретем функциональное и объектно-ориентированное программирование.
Читать дальше →
Тэги:
javascript,
замыкание,
интерпретатор,
наследование,
ооп