Русский Язык Программирования
Начал разработку русского языка программирования.
Сокращенно: РЯП.
Ну и, как следствие, начал разработку интерпретатора РЯП.
РЯП напоминает язык КуМир, но будут существенные отличия и преимущества в сравнении с другими языками.
Переменные не надо объявлять, так как при первом обнаружении переменной в листинге программы интерпретатор автоматически создаст с таким именем переменную типа Double (вещественное число).
Интерпретатор пишу в 32-битной версии среды разработки «Lazarus» (язык программирования Паскаль).
В ряпе конечно же есть зарезервированные слова: начало, конец, если, цикл.
Но зарезервированные слова можно использовать в качестве имен переменных!
По ссылке можете скачать архив, в нем содержатся бинарник (версия 0.2), простые программы:
архив
Си и Паскаль уйдут, Питон утонет, Яву скурят!
Свободно скачивайте и распространяйте, пишите программки, пишите мне о глюках.
Только, пожалуйста, не делите на ноль! 🙂
ДОПОЛНЕНИЕ 1 (от 28 февраля 18:30 МСК):
1) Кто-то посмеялся над названием языка, предложил свои варианты.
Прям, как малые дети 🙂
2) Кто-то вообще не захотел скачивать архив, наверное, даже по ссылке не перешел.
Для кого тогда придумывали URL и вообще всю философию HTTP?
3) Кто-то никак не хочет отлипнуть от английского языка.
Наверное, и шпрехает только на английском, используя слова типа стартап, коммит, заклозь, лайфхак, гамбургер, свитшот.
ДОПОЛНЕНИЕ 2 (от 28 февраля 19:15 МСК):
В скобках привожу латинские аналоги.
Реализованы конструкции языка: начало (begin; начало цикла), цикл (cycle; конец тела цикла), если (if), = (присвоение).
Бинарные операторы: * (умножение), + (сложение), — (вычитание), / (деление), ^ (возведение в степень),
% (процент), mod (остаток от деления на число), and (битовое И), xor (битовое исключающее ИЛИ),
or (битовое ИЛИ), >> (битовый сдвиг вправо).
Унарные команды: ЛИнверт (LInvert; логическое инвертирование переменной), округлить (round; округление вещественного числа до целого числа), показать (show; отобразить имя и значение переменной)
Вот код для вычисления простых чисел:
число = 3 конец = 60 начало цикл = число / 5 округлить цикл простое = 1 начало цикл2 = цикл + 1 остаток0 = число mod цикл2 остаток = остаток0 ЛИнверт остаток если остаток простое = 0 цикл = цикл - 1 если остаток цикл = 0 цикл цикл если простое показать число число = число + 2 конец = конец - 1 цикл конец
число = 3 число = 5 число = 7 число = 11 число = 13 число = 17 число = 19 число = 23 число = 29 число = 31 число = 37 число = 41 число = 43 число = 47 число = 53 число = 59 число = 61 число = 67 число = 71 число = 73 число = 79 число = 83 число = 89 число = 97 число = 101 число = 103 число = 107 число = 109 число = 113
P.S. На перспективу:
— Механизм массивов.
— Вместо присвоения одной переменной можно написать формулу,
в левой части которой может стоять не только переменная, но и операция с другой переменной.
— Анализ кода.
Выдача подробных подсказок программисту.
— Автоматическое переформатирование кода в нужный стиль.
— Имя переменной можно сокращать.
Интерпретатор сам определит, какую переменную из объявленных имели в виду.
— Иногда допускается, что между конструкцией языка (цикл, если) и переменной нет пробела.
— Любой код можно записать в одну строку.
— Объединение нескольких файлов кода в одном файле.
— Любое количество букв в названии конструкции языка.
Русский язык в программировании
Судя по результатам голосований (на compiler.su и даже здесь на Хабре) идею программирования на русском поддерживает не так уж и мало людей.
В данной статье приводится мой краткий обзор некоторых языков программирования и решений, которые позволяют программировать на русском.
Язык 1С: Предприятия
Несмотря на то, что это самый популярный язык программирования с русскоязычным синтаксисом, я его рассматривать не буду, дабы не разводить холивар. По аналогичной причине я не буду рассматривать OneScript и Перфолента.Net (последний хотя и является самостоятельным языком программирования, но его синтаксис основан на встроенном языке 1С: Предприятия).
1C: Исполнитель
Какая-то странная смесь C# [ с его Console.Write() ] , Java [ var obj = new Object() ] и наверное Julia [ с ; вместо end ] .
Также, судя по всему, разработчики 1С: Исполнитель вдохновлялись Scala/Kotlin , выбрав ключевое слово знч для неизменяемых переменных. ИМХО, слово пост подошло бы лучше ( конст уже занято).
Кроме того, неудачно выбраны ключевые слова попытка , поймать , выбросить .
Выбор ключевого слова метод \ method для объявления функций также вызывает вопросы.
Впрочем, есть и хорошие решения, которые вопросов не вызывают. Например, создание массива записью [1, 2, 3] , множества записью и соответствия (то бишь «словаря») записью . Совсем как в Python.
Но в целом язык подходит лишь для весьма ограниченного круга задач и его практическая ценность пока ещё под вопросом.
КуМир
Уже исходя из названия (Комплект Учебных МИРов) понятно, что область применения данного языка ограничена обучением. А это, как я считаю, тупиковый путь. Мало кто захочет серьёзно изучать язык, который кроме обучения программированию, ни для чего не пригоден/не используется.
Однако некоторые идеи и решения, принятые в КуМир-е, можно позаимствовать. Например то, что математические функции в нём оставлены на английском (sqrt, sin, abs, min, max и т.д.). И я считаю это вполне оправданным. На уроках математики мы же пишем sin x и ничего.
Компилятор C++ от Интерстрон
Евгением была проделана огромная работа, однако в этом и состоит главная проблема: переведённых слов слишком много, и специфика их такова, что запомнить русскоязычный эквивалент для них слишком трудно.
Глагол
- «вид», а не «тип»;
- «ряд», а не «массив»;
- «задача», а не «процедура»/«функция»;
- «отдел», а не «модуль»;
- «ячцел», а не «байт»;
- «знак», а не «символ»;
- «кольцо», а не «цикл»/«повтор».
Общепринятые – это те, которые я читаю в книгах, в том числе по программированию. Когда читаю «байт», мне всё понятно. Это общепринятое. Когда я прочитаю «запись размером 40 слогов» — я буду долго размышлять. А вот «файл размером 40 байтов» — мне сразу понятно, да и Вам тоже. Да, там заимствованные слова, но не я их заимствовал и не я их глубоко внедрил в наш язык. Чтобы быть понятым, я вынужден их использовать.
RuSL
- Для объявления переменных используется нетрадиционное ключевое слово изм .
- Нет поддержки целых чисел (все числа вещественные).
- Операторы присваивания += , -= и т.д. записываются в обратном порядке (т.е. =+ , =- и т.д.). Особенно забавно получается с записью n=-n , которая работает не как n = -n , а как n-=n , т.е. n = n — n :)(:
- Для стандартных функций input() и print() был выбран перевод ввести() и вывести() вместо более привычного ввод() и вывод() .
11l
Семантика 11l берёт за основу язык Python (самый популярный язык программирования на данный момент [ согласно рейтингам TIOBE, PYPL, IEEE Spectrum ] ), а синтаксис разработан/спроектирован с учётом когнитивно-эргономического подхода таким образом, что забыть его [ синтаксис 11l ] практически невозможно (особенно если это первый изучаемый язык программирования).
Для перевода названия метода map в 11l было выбрано слово применить , т.к. как сказано в Википедии «в функциональной форме map часто называется «применить-ко-всем»«.
pyneng.readthedocs.io/ru/latest/book/10_useful_functions/map.html:
Функция map применяет функцию к каждому элементу последовательности и возвращает итератор с результатами.
Использование функции map в Python:
Встроенная в Python функция map() используется для применения функции к каждому элементу итерируемого объекта
pythonist.ru/python-map-znakomstvo:
map() перебирает элементы итерируемого массива (или коллекции) и возвращает новый массив (или итерируемый объект), который является результатом применения функции преобразования к каждому элементу
Для бросания исключения в 11l используется слово исключение по аналогии с переводом ключевого слова throw Евгением Зуевым. Ключевые подслова исключение.контроль и исключение.перехват также взяты из перевода Зуева.
Для числовых типов используются вполне общепринятые (принятые в том числе в языке РАЯ) названия Цел и Вещ .
Вместо того чтобы выполнять перевод всех и каждой функции стандартной библиотеки языка, в 11l осуществлён перевод лишь тех возможностей языка, которые требуются для решения задач по спортивному программированию. Можно сказать, что сама суть русскоязычных имён в 11l — выделить подмножество языка, достаточное для решения задач по спортивному программированию.
цикл 1..Цел(ввод()) пер n = Цел(ввод()) пер a = ввод().разделить(‘ ’).применить(Цел) пер ответ = (0 . < n).применить(н ->н + 1) // можно сократить до `пер ответ = Массив(1..n)` если a.послед == 0 вывод_эл(ответ [+] (n + 1)) иначе цикл(н) 0 .< a.длина если a[н] == 1 вывод_эл(ответ[0.
цикл 1..Цел(ввод()) пер s = ввод() пер t = ввод() s = сортй(Массив(s)).соединить(‘’) если t == ‘abc’ & (‘a’ св s) & (‘b’ св s) & (‘c’ св s) s = s[0 .< s.найти_и(‘b’)]‘’(‘c’ * s.колво(‘c’))‘’(‘b’ * s.колво(‘b’))‘’s[s.об_найти_и(‘c’) + 1 ..] вывод(s)
цикл 1..Цел(ввод()) пер s = ввод() пер m = Цел(ввод()) пер b = ввод().разделить(‘ ’).применить(Цел) пер массив = сортй(Массив(Множество(Массив(s)))) пер ответ = [Символ("\0")] * m // как в Python (1-ый вариант решения) //пер ответ = "\0" * m // только в 11l (2-ой вариант решения) цикл сумма(b) != -m Множество[Цел] индексы цикл(i) 0 .< m если b[i] == 0 индексы.доб(i) b[i] = -1 цикл пер q = массив.извлечь() если индексы.длина
Кроме того, 11l поставляется со скриптом, который переводит код на русском в код на английском (в том числе переводит имена общеупотребимых переменных).
Несмотря на поддержку русских ключевых слов, названий функций и типов, я считаю, что имена коротких переменных в большинстве случаев целесообразно писать на английском.
Так принято и в учебном алгоритмическом языке:
codeforces.com/contest/1559/problem/C?locale=ru:
В первой строке находится одно целое число t .
Первая строка набора входных данных содержит одно целое число n
habr.com/ru/post/667022:
Напечатайте все возрастающие последовательности длины k, элементами которых являются натуральные числа от 1 до n.
Почему нет русского (кириличекого) языка программирования в 2020 году, который можно применять для повседневных задач?
И вообще, реально ли создать полностью русскоязычную среду для существующих электронных систем, для широкого круга пользователей?
Я написал гигантский пост на тему русского языка в программировании. Моя позиция там полностью в деталях представлена. Однако, ответим в точности на поставленный вопрос.
"Почему" такого нет? Потому что все привыкли писать на английском, не только русскоговорящие программисты, все программисты, на всей планете. И нужды менять это положение вещей нет. Я не буду вдаваться в причины появления такого status quo, это в данном вопросе неважно.
Я в своём посте показал на конкретных примерах, что к 2022 году в существующих языках программирования мы уже давно можем писать идентификаторы на любых языках, включая и русский. Кроме идентификаторов у нас остаются ключевые слова самого языка (if, while, foreach, async и т. д.), но с одной стороны, вполне можно пропатчить компиляторы существующих языков, добавив поддержку этих ключевых слов на любом языке, а с другой стороны, если вы не способны зазубрить смысл 20 ключевых слов на английском языке, вы, скорее всего, зря пытаетесь идти в разработку ПО.
Да, конечно, современный мейнстримный язык программирования это не только его синтаксис. Это ещё и стандартная библиотека, переполненная идентификаторами, и они, скорее всего, на английском языке. Но опять же, все мейнстримные языки программирования либо с открытыми стандартами/спецификациями, либо их компиляторы имеют открытый исходный код. Можно сделать форк стандартной библиотеки и добавить русскоязычные синонимы для всех идентификаторов на английском языке. Это дело ну может быть максимум месяца — рутинной, механической работы. Нам ещё понадобится поменять и всю документацию, если она не автоматически генерируется.
Я упрощу мой ответ до предела. Спросите математиков, почему они используют греческие буквы в формулах, а не русские, и реально ли перейти на нотацию, где не будет ни латинского алфавита, ни греческого, а только кириллица. Вопрос, который вам зададут в ответ, будет не "как", а "зачем".
"Создать полностью русскоязычную среду для существующих электронных систем, для широкого круга пользователей" реально и даже несложно, только для этого понадобится создать фактически клон уже давно существующих систем, отгородиться от всемирного сообщества разработчиков ПО языковым барьером и переучить огромное количество программистов на использование вашей системы.
Это гигантское количество работы, вместо которой можно просто выучить английский язык, который вам пригодится ещё и не только для программирования. На данный момент это просто бессмысленная пустая трата ресурсов и энергии.