Всем привет. Я разработал язык программирования с русским синтаксисом, специально для робототехники на базе плат 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 напрямую, однако это позволяет уже делать простенькие программы на данном языке.

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

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


  1. SIISII
    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. nochkin
    07.11.2024 12:56

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


    1. Moog_Prodigy
      07.11.2024 12:56

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

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