Как стать автором
Обновить

Как я собственный язык на КуМире писал

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров7K
Всего голосов 29: ↑28 и ↓1+34
Комментарии25

Комментарии 25

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

Сейчас среда тоже довольно неплохая. Порадовало и то, что есть полноценный дебаггер: с брейкпоинтами и просмотром содержимого памяти. Ложка дегтя все же есть:
а) оно очень медленное;
б) отступы в IDE — мнимые. Она их сама расставляет, анализируя код. Как итог: плохая производительность + в исходном тексте отступы отсутствуют.

Использовать "все" вместо "всё" в качестве ключевого слова - это надругательство над русским языком.

Все следующие выражения синтаксически верны и означают одно и то же

А тут еще и надругательство над здравым смыслом. С точки зрения русского языка у выражений разный смысл, и только второй вариант достаточно точно совпадает с тем, что автор имеет в виду. Причем для разных названий правильное место для "не" будет различаться, так что это никак не унифицируется.

Использовать "все" вместо "всё" в качестве ключевого слова - это надругательство над русским языком.

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

Причем для разных названий правильное место для "не" будет различаться, так что это никак не унифицируется.

Так оно же и унифицируется тем самым образом, что "не" можно поставить в любое место названия.

Так оно же и унифицируется тем самым образом, что "не" можно поставить в любое место названия.

А как с таким кодом работать? Поискать переменную по имени, рефакторинг сделать, читать без подсветки синтаксиса, в конце концов?

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

В исторической справке очень много неточностей, видимо перекочевавшей туда из Википедии. Среда разработки (фактически IDE) именно с названием "КуМир" изначально написана под DOS ещё в конце 80-ых разработчиками в МГУ (они же ИнфоМир). Не упомянута фамилия А.Г.Кушниренко, под учебник которого собственно и была написана эта среда.

Да, вы правы, историческая справка пришла с Википедии, самому при тех событиях присутствовать не довелось). Хотел как-то сжато изложить суть, поэтому и потерял пару моментов. Ссылку на Кушниренко и информацию про МГУ добавил в статью.

А я в школе на ИнтАл программировал) Кумир тогда был можно сказать конкурентом согласно тогдашним книгам.

В школе выдали учебники с программами на этом языке, но на компах (первый год Агат, второй Искра, клон 286) никаких таких сред не было, писали сначала на Бейсике, потом на турбо Паскале. Но я все это любил и изучал все что попадало в руки, поэтому писал программы в тетрадке на этом языке так-же, как и на Бейсике и Паскале :)

Уфф...

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

Оставлю пару комментариев глазами бывшего ведущего разраба.

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

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

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

LLVM.
А вот тут совсем всё грустно, и его в современном КуМире быть просто не может. Прототип LLVM-backend действительно был сделан и показал прекрасные результаты на олимпиадных задачах, но API LLVM очень не стабильный даже сейчас, а 10 лет назад менялся каждую минорную версию. Я честно обвешал всё #ifdef'ами под разные версии от 3.4 до 3.7 в различных актуальных дистрибутивах Linux, но так вечно продолжаться не могло. Всё-таки нас в команде разработки было 2 человека (не на full-time при этом) и один тестер (тоже на подработке).

По этой причине направление LLVM было свёрнуто из-за нехватки ресурсов (как и другие направления, например поддержка языков Pascal и Python в модульной платформе IDE Кумир).

А сейчас, судя по знакомым до боли скриншотам, Вы пользуетесь той самой версией с обычным стековым выполнителем байткода.

Не ожидал увидеть Вас тут)

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

Современное железо тоже, увы, прогибается, но терпимо, работать можно.

LLVM.А вот тут совсем всё грустно, и его в современном КуМире быть просто не может.

А жаль. Я первый раз когда увидел в исходниках директорию llvm, я, честно сказать, очень сильно удивился.

поддержка языков Pascal и Python в модульной платформе IDE Кумир

Я же правильно понимаю, что это просто поддержка запуска других языков из этой же IDE? Или там какое-то есть еще хитрое взаимодействие с КуМировской экосистемой?

Вы пользуетесь той самой версией с обычным стековым выполнителем байткода.

Хотел еще запустить из-под линукса (может даже в докере), но prebuilt binaries с сайта НИИСИ РАН почему-то отваливаются с bad_alloc.

Я же правильно понимаю, что это просто поддержка запуска других языков из этой же IDE? Или там какое-то есть еще хитрое взаимодействие с КуМировской экосистемой?

Не только. Программа-максимум заключалась не только универсальной учебной IDE, но и в том, чтобы сделать доступными графические исполнители (Робот, Чертежник и др.) доступными из Pascal и Python. Плюс (для Python'а) - поддержка запуска скрытых тестов, которые можно создавать в учительском режиме.

Архитектурно Кумир 2.х - это набор модулей, реализующих определенные интерфейсы. И заменив два модуля (синтаксический анализатор и выполнитель) можно было получить IDE для другого языка программирования.

Для Pascal в качестве синтаксического анализатора использовался обычный fpc, запускаемый как дочерний процесс, а для того, чтобы вытаскивать таблицу символов (для подсветски синтаксиса и автодополнения), ему скармливался фейковый "ассемблер". До реализации исполнения дело не дошло, но предполагалось использовать обычный gdb.

А вот с Python интереснее, - интерпретатор был прикручен через PyObject API, интеграция выполнения был более тесной. Это позволяло вытворять разные фокусы, например, скрытно менять значения переменных во время тестирования ученических программ.

в прошлом году сын занимался факультативно на информатике - учили его программировать на Кумире как раз. Я тоже поглядывал, помогал и чуть справку почитывал. Достаточно удобно. Даже собрал IDE под Линукс, работало без проблем.

Когда увидел код на кумире с русским синтаксисом сердце кровью обливается

Может кому-то и удобно писать операторы по русски, но мне точно нет. А вот смешивать русские операторы и латинские переменные - не очень.

Да, мешать очень неудобно. Но как вот вы, например, переведёте hex, чтобы было так же коротко и ёмко?

Английский язык в целом более ёмкий, чем русский - русские слова в среднем длиннее английских более чем на 20%. Это хорошо знают переводчики дубляжа и интерфейсов.

Операторы и переменные это дело вкуса, а вот переключение между раскладками при банальном вводе знаков < > | это боль

Сложно понять переменная "a" или переменная "а". Это может приводить к ошибкам.

Особенно если учесть, что "не равно" здесь — это не привычное !=, универсальное для любой раскладки, а <>

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

хотя меня не покидает ощущение, что меня просто развели на 6 часов разработки на КуМире

Интересно, сколько времени заняло создание статьи.

Справедливый вопрос, я посчитал по временным меткам. Если вам так интересно, то это заняло 5 часов 46 минут.

А вот кстати интересно было бы написать КуМир на Рефал-М, благо последний поддерживает и кириллицу, и весь юникод.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации