Comments 52
Хотите поговорить об этом?
Вот именно. Только он не выполнился. Вы видите сам макрос, а не его результат
Потому что это программа, а не ее вывод. Процессор — это вы, читатель. Прочитали «времени суток», подставили, скажем, «вечер», с поправкой на падежи.
Если в шаблоне «Привет, %UserName%!», то читатель Хабр должен прочитать «Привет, Хабр!»
Читатель не может прочитать в шаблоне значение с подстановкой. По определению. Шаблон — это шаблон, результат подстановки — это результат подстановки.
«Привет, %UserName%» — это шаблон. Сделать подстановку — ваша задача, как интерпретирующего текст.
а не изображать из себя «процессор».
Отчего же? Вы читаете текст, вы его разбираете, интерпретируете. Процессор в чистом виде, работающий по своей внутренней программе. Текст, который вы читаете — входные данные.
Как мне кажется, вы меня поняли. И закончим.
Я понял, что вы не поняли.
Сделать нужную подстановку, это не моя задача, а того, кто этот текст пишет и отправляет.
Ни разу. Вы — автор — написали текст программы. Или, например, XML файл со ссылкой на какой-то объект данных. Вы (автор) будете подставлять данные или тот (та сущность), кто будет выполнять/интерпретировать эту программу/шаблон?
Если макрос не работает, это у него проблема, его программы, а не моя (как читателя).
Так это он у вас в голове не работает. Это шуточный макрос, который подставляется читателем во время чтения. By design.
По моему вы сами запутались.
Да нет. Просто вы отчего-то не можете понять простую шутку, которую из-за этого приходится объяснять формально.
Такое может называться скрипт-языком, годящимся в качестве клея для вызова апи? Реализация (coco/r + обертка).
я вижу связь между тем, как человек говорит и тем, как он программирует
Честно, тоже хочу такую супер-способность. Вы, наверное, часто проводите собеседования?
Ошибки большей частью уже ищет семантический анализатор. Затем работает генератор промежуточного кода и так далее.
Не вводите людей в заблуждение.
>2. Есть два типа данных (integer, string).
Сразу типы данных? без лексем, операций, разделителей?
не серьезно
<зануда-mode-on>
У меня недавно был юбилей — elixir стал 20м языком программирования, на котором я написал что-то для использования в продуктиве.
Так вот, на почти любом распространенном языке можно писать хорошо и аккуратно. То есть это не проблема языка. Обычно новый язык создают, когда существующих не хватает для решения какой-то задачи, либо они фундаментально не решают ее хорошо. Например, elixir очень эффективно использует ресурсы сервера и отлично работает в многопроцессорных/многоядерных системах, в то время как ruby в силу своей природы так не может. Поэтому вместо того, чтобы "накостылять" ruby и попробовать с помощью него решать задачи, для которых он не очень приспособлен by design, сделали elixir.
Вместо того, чтобы научиться аккуратно писать код, вы пишите свой язык. Это полезное упражнение, но выносить его на общее обозрение — это не самая хорошая идея.
P.s. я тоже писал свой язык программирования лет 10 назад, поэтому не вижу в вашем начинании ничего плохого, но выносить его из песочницы все же следует после того, как вы поймете, что это действительно может быть полезно.
</зануда-mode-off>
Но тут то проблема в том, что автор статьи не никак не может писать правильно.
Думаю, ему надо не просто язык изобрести, но придумать для себя язык-"сержант", который будет стоять у него над душой и его дисциплинировать: "Делай раз!!!, Делай два!!! Делай три!!! Переходим к подтягиваниям: 1, 2, 3, 4, 5, 6, 7, 8, 9!!! Упал-отжался: 1, 2, 3, 4, 5, 6, 7, 8, 9!!! Встать!!! Три круга — на время — бегоооом… арш!!!". А потом, после разработки языка, всласть на нём пописать что нибудь опенсурсное — чтобы выработать таки хороший стиль, как в старину вырабатывали каллиграфы свой почерк.
Нечто подобное представляет собой язык Ada но тут этого "сержанта" надо сделать куда жёсче: можно на основе компилятора от ады или её спарк-разновидности разработать такой вот свой велосипед, А если автор возьмётся за разработку велосипеда с С/С++ подобным синтаксисом — то у его велика и своя аудитория может появится — преподы вузов, которым надо научить по человечески писать на С/С++ своих студентов. Можно, например, прямо в таком велосипедном языке начать реализовывать автоматические проверки компилятором соблюдения стандартов MISRA программистом — ведь здесь цель — обучение "чистописанию"..
Почему строки заканчиваются с точкой запятой?
Почему одинарные кавычки?
Почему print со скобками? Это функция? А где вы описали реализацию функций? А где она подключается, или она встроенная?
А почему первая и остальные строки сдвинуты табуляцией?
А как вы строку складываете со сторокой? Чем реализованы?
Как реализованы типы данных? Как вы определяете их размерность, особенно в случае со строкой?
Где демонстрация хоть чего-либо?
Я больше склоняюсь к созданию некоего промежуточного звена между интерпретатором и компилятором. То есть к созданию языка программирования, который будет транслироваться в байт-код виртуальной машины, которую так же предстоит написать.
О, боги! Это называется транслятор. Транслятор в язык виртуальной машины.
То есть к созданию языка программирования, который будет транслироваться
Это не создание ЯП, это создание среды для его реализации. Где описание терминалов, лексем, синтаксиса? Где БНФ или аналоги?
Когда я учился — создание простого компилятора языка типа basic было одним из типов курсовиков 3-го курса.
(АВТФ автоматики и телемеханики)
Интересно, а сейчас это сойдет за курсовик и какие вообще курсовики дают на 3-м курсе.
Жалобы в основном на то, что в статье написано
«Давайте напишем язык, для этого нам нужно а, б, в, г, д, е», но вот зачем и почему я так решил — ничего этого описывать не буду, просто приведу готовый кусок программы на новом языке, не поясняя почему я там написал все именно так, и что именно я хочу сделать в новом языке, чтобы он был лучше/хуже и вообще какая цель.
Но что еще хуже — даже в этом куске готового кода есть невнятные противоречия.
1. Есть однострочные комментарии, начинаются со знака диеза (#) и продолжаются до конца строки.
2. Есть два типа данных (integer, string).
3. Есть возможность вывода информации на экран.
4. Есть возможность ввода значений с клавиатуры.
Далее следует код, в котором;
1. Нет ни одного комментария. Нигде.
2. Есть int и string, но заранее не поясняется, как должны объявляться переменные, как они могут присваиваться, одинарные кавычки или двойные нужно использовать для строк и должна ли быть разница, в конце кода даже идет сложение двух стрингов, что на самом деле операция посложнее, потому что неясно что будет если подставить string + int или int + string — то есть это выглядит как «мы напишем простенький пример типа 1 + 2, смотрите: sqr(100%-8/(4^3))/sin(-1^5).»
3. пример с print() — синтаксис команды — почему нужно брать в скобки? интуитивно подразумевается, что в таком случае принт это функция, но о том что в нашем трансляторе уже создано понятие функции — нет. Для упрощенного примера, нужно было например «print a;»
4. input() — тоже функция. И что будет если будет введен null неясно.
То есть в статье много нелогичностей или даже противоречий. Если бы ее переделать — да, такие вещи нужны, но те в текущем ее виде.
Я неспроста привел пример с хлебом, мне самому же он и понравился) Его на самом деле очень сложно печь. Не достаточно просто залить водой и перемешать все ингредиенты, опару для него нужно выстаивать сутки при определенной температуре, которую нужно чуть ли не градусником мерить постоянно, иначе он не поднимется и будет как куча военного клейстера с опилками. Что уж говорить о создании своего ЯП? В нулевой части автор, как этого и стоило ожидать, рассказал какая нужна емкость и какие ингредиенты. В следующих он уже бы рассказывал скорее всего как их нужно смешивать. Возможно в какой-либо части уже начнется непосредственно готовка. А то, что автор мешает все черенком от лопаты, потому-что ему удобнее, дак мешай венчиком, а хлеб испеки в форме домика для кукол если так хочется. Однако я сейчас зондирую почву по этой теме, и все статьи не прошли дальше 0 части и были слиты именно по этим же причинам: форма хлеба не понравилась. В итоге никто и не печет, ибо просто не по чему.
вместо того, чтобы следить за выходом новых статей из цикла, которые будут постепенно открывать теорию (для тех, кому это нужно, конечно же), ее слили только потому, что print здесь «нужно брать в скобки»
Нет, слили её потому, что она бесполезна. И остальные будут не лучше, так как автор сам не разбирается даже в теории! Вот цитата из статьи: "К тому же, его (питона) типизация, а точнее ее полное отсутствие позволит сократить количество переменных используемых при написании кода." Что и чему он сможет научить других людей? У автора есть спецификация языка? Полное описание синтаксиса? Модель памяти? Если есть — пусть сразу выложит. А пока — справедливые минусы.
PS А эти аналогии с хлебом совсем не в тему.
Я косвенно могу предположить, что под словами «чему он сможет научить других людей» Вы подразумевали то, что автор вообще может дать людям с такими познаниями. Однако теория такого рода часто касается не совсем даже программирования. Дак вот отвечу, что если уж автор решился на написание целого курса статей, значит конкретно в этой области все-таки какие-то знания у него есть, их и хотелось получить. Наглядный пример: в хацкинге школьники и студенты разбираются часто лучше взрослых программистов (я сейчас не про возраст и постепенно отмирающий мозг), и ко всему прочему, он (хацкинг) часто бывает далек от классического программирования как такового (максимум это эксплуатация уязвимостей и клепание своих скриптиков для этого). В основном он выражается в поиске уязвимостей, а самое главное — возможностей для их эксплуатации. Реализация этого — дело десятое, на PHP легко писать, порог низкий, синтаксис простой, типизации нет. Дак вот если я хочу научиться ему у них — буду ли я воротить нос только потому, что в программировании как таковом полностью они не разбираются (даже в PHP по сути)? Они прекрасно разбираются в своей области, за чем я, собссно, к ним и обращаюсь.
Не форма, а рецепт — в нем не было «почему нужно брать именно этот компонент», «сколько его брать». Только немного философии
Слабый уровень статьи как раз наоборот очевидно указывает, что не было бы раскрыто.
Все что есть в статье — общеизвестно, доступно, есть хотя бы на той же википедии (только там больше и подробнее), поэтому действительно непонятно, почему вы поддерживаете статьи, которые ну реально, совершенно ничего нового не дают.
Си просто мозгодробилен с его указателями, буферами и типизацией, Java полностью объектно-ориентирована даже там где это совершенно не нужно, у Питона в синтаксисе черт ногу сломит. Вот PHP реально крут и меня устраивает полностью и во всем, но его репутация уже окончательно подмочена школотой, клепающей на нем сайтики для игровых кланов на купленном на сэкономленные от школьных завтраков деньги
Возьмите Delphi. Указатели использовать можно, но никто не заставляет. Совмещены объектно-ориентированная и императивная модель, как хотите, так и пишете. Приличная библиотека.
Создание языка программирования. Часть 0