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

И так, давайте немного познакомимся. Меня зовут Ярослав и я уже 3 года работаю преподавателем для детей. В основном преподаю программирование и робототехнику. Сейчас работаю над своим проектом робота для обучения, и собственно про одну из частей это темы мы сегодня поговорим.

Зачем создавать новый язык? Скажу сразу, ответ на этот вопрос достаточно прост. Моя идея состоит в том, чтобы перенести программирование в веб. Вы подключаетесь к роботу по ip, и получаете веб сайт средой разработки. Таким образом устанавливать себе на устройство ничего не нужно будет. Так же, мне хочется добавить простоты в процесс обучения.

Как устроен данный язык? Тут ничего особенного, пользователь написал код, дальше непосредственно на сайте, код обрабатывается лексером для получения списка токенов. Токены попадают в парсер, который соединяя их, создаёт AST (abstract syntax tree), что будет использовать интерпретатор для выполнения. Помимо этого AST так же применяется для построения блок схемы кода (на данный момент отключено, так как требует доработки). Именно AST будет отправляться на робота и там выполняться. Схему данного языка можно увидеть на рисунке ниже.

Схема работы языка
Схема работы языка

Теперь разберем, что уже работает и что можно использовать. Первое что нужно для написания программы, это конечно редактор код. Он позволяет писать программу, и пока ничего более. В дальнейшем будет добавлена и табуляция, и подсветка синтаксиса. Но на данный момент в альфа версии этого нет. К слову, что нужно будет добавить можете написать в комментарии, будет интересно почитать ваши идеи о идеальном редакторе кода.

Редактор кода
Редактор кода

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

Симуляция работы робота
Симуляция работы робота

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

цел x = 10
цел y = 5
цел z = x + y * 2   // Ожидаемый результат: z = 20
вывод(z)           // Должно вывести: 20

Как можно видеть, переменные объявляются так же, как и в многих других языка. Есть комментарии строковые //. Команда "вывод" выводит данные в консоль. Имена переменных могут иметь как кириллицу, так и латиницу.

если z меньше 15
    вывод("z меньше или равно 15")
иначе
    вывод("z больше 15")
конец условия

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

цел счетчик = 0
пока (счетчик меньше 3) 
    вывод("Счетчик: " + счетчик)
    счетчик = счетчик + 1
конец цикла

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

ЛевыйМотор(вперед)
ПравыйМотор(вперед)
РоботВперед()
Пауза(2000)          // Робот двигается вперед 2 секунды
РоботСтоп()

ЛевыйМотор(назад)
ПравыйМотор(назад)
РоботНазад()
Пауза(2000)          // Робот двигается назад 2 секунды
РоботСтоп()

РоботРазвернись(влево)
Пауза(1000)          // Робот поворачивается влево на 1 секунду
РоботСтоп()

цел расстояние = РоботДистанция()
вывод("Расстояние до препятствия: " + расстояние)

Это команды для управления роботом. Пока не особо много, и нет команд для управления портами ESP8266 напрямую, однако это позволяет уже делать простенькие программы на данном языке.

Что могу сказать по итогу. Мой язык еще не совершенен, но я хотел бы довести его до конца. Опробовать его лично, вы можете на тестовой страничке. Я был бы крайне признателен за ваше мнение и обратную связь, так как она поможет сделать мой язык лучше, удобнее и понятнее. Основная цель обучить детей, поэтому прошу вас оставлять своё мнение.

Комментарии (28)


  1. SIISII
    07.11.2024 12:56

    Сразу вспомнились агатовские Робик и Рапира :)


    1. Robotium Автор
      07.11.2024 12:56

      я про них узнал уже после начала работы)
      До этого видел такое в КуМир, но про старые добрые советские разработки было интересно узнать и почитать, какие идеи были у умов того времени. В целом есть что у них позаимствовать)


    1. Vilos
      07.11.2024 12:56

      зачем вы написали то, что хотел написать я:)


  1. RodionGork
    07.11.2024 12:56

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

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

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

    цел счетчик = 0

    зачем вам типизация? это напряжёт умы школьников гораздо серьёзнее чем английский :)

    изобретая новое старайтесь смотреть на то что уже сделано до вас - basic, logo - не требуют даже предварительного объявления переменных. и это неспроста

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


    1. avshkol
      07.11.2024 12:56

      Для детей до 5 класса английские слова будут создавать ещё один барьер в изучении. Особенно для тех, кто не блещет в языках (а вот в логике и алгоритмах движения робота сможет себя показать)

      Согласен, что типизацию выкинуть - ещё один барьер.


      1. nochkin
        07.11.2024 12:56

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


      1. dponyatov
        07.11.2024 12:56

        сейчас примитивно-игровой английский идёт уже в детсадах с претензией, в школах со второго класса (сразу как научатся +\- бегло читать на русском)

        у нас информатика была с 3го класса (факультатив) -- выучить 20 слов латиницей в ВАСИКе не составляло никакой проблемы даже для самых дуболомных товарищей, которые ходили исключительно чтобы поиграть

        с другой стороны, если кому-то сложно выучить 20 слов на латинице -- а потянет ли он тогда хотя бы циклы и рекурсию?


    1. Robotium Автор
      07.11.2024 12:56

      Привет, я сам работаю уже несколько лет с школьниками, и к сожалению, 60-70% из них английский знают на вы и шёпотом... Возможно это проблема конкретно моей среды, и образования в конкретно взятом городе. Выучить нужные ключевые слова не проблема, но мотивации у детей не всегда хватает. Не редко дети боятся даже пробовать из-за того что "английский = сложно" в их понимании. Спасибо за ваше мнение, я его учту и обязательно применю при разработке своего языка!
      На счёт типизации, она по сути не строгая. В теории вы можете без труда переменную с целыми значениями использовать для строкового или логического типа. Но да, думаю стоит изменить это под одно ключевое слово "переменная", или просто добавить его для объявления переменных.


      1. SIISII
        07.11.2024 12:56

        Ну, я начал работать с компами с 13 лет, английский реально не знал (обычная советская школа с весьма посредственным, скажем так, уровнем преподавания). Но это абсолютно никак не мешало мне (и не только мне) освоить на Агате сначала Бейсик, а затем Ассемблер. Робик с Рапирой даже не пробовали смотреть -- интереса никакого они для нас не представляли. А через пару лет, когда уже я вёл кружок в нашей же школе для 5-6-классников (половина из которых была "немцами" -- это сейчас английский обязательный, но не в 1980-х), они тоже без проблем всё усваивали. Знание английского для того, чтобы выучить десяток-другой команд, НЕ ТРЕБУЕТСЯ от слова совсем. Ну а кто на такое не способен -- тому нечего делать не только в плане компьютеров, но и вообще в чём угодно, где требуется хотя бы капля мозгов.


        1. avshkol
          07.11.2024 12:56

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


  1. nochkin
    07.11.2024 12:56

    Интересно стало почему вдруг ограничено старым ESP8266. Это особенность того, что есть уже в наличии или в чём-то другом?


    1. Moog_Prodigy
      07.11.2024 12:56

      Ничего себе "старый". Вы им предлагаете изучать новые процы под RPI ?

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


      1. nochkin
        07.11.2024 12:56

        Где же я предлагал RPi? У меня даже про это слова не было. Речь шла про микроконтроллеры, а не RPi. Та же ESP32 серия уже вытесняет (если ещё не вытеснила) ESP8266, которому уже больше 10 лет.
        Если Ардуино -- убого, а вариант в статье -- самое оно, то я даже и не знаю что сказать. Разве что вопрос о том, почему вдруг Ардуино стало убого? И почему на этой платформе нельзя ничего нормально сделать для "продакшен"? Не докапываюсь, действительно любопытно.


        1. Moog_Prodigy
          07.11.2024 12:56

          Извиняюсь, вы правы. ESP32 куда помощнее. Вот если бы вы такое сказали про 32...но вы не сказали ва у меня триггернулось - 8266 им старый...рпи подавай?

          Как то вот так думал. Согласен, погорячился. Приношу извинения.

          А насчет Ардуино и его убогость - часть ответа содержится в вашем же вопросе. Во первых - схемотехника, которая кривая и косая для удобства школьников, но начинаешь гонять SPI по этим всем разьемам и выясняются странные глюки. Поэтому нельзя в продакшен вот только по железу, если это конечно не детский игровой автомат. "Ардуино" - это не только платы, это свой тормозной загрузчик, мега-корявая IDE (да какая там иде...), отсутствие нормальной среды отладки и разработки, опять же наценка "за бренд", хотя китайцы и начали их клепать копии за копейки.

          Просто сама философия "ардуино" - это хренакс и в продакшн. Для школьников и новичков продакшн - от мигающего светодиода до робота-манипулятора, какой-нибудь терморегулятор. автоматизация и тд. Взять вот простой пример - управление шаговиком. Думать - не надо, покупаешь шилд с драйвером шаговика, втыкаешь его по красивой разноцветной схеме, упоминаешь универсальную библиотеку для шаговиков, и просто пишешь "крутить двигатель". Он крутит. Хочешь чтобы крутило в другую сторону - чуть почитав документацию находишь, что можно указывать направление крутилова. Для общего понимания - очень хорошо, поэтому и взлетела платформа и такой подход. Для профессионального же подхода - нужно понимать что ты делаешь, я не говорю что каждый должен писать свои библиотеки на асме.

          Чем же отличается 8266, 32 от ардуино плат? У ардуино тоже хорошие процы - avr, stm. Только подходом. Нет плохих микросхем - есть плохие разработчики, а в случае ардуино все настолько упрощено, что есть видимость "да что там пид алгоритм? ща накидаю, библиотеку скачаю и она сама коэффициенты найдет". И найдет. Но если что - это оперирование черными ящиками. Именно поэтому я считаю это подходом непрофессиональным.


          1. nochkin
            07.11.2024 12:56

            Arduino -- это платформа. То есть, комплекс железа, софта и библиотек. У меня лично проблем с SPI на ESP32 не было. Какие глюки тут бывают?
            Не очень понял при чём тут IDE? Можно хоть на vim делать или на VSC, кому как удобно. Вариантов достаточно.
            Отладка тоже есть. Я отлаживал на том же ESP32-S3 когда можно было breakpoints поставить и прочие плюшки. Это всё есть.
            Наценки за бренд нет. В чём она? Я покупаю обычную плату на ESP32 без слова "Arduino" и запускаю там Arduino проект.
            Shields -- это для прототипов, конечно. Соединение проводами в разьёмах тоже для прототипов, так как разваливается время от времени. Запускать прототип в "продакшен" -- это неправильно, тут согласен. Но Arduino -- это не обязательно только в рамках прототипа.
            Да и нельзя сравнивать 8266 с Arduino. Это как яблоко с апельсином. Зачем сравнивать чип с платформой?
            Arduino можно запускать не только на AVR и STM (кстати, STM раньше тоже не было), но и на куче других МК.

            Могу предположить, что Вы отстали немного от этого. Возможно, просто связано с отторжением многолетней давности когда реально было всё немного не удобно то там, то сям.


    1. RodionGork
      07.11.2024 12:56

      я думаю просто исходили из чего-то что было в наличии (м.б. в каком-то кружке и т.п.) или что удалось добыть - а распыляться сразу на кучу платформ нереально


      1. Robotium Автор
        07.11.2024 12:56

        да, все верно


      1. nochkin
        07.11.2024 12:56

        Я тоже так подумал, но решил спросить что бы наверняка.
        По поводу распыляться, то при небольшом желании можно писать универсальный код, что бы под ESP8266/ESP32. Но это надо усилие, пусть и совсем небольшое.


    1. Robotium Автор
      07.11.2024 12:56

      ESP32 в разных его вариациях так же планируется, просто текущий мой проект строится именно на базе 8266, поэтому он и первый)


  1. Zuy
    07.11.2024 12:56

    А свой редактор кода это обязательная штука? Прикрутить это все к VSCode не получается?


    1. LAutour
      07.11.2024 12:56

      Предлагаете школьникам, которые захотят поэкперементировать дома, самим ставить и настраивать VSCode?


      1. ChessMax
        07.11.2024 12:56

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


    1. Robotium Автор
      07.11.2024 12:56

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


  1. Plesser
    07.11.2024 12:56

    Почему то вспомнил первое издание книги Кернигана и Ричи "Язык программирования Си", там было предисловие что нам необходим отечественный язык программирования с синтаксисом на кириллице. Вроде посмеялись тогда, но потом был 1С а теперь вот это....


    1. SIISII
      07.11.2024 12:56

      Это Вы Кобол на русском ещё не видели :) А у меня где-то советский ГОСТ лежит, где Кобол на английском и на русском параллельно.


      1. Plesser
        07.11.2024 12:56

        Господи, спасибо что отвел от меня это


  1. RusWin
    07.11.2024 12:56

    Можно сделать подход как было сделано в учебной программе "Графический исполнитель «Кенгуренок (ROO)»". Всё строго дискретное, команд минимум. Ну или тупо спереть язык оттуда.


  1. indrej
    07.11.2024 12:56

    На самом деле, в простых яп код практически читается носителем английского как естественное предложение. for each category in categories... В vbs добавили даже лишнее then после if, чтобы было предельно понятно всем. Самое неочевидное в vbs - функция len(), всё остальное читается любым человеком без затруднений. В ранних версиях даже писали print a, а не print(a), то есть без скобок. Предельно ясно. Подобные принципы в пайтоне. Даже правило хорошего кода, чтобы строчка читалась по-английски естественным образом. Там пишется не if a!=null, а if a is not null. Далее двоеточие и отступ. В вашем языке, к сожалению, язык не читается. Что за "пока"? До свидания? Строчка не читается как предложение. Что за "вывод"? "Напечатай"? Это команда? Не получается предложения.