Чернила мечтателя

Итак, вы хотите научиться создавать что-то на новом языке программирования? Одним из наиболее важных инструментов, которые вы можете дать себе в контексте обучения, является адаптивная среда. В программировании это реализовано несколькими способами, но самым простым из них является REPL.

Вы спросите, что такое REPL?

Это среда, которая позволяет вам взаимодействовать с кодом построчно. На самом деле, REPL — это аббревиатура от Read-Eval-Print-Loop, что является довольно буквальным описанием того, как достигается интерактивность. Его также можно назвать интерпретатором или оболочкой.

  • Чтениеберет строку кода и поместит ее в память
  • Evalоценивает строку кода по этому адресу памяти
  • Печатьотображает результат этой оценки
  • Циклповторяет процесс

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

В классическом эссе Пола Грэма Хакеры и художники одним из основных моментов является то, что люди созданы для того, чтобы учиться на практике, поэтому сокращение разрыва между обучением и действием помогает нам учиться и делать быстрее. Его предпосылка резюмируется так: Если вы не можете быстро и легко набросать грубое изображение, вы не создадите шедевр. Вы можете довести это до основ и сказать, что никто не красит стену в темноте. Пример художницы с ее кистью и холстом вызывает воспоминания, но на самом деле образец абстрагируется для всего обучения. Бросок мяча, написание пьесы, торговля акциями и даже полет на истребителе можно разбить на циклы, которые выполняют действие и возвращают ответ. Концепция интеллектуальных агентов в ИИ также основывается на той же идее, раздвигая границы обобщения и абстракции.

Первоначально в программировании не было встроено такого шаблона. Только когда в 1958 году Джон Маккарти разработал Lisp, интерпретация в реальном времени стала доступна как способ взаимодействия с машинами. До этого все делалось с помощью компиляторов, которые требуют, чтобы вся кодовая база была собрана из человекочитаемых инструкций в машиночитаемые сразу, прежде чем возвращать результат всех инструкций в виде одного монолитного ответа.

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

На данный момент мир программирования наводнен REPL и связанным с ним программным обеспечением, которое может помочь нам быстро и легко исследовать новый код. Сейчас есть переводчики для каждого языка. Существуют онлайн REPL, которые могут интерпретировать код в браузере. Существуют интерпретаторы на основе документов, которые могут оценивать код внутри отформатированного документа и отображать результаты. Даже скомпилированные языки, такие как Java и C, могут быть интерактивными через виртуальные машины, которые предоставляют интерпретаторы поверх компилятора.

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

  • ЧитатьКакие типы утверждений он может читать? Где он их хранит?

— Например, некоторые интерпретаторы могут читать только одну строку кода за раз, в то время как другие, такие как консоль javascript в инструментах разработчика, позволяют вводить и редактировать несколько строк одновременно, прежде чем отправлять их для оценки. Некоторые языки позволяют переопределить оператор после его оценки путем перезаписи нового определения с тем же именем, другие — нет.

  • ОценитьКак он оценивает утверждение? Что он делает с результатом?

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

  • ПечатьВ каком формате печатается результат? Сколько информации он отображает?

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

  • Цикл — Как быстро вы возвращаетесь к этапу чтения? Что это даст вам, когда вы вернетесь к шагу чтения?

— Большинство просто печатает результат и тут же возвращает курсор на строку ввода, но есть и интересные варианты. Теперь есть встроенные интерпретаторы, которые работают внутри документа и выводят результаты кода в документ, в котором вы их записали, а затем помещают вас на новую строку в документе, позволяя объединить документацию и демонстрацию кода в единое целое. формат представления.

Вместе эти различные части функциональности объединяются, чтобы создать очень разные холсты, на которых можно учиться и творить. Это благословение, о котором мы должны знать, поскольку современные разработчики находят лучший способ построения и адаптации в нашем быстро меняющемся мире программирования. Совсем недавно, в 2006 году, разочарование Брета Виктора было настолько ощутимым, что он написал эссе Волшебные чернила, в котором указал путь к большей части того, что было создано недавно (онлайн-переводчики, переводчики на основе документов), и указал на еще более жесткую обратную связь. петли, которые можно построить, чтобы уменьшить расстояние между нашими действиями и нашим обучением.

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

Удачного кодирования и найдите свой REPL!

(Себастьян Ройер)