• Liscript — web REPL: поцелуи, велосипеды и экскаваторы



      Некоторое время назад я написал интерпретатор лиспоподобного языка, который назвал Liscript. Опубликовал несколько статей на Хабре, посвященных особенностям реализации ядра, TCO, GUI, REPL-ботов и т.п. Недавно добавил web-интерфейс REPL-у (ссылка в конце статьи).

      При чем здесь поцелуи и экскаваторы? Думаю, большинству известны такие аббревиатуры, как KISS (keep it simple stupid — делай это проще, дурачок), YAGNI (You ain't gonna need it — Вам это не понадобится), а также высказывания людей разной степени великости про архитектурных астронавтов, «все должно быть сделано так просто, насколько возможно, но не проще», и т.п.

      Допустим, перед вами стоит задача — выкопать яму. Какие есть варианты решения? Взять лопату и выкопать самому — дешево и сердито, но долго и возможно неоптимально (зависит от вашего уровня владения лопатой и размеров ямы). Отдать на аутсорс таджикам (не будем рассматривать здесь этот вариант, хотя я должен был его упомянуть). Взять экскаватор — быстро и эффективно, но затратно: бензин/аренда, плюс не факт, что он проедет в вашу садовую калитку, значит надо сносить/восстанавливать забор и т.д. Также, необходимо определиться с моделью (порой из 100500 вариантов), а если вы будете управлять им самостоятельно, надо разобраться во всех его рычагах и педалях.

      Разумеется, если вы — профессиональный экскаваторщик, копаете по 200 ям за день, или вы стремитесь им стать, а изначальная задача (вырыть яму) нужна вам не сама по себе, а как тренировка или демонстрация ваших умений, тогда выбор очевиден (остается разве что вопрос модели). Но даже профессионал возьмет лопату, сажая цветы.

      В общем, про выбор инструментов под задачи, и конкретные (подозреваю, что спорные) решения, которые я выбирал в процессе реализации проекта, под катом.
      Читать дальше →
    • Игры на Scheme(Lisp) в среде DrRacket

      • Tutorial
      В данной статье используется среда разработки DrRacket. Для начала рассмотрим связь конечного автомата и игрового процесса. Объект управления в игре можно представить в виде конечного автомата. Рассмотрим программу, моделирующую светофор. Этот пример был описан в предыдущей статье.

      Переходом в другое устойчивое состояние является переключение сигнала светофора. Диаграмму состояний можно изобразить в следующем виде.

      image
      Читать дальше →
      • +17
      • 2,5k
      • 5
    • Как проектировать программы (HtDP)

      • Tutorial
      Учебник HtDP, посвящен программированию на языке Scheme в среде drRacket.
      drRacket можно скачать с сайта.
      Вводная часть учебника содержит описание функции empty-scene, предназначенной для работы с изображениями. Например, эта программа создает пустую сцену

      #lang racket  
      (require 2htdp/image)      ;библиотека для работы с изображениями 
      (empty-scene 100 60)     ;сцена (канвас) размером 100х60 
      

      Читать дальше →
    • Как я "<" моноидом делал

      image Некоторое время назад в одном уютном камерном собрании я делал доклад о своей разработке — скриптовом лиспоподобном языке Liscript. Начал с азов — семантики вычисления списков, префиксной нотации… Дошел до произвольной арности стандартных операций:

      + 1 2 3
      => 6
      

      все интуитивно понятно, вопросов не возникает. Рассказываю про булевские значения, привожу пример:

      < 1 2
      => true
      

      тоже все понятно. И тут вопрос из зала: «а если 3 аргумента передать, как будет вычисляться?» Я решаю, что это хороший повод выпендриться умными терминами, и отвечаю: «точно так же — как свертка по моноиду» :) И тут же поправляясь — «хотя операция сравнения не является моноидом», пишу пример:

      < 1 2 3
      => true
      < 1 2 3 4 1 2
      => false
      

      Все так же интуитивно понятно, вопросов не возникает и продолжаем дальше (благоразумно оставляя без рассмотрения вычисления примитивных операций на одном аргументе и вообще при отсутствии оных, а также вычитание/деление и прочие немоноидальные операции :)). Успешно миновав в докладе подобных камней, через некоторое время я подумал — а можно ли как-то изловчиться, и все-таки сделать операцию сравнения моноидом (в каком-либо смысле)? И мне кажется, мне это удалось. Заинтересовавшихся темой прошу под кат.
      Читать дальше →
    • Заклиная техническое интервью

      Предлагаю читателям "Хабрахабра" перевод (возможно лучшей) статьи Kyle Kingsbury, a.k.a "Aphyr".


      Давным-давно, на Шпицбергене, когда ты была юной ведьмочкой всего сорока трех лет, мама взяла в свои ладони твои еще не покрытые шрамами руки, и сказала:


      Видрун, зачатая от морских ветров в верхушках елей,
      Видрун, зелень моих ветвей, радость и ноша моих дней,
      Видрун, всех вдохновенней и умней, да станет мудрость нашего клана твоей:
      Никогда не читай Hacker News
      Читать дальше →
    • Создание кнопки LISP-приложения в nanoCAD



        Выход восьмой версии платформы nanoCAD Plus стал, на мой взгляд, самым крупным и масштабным обновлением за всю историю ее существования. Появилось множество новых возможностей, были доработаны и переосмыслены уже реализованные функции, учтены пожелания и замечания активных пользователей. Одно из важных изменений восьмой версии – это переработанные настройки пользовательского интерфейса (НПИ). О них и пойдет речь в этой статье, – а именно о том, как создать в nanoCAD кнопку и привязать к ней LISP-приложение. Создавать нашу кнопку мы будем в nanoCAD Plus 8.1, но метод работает и в других приложениях на базе восьмой версии.
        Читать дальше →
      • Как я стал лучше программировать

        • Перевод
        Автор статьи — Джеймс Лонг, один из создателей Firefox Developer Tools

        Несколько человек на React Conf спросили у меня совета, как программировать лучше. По какой-то причине люди видят во мне продвинутого программиста, к советам которого стоит прислушаться. Я подумал, стоит записать «ментальную модель» того, как я подходил к программированию на протяжении всех лет.

        Некоторая информация: мне 32 года и 10 лет твёрдого опыта. Наверное, только в последние пару лет я приобрёл уверенность в том, что делаю. Но даже теперь я продолжаю сомневаться в себе. Дело в том, что это чувство никогда не уходит, так что старайтесь не обращать на него внимания, продолжайте хаки и накапливайте опыт.

        Сразу скажу, что здесь всего несколько советов для улучшения своих способностей. В итоге вам нужно самим выяснить, что лучше всего подходит именно вам. Это просто те вещи, которые я посчитал полезными.
        Читать дальше →
      • Liscript — REPL боты онлайн



        Некоторое время назад, вдохновившись прочтением SICP, я написал пару своих реализаций интерпретаторов лиспоподобного языка со строгой семантикой, добавил десктопный GUI, консольный интерфейс, написал на нем Тетрис и много чего еще, и опубликовал пару статей на Хабр об этом.

        Недавно я добавил возможность широкой аудитории познакомиться с данным языком — написал REPL-ботов для следующих мессенжеров: IRC, Telegram, Slack, Gitter. Боты располагаются на специально созданных для них каналах, но в большинстве случаев их можно добавлять/приглашать на другие каналы и вести с ними личную переписку. Такой формат позволяет проводить текстовые онлайн-доклады на тему основ функционального программирования, сопровождая их демонстрацией интерпретатора в реальном времени.

        Конечно, графические окна с анимацией можно создавать только в десктопном варианте приложения. Поэтому для большего раскрытия возможностей языка и РЕПЛа я написал текстовую реализацию игры Лабиринт, в которую могут играть с ботом любое количество человек. Подробности и немного лирики под катом.
        Читать дальше →
      • Как делать больше, уставая меньше. Emacs pomidor

          Вступление


          С возрастом моя работоспособность не становится выше. Теперь я не могу сидеть по 6 часов не вставая: спина, шея, глаза — все это начинает рано или поздно болеть.


          Сейчас эта проблема особенно актуальна, потому что наша игра уже запущена в раннем доступе, и нужно сломя голову нестись к релизу.

          Читать дальше →
        • Готовим многопоточность с core.async

          image


          Всё больше набирает популярность паттерн использования каналов при создании
          многопоточных приложений. Идея не нова, ее дизайн заложен ещё в далёком 1978 году
          в виде CSP.Наиболее известная реализация сейчас повсеместно используется в Golang.


          Мы же в статье рассмотрим реализацию CSP в core.async для Clojure, если интересно, добро пожаловать под кат.


          Читать дальше →
        Самое читаемое