Почему нет русских языков программирования
Перейти к содержимому

Почему нет русских языков программирования

  • автор:

О русском языке в программировании

Начну с мелочи. Удобно ли сейчас организована типичная смена раскладки клавиатуры? В смысле переключения на русский/латинский? На мой взгляд, в смартфонах и то удобнее. Не надо нажимать одновременно все эти «Shift» и «Alt». На моем первом домашнем компьютере «Электроника-901» (он же ai-PC16) было даже две специальных «пустых» клавиши примерно там, где сейчас клавиши-«окна». Одна переключала на русскую раскладку постоянно, а другая — временно (на время нажатия). Это гораздо удобнее. Впрочем, самый удобный вариант переключения в свое время я сделал сам из массивной педали от швейной машинки «Тула», просто соединив ее двумя проводами с контактами DTR и DSR разъема RS-232. В этом случае если программно установить бит DTR в «1», то наличие сигнала DSR означает, что педаль нажата, иначе – отпущена. Переключать раскладку без рук оказалось очень эргономично. Увы, по мере распространения новых интерфейсов, RS-232 постепенно сошел на нет и сейчас в ноутбуке педаль просто некуда подключить.

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

Справедливости ради: на некоторых клавиатурах есть отдельная клавиша переключения (на ней обычно нарисован глобус). Сложность в том, что на многих других компьютерах ее нет. В древнем текстовом редакторе «SideKick» я даже когда-то использовал обе клавиши «Shift», поскольку они есть всегда: правая переключала постоянно (и поэтому как «Shift» вообще не работала), а левая – временно, первые две секунды как «Shift», а уже затем как переключатель. Смысл в том, что тогда можно печатать, например, по-русски, затем, удерживая мизинцем клавишу, одно слово по-английски, затем отпустить и опять продолжать по-русски.

Но, повторю, громоздкое переключение — это мелочь, не проблема, а, скорее, следствие отношения к использованию русского языка как к чему-то второстепенному и не стоящему внимания. Хотя и эта мелочь нет-нет, да и напомнит о себе, хотя бы в виде модной, но глупой аббревиатуры КЫВТ (вместо RSDN) на форумах сайта RSDN.RU.

Настоящей проблемой, на мой взгляд, является появление на тех же компьютерных форумах обсуждений на тему: «мешает ли русский язык программированию». С точки зрения той части российских программистов, которые работают в западных фирмах или поставили себе такую цель (с возможным и желательным отъездом за границу) русский язык в программировании – это действительно зло, дополнительный барьер, мешающий быстрее адаптироваться в англоязычной среде. Но мне кажется, им мешает не русский язык в программировании, а русский язык вообще.

Естественность использования родного языка

Язык неразрывно связан с мышлением. Например, когда я пишу текст программы, я невольно мысленно произношу требуемое действие. Конечно, оно не звучит внутри голосом Левитана и даже не всегда это именно звуки, но что-то типа: «если и а и б нулевые, то уходим» в мыслях проносится. На типичном современном языке программирования эту мысль в виде программного текста я должен выразить как-нибудь так:

if (a==0 && b==0) return;

Т.е. мысленно про себя произношу «если», «уходим», а писать все-таки должен «if», «return». Незаметно приходится все время переводить, пусть и в самой простейшей форме. Поэтому для меня более естественна запись того же оператора в виде:

если a=0 и b=0 тогда возврат;

Я именно так и пишу. И это вовсе не псевдокод, а реальный оператор языка [1], где ключевые слова имеют русские эквиваленты, не требуется различать присваивание и сравнение (а, значит, не нужно удвоение символов), и логические операции можно писать просто как И, ИЛИ, НЕ. Оператор больше стал похож на мысленную фразу и перевод с «мысленного русского» на «программный английский» уже не требуется.

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

Например, когда моя жена училась в Московском математическом техникуме, основы программирования им преподавали с помощью специального языка (нечто вроде псевдокода), который так и назывался: Русский Алгоритмический Язык, сокращенно РАЯ. (Смешно. Выходит, в нашей семье жена знакома с языком РАЯ, а муж с языком Ада). На мой взгляд, это был мудрый прием. Родной язык, конечно, не панацея и не обеспечивал выпуск суперпрограммистов, но то, что он способствовал более глубокому пониманию основ на самом важном начальном этапе – несомненно.

Разумные границы использования

Попытки превратить язык программирования в национальный или, наоборот, избавиться от национальных особенностей в тексте программы были предприняты еще более полувека назад. Я имею в виду языки Кобол и АПЛ.

Язык Кобол предполагал, что программу можно будет писать просто по-английски. Поэтому он имел большое число зарезервированных и даже «шумовых» (необязательных) слов. Но ничего хорошего из этого не вышло. Текст программ все равно получался не на английском, а на ломаном английском, а их анализ усложнялся. Точно так же не получится писать программы и на любом другом «настоящем», например, русском языке, поскольку обычный язык никогда не будет тождественен программному. Однако наличие некоторого множества слов и их частых сочетаний на родном языке все же улучшает и на интуитивном уровне облегчает понимание текста программы, ведь, в конце концов, человек не сканер транслятора и не анализирует текст посимвольно.

Другую крайность представлял язык АПЛ, имевший большое число специальных знаков для всяких операций. Запись программы на АПЛ внешне напоминала записи, которыми пользуются математики. АПЛ остался в истории знаменитым тем, что программу, записанную на одной строке, т.е. не более 80 знаков, можно было анализировать часами, т.е. долго разгадывать, что же, собственно говоря, она делает. Получалось, что кроме авторов в таких программах вообще никто не мог разобраться, и идея сверхкомпактной записи большим числом специальных знаков была заброшена.

На мой взгляд, программные тексты должны иметь золотую середину между этими крайностями. Они, конечно, не должны быть слишком многословными и этим напоминающими старинные поваренные книги, но и шарады из цепочек значков и скобок (можно вспомнить Лисп, где встречалось до двадцати скобок подряд) это тоже не идеал. А если в тексте программы все же используются не одни значки, но и слова, то лучше, чтобы они были на родном языке.

Опыт использования родного языка

Если обратиться к собственному опыту использования родного языка, то считаю, что мне в какой-то мере даже повезло: период обучения и освоения пришелся на время, когда русский язык использовался не то, чтобы широко, но вполне естественно, поскольку применялись программные и аппаратные средства отечественной разработки. Как программист я начинал с БЭСМ-6, операционной системы ОС-Диспак, транслятора БЭСМ-АЛГОЛ и диалоговой программы «Пульт» (при этом работа за терминалом VT-340 очень напоминала работу за первыми персональными компьютерами). В те времена даже в кодовой таблице сначала шел русский алфавит, а затем латинские буквы, отличающиеся по написанию от кириллицы. Вся документация была, естественно, на русском, например, в описании команд БЭСМ-6 все аббревиатуры команд были кириллицей, не было никаких «MOV» или «JMP».

В отличие от ЕС-ЭВМ, в направлении БЭСМ (и «Эльбрус») все оставалось «по-русски». Правда, до тех пор, пока не появилась разработка дубнинского ядерного центра – мониторная система «Дубна», в составе которой был ассемблер (тогда такие языки назывались автокодами) со странным именем «Мадлен». Так как транслятор сначала переводил на него, некоторые сообщения об ошибках выдавались на уровне ассемблера. И все они были по-английски! Получалось, что одни советские программисты писали сообщения для других советских программистов не на родном языке. Разумеется, «Дубна» изначально была предназначена для совместной работы где-нибудь в ЦЕРН, поэтому там и было все в «международном» варианте. Но нам она была поставлена как отечественная система и при этом бесцеремонно «отодвинула» от родного языка. Например, аббревиатуры команд в «Мадлен» стали не такими как в исходной документации на БЭСМ-6, что вызывало непонимание и раздражение.

Еще через несколько лет (для меня в 1987 году) в части родного языка все перевернулось с появлением американских персональных компьютеров. Объективно и естественно в первое время никакого русского языка там не было в принципе. Но поскольку это требовалось для набора текстов, приспосабливать их под родной язык все-таки пришлось. Т.е. пришлось перепрошивать ПЗУ видеокарт, наклеивать переводные картинки кириллицы на боковые стенки клавиш, учиться писать драйверы клавиатуры, попутно привыкая к аббревиатурам системы команд x86. Очень скоро «русификацией» компьютеров и принтеров уже занимались во многих организациях, имеющих ПК, и дело было поставлено буквально на поток. Но при этом «русификацией» получаемых вместе с компьютерами трансляторов обычно никто не занимался, в лучшем случае лишь переводились руководства.

Возможно, я стал одним из первых, кто озаботился этим и то лишь потому, что полученный вместе с IBM-PC/XT транслятор с языка PL/1 не позволял писать по-русски даже комментарии: все символы с кодом больше 7FН воспринимались им как управляющие. Из-за этого на первых порах комментарии выглядели как теперешние SMS «по-русски» с телефонов, не имеющих кириллицы. Но разрабатывать программы, не используя родной язык, было для меня совершенно недопустимым. Первое исправление транслятора, которое разрешило кириллицу, оказалось очень легким и привело к мысли дизассемблировать весь транслятор, чтобы стать полноправным владельцем и постепенно сделать его целиком «русским». Учитывая, что в PL/1 ключевые слова не зарезервированы, можно иметь одновременно два варианта слов: английский и русский. Поэтому уже написанные программы можно было оставить «английскими», зато новые программы можно было писать уже «по-русски».

Впоследствии в транслятор было внесено множество доработок, приведенных в [1]. По части «русификации» были добавлены русские ключевые слова, включая И-ИЛИ-НЕ вместо знаков «&», «!» и «~». Такой перевод логических операций на «русский» сразу сделал тексты программ гораздо легче воспринимаемыми. Диагностические сообщения также были переведены и расширены. Много ли существует современных программных средств, которые выдают сообщения об ошибках на русском языке? А ведь это первое, с чем сталкиваются новички. Им и так-то бывает нелегко разобраться, что именно вызвало ошибку, а тут еще и сообщения не на родном языке. Поэтому часто даже вполне внятные сообщения начинают восприниматься ими одинаково: «транслятор ругается», а поиск ошибок в тексте производится бессистемным образом, вне связи с полученным сообщением.

В результате всех преобразований в части родного языка я практически вернулся в тот программный мир, в котором работал до эпохи ПК, тексты программ стали выглядеть даже лучше. Например, при записи программы (кроме имен импортируемых подпрограмм, всех этих GetEnhMetaFilePaletteEntries, выглядящих в русском тексте «китайской грамотой») я практически вообще могу не переключаться на латинский алфавит. Само собой, идентификаторам всегда стараюсь дать значимые имена по-русски.

Но большинство программистов моего поколения перешли на языки с Си-образным синтаксисом и практически перестали использовать в текстах программ кириллицу.

Заключение

На первый взгляд кажется, что сейчас никаких проблем с русским языком нет. Действительно, давно «локализованы» на национальные языки операционные системы, офисные программы и игры, а кириллица наносится на клавиши заводским способом. Но если обратиться к программированию, то здесь русский язык почти полностью вытеснен. Конечно, есть и исключения, например, «Бухгалтерия 1С». При этом я ни в коем случае не призываю создавать специально «русские» языки программирования (остряки сразу же добавят: «православные»). Напомню, что даже в самом первом международном документе по языку программирования [2] предполагалось три уровня его представления: эталонный, язык публикаций и конкретные представления. Т.е. с самого начала предполагалось, что «знаки языка могут быть различными в разных странах, однако должно быть сохранено однозначное соответствие с эталонным представлением».

Сам я использую язык PL/1, созданный на Западе (большей частью в Великобритании), наличие готового транслятора с которого было в свое время даже одним из аргументов принятия в СССР решения копировать IBM 360 в виде ЕС ЭВМ. Но, возможно, обоснованное на тот момент решение в своей программной части в дальнейшем не было подкреплено развитием первоначально скопированного «эталона». Конечно, сейчас с позиции послезнания легко советовать, что надо было делать тогда. Впрочем, и тогда многим это было понятно: «урок освоения ОС ЕС ясен: можно, и иногда нужно осваивать отдельные образцы зарубежного программного обеспечения, но нельзя становиться на путь постоянного следования за ними» [3].

Мой опыт энтузиаста-дилетанта (без профильного образования), показывает, что разобраться в существующем компиляторе не так уж и трудоемко. Коллектив из 4-5 человек где-нибудь в Академгородке сделал бы это быстро и качественно, например, с компилятором IBM для PL/1. Т.е. дизассемблировал бы его и научился транслировать и собирать точную копию исходного. И это надо было делать, конечно, не для «русификации», а для того, чтобы стать хозяином транслятора и с этой стартовой площадки продолжить его развитие дальше, уже независимо ни от кого, снабжая армию пользователей ЕС ЭВМ качественным и, главное, совершенствующимся продуктом. А перевод на русский язык компилятора и других утилит был бы всего лишь бонусом, облегчающим сопровождение и использование. Но транслятор с языка PL/1 на ЕС ЭВМ так и не был «освоен». Я делаю такой вывод потому, что он так и не был «русифицирован», хотя попытки развить язык и были [5].

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

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

Однако, на мой взгляд, языки программирования имеют гораздо больше общих черт с обычными языками, чем абстрактное математическое или химическое представление. Если человек думает «по-русски», в большинстве случаев он никогда не начнет думать «по-английски». Запрещая использовать элементы родного языка при изучении основ программирования, мы изначально ставим наших школьников и студентов в отстающее положение по сравнению с их англоязычными сверстниками.

Зато появились уже поколения программистов, которые считают, что так и должно быть. Попадалась даже парадоксальная точка зрения, что не использование родного языка – это как раз наше преимущество над англоязычными программистами, потому, что собственно конструкции операторов программы не похожи, например, на текст комментариев, а, дескать, у них все это смешивается. По такой логике надо предложить англоязычным использовать в программах русские ключевые слова, чтобы, так сказать, «догнать» нас. А лучше сразу перейти на китайские иероглифы, чтобы все (кроме, разумеется, несчастных китайцев) имели это преимущество непохожести исходного кода на родной язык .

Использование русского языка отражает и общее состояние дел в развитии программирования. Пока в СССР шли собственные разработки — использовался, естественно, и русский язык, например, в таком выдающемся проекте, как «Эль-76», где были задействованы большие силы всей страны: в разработке ПО для «Эльбруса» участвовал ряд университетов, включая Таллин и Кишинев. Прекратились разработки – вот русский язык и исчез, а попытки возрождения, например, проект «Национальной Программной Платформы», терпят неудачу.

Русский язык – это то, что всех нас (и программистов и не программистов) объединяет. Использование родного языка в программировании является и признаком независимого развития этой отрасли и одновременно объективной базой такого развития.

Напоследок приведу исторический анекдот: когда Петр Первый организовывал выпуск нового российского рубля (монеты), ему советовали все надписи сделать на латыни, иначе, мол, такие деньги не будут принимать за границей. «Спасибо тому скажу, кто придумает, как оставить деньги в Отечестве, а не тому, кто выведет их иноземцам» ответил Петр.

1. Д.Ю. Караваев «К вопросу о совершенствовании языка программирования» RSDN Magazine #4 2011

2. А.П. Ершов, С.С. Лавров, М.Р. Шура-Бура «Алгоритмический язык АЛГОЛ-60. Пересмотренное сообщение». Москва «Мир» 1965

3. Г.С. Цейтин Доклад «Итоги освоения ОС ЕС (заметки пользователя)» 29.08.1983

4. В.М. Табаков «Специализированная система гиперпрограммирования для языка ПЛ/1» : диссертация кандидата физико-математических наук : 05.13.11. Калинин, 1984.

Компьютерная грамотность с Надеждой

Заполняем пробелы — расширяем горизонты!

Русский язык программирования, а почему бы и нет?

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

p, blockquote 1,0,0,0,0 —>

русский язык программирования

p, blockquote 2,0,0,0,0 —>

Команды в программировании на русском языке

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

p, blockquote 3,0,0,0,0 —>

Как будто никогда не было в русском языке программирования таких команд, как «ЕСЛИ», «ТО», «ИНАЧЕ» вместо «IF», «THEN», «ELSE». Или, например, вместо «GO TO» как будто не было команды «ИДТИ НА», без третьего слова, привычной для российского уха идиомы…

p, blockquote 4,0,0,0,0 —>

Что интересно, русские вычислительные машины понимали не только команду «ИДТИ», но и «ИТТИ», а также «ИЙТИ». Это не связано с неграмотностью разработчиков, которые создавали подобные языки программирования. Это было обусловлено тем, что трансляторы и интерпретаторы русских языков программирования срабатывали на первую букву команды, и уже было неважно, какие символы использовались далее.

p, blockquote 5,0,0,0,0 —>

Русский язык программирования Аналитик

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

p, blockquote 6,0,1,0,0 —>

Например, существовал язык программирования АНАЛИТИК. Он работал на вычислительных машинах МИР не только с численными, но и с аналитическими выражениями. Как видим, название «МИР» использовалось не только для наименования космической станции.

p, blockquote 7,0,0,0,0 —>

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

p, blockquote 8,0,0,0,0 —>

Разработчики АНАЛИТИКа сделали иначе. И это больше никто не смог повторить, а именно. Они установили, что в отсутствии значения переменной ее значением становится имя переменной!

p, blockquote 9,0,0,0,0 —>

Например, пусть переменная B равна 2, а значение переменной A не определено. Тогда во всех языках программирования выражение C=A+B автоматически приводит к ошибке в выполнении программы. Но только не в АНАЛИТИКе.

p, blockquote 10,0,0,0,0 —>

В этом «русском» языке программирования такое выражение присваивало переменной C значение (A+2). При этом никакой ошибки не возникало. Программа продолжала работать с подобными аналитическими выражениями.

p, blockquote 11,0,0,0,0 —>

Например, выражение D=C+C присваивало переменной D значение (2*A+4), так как:

p, blockquote 12,0,0,0,0 —>

p, blockquote 13,1,0,0,0 —>

Что интересно, с подобными выражениями можно было осуществлять и более сложные операции. Например, алгебраические выражения можно было приводить к одной из 3-х форм:

  • с раскрытием скобок,
  • без раскрытия скобок,
  • с приведением подобных членов.

Русские команды Интегрировать и Дифференцировать

Также присутствовали команды языка программирования, которые могли вычислять первообразную функции (команда «ИНТЕГРИРОВАТЬ»), и определять производную функции (команда «ДИФФЕРЕНЦИРОВАТЬ»).

p, blockquote 15,0,0,0,0 —>

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

p, blockquote 16,0,0,0,0 —>

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

p, blockquote 17,0,0,0,0 —>

О перспективах

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

p, blockquote 18,0,0,0,0 —>

Конечно, наша беда – дураки и дороги, которые в вопросах кибернетики (и не только) происходят от того, что мы не научились делать массовые серийные продукты, легко продаваемые.

p, blockquote 19,0,0,0,0 —>

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

p, blockquote 20,0,0,1,0 —>

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

p, blockquote 21,0,0,0,0 —>

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

p, blockquote 22,0,0,0,0 —>

Другие интересные материалы:

p, blockquote 23,0,0,0,0 —>

p, blockquote 24,0,0,0,0 —>

p, blockquote 25,0,0,0,0 —>

p, blockquote 26,0,0,0,0 —> p, blockquote 27,0,0,0,1 —>

Русский язык в программировании

Судя по результатам голосований (на 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 часто называется «применить-ко-всем»«.

Также слово «применяет»/«применение» используется в различных описаниях функции `map()` в Python

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 — выделить подмножество языка, достаточное для решения задач по спортивному программированию.

Вот примеры решения задач на русском 11l
Задача ‘Mocha и прогулка’ (на основе этого решения):

цикл 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 поставляется со скриптом, который переводит код на русском в код на английском (в том числе переводит имена общеупотребимых переменных).

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

ввод n; S:=0 

А также в русских текстах задач по программированию используются английские/латинские буквы:

codeforces.com/contest/1559/problem/C?locale=ru:
В первой строке находится одно целое число t .
Первая строка набора входных данных содержит одно целое число n

И аналогично в книгах:

habr.com/ru/post/667022:
Напечатайте все возрастающие последовательности длины k, элементами которых являются натуральные числа от 1 до n.

На этом у меня всё. Спасибо за внимание.

Можно ли написать программу на русском языке?

Рубрика странных вопросов. Отвечаем серьёзно: да, можно, но в этом нет большого смысла.

Всё дело в интерпретаторе

На самом деле компьютеру неважно, на каком языке написан код. Главное — чтобы существовал интерпретатор, который может перевести программный код, написанный человеком, в команды, понятные компьютеру.

В теории, можно взять любой язык программирования, перевести все его команды на русский язык и потом написать интерпретатор для этого языка. Работать вся конструкция будет так:

  1. Берём код на русском языке.
  2. Переводим каждую команду обратно в исходный вид в оригинальном языке.
  3. Так делаем с каждой командой.
  4. Получившийся код запускаем с помощью оригинального компилятора или интерпретатора.

Видно, что с таким подходом больше мороки, чем пользы:

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

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

Другой вариант — использовать директивы вроде #define в языке C и C++. Смысл #define в том, что перед компиляцией все слова, которые мы таким образом определили, заменяются на изначальные. И тогда можно написать что-то такое:

#define НЕТ false

#define АНЕТО else

#define ВЫВОД printf

#define ОТДАЛ return

И получится что-то такое (не вдаваясь в подробности):

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

А ещё есть два известных языка программирования, где весь синтаксис изначально реализован на русском: КуМир и язык программирования 1С.

КуМир

КуМир — это сокращение от Комплект Учебных МИРов. Его разработал советский математик Анатолий Кушниренко, но придумал его академик Андрей Ершов.

КуМир — это специальный язык для обучения школьников и студентов, которые до этого не изучали программирование. В КуМире есть исполнители — Робот, Чертёжник, Кукарача и другие. У каждого из этих исполнителей есть свой язык команд, которыми можно ими управлять. Например, Робот может двигать ячейки по полю, а Чертёжник — что-то рисовать на холсте.

Главный плюс КуМира — простота для детей, чтобы им было легче разобраться с основными понятиями. Например, ЭТО Бегемот задаёт переменную «Бегемот», ПОВТОРИ — это цикл, а « ЭТО…КОНЕЦ » позволяет организовать функцию.

Можно ли написать программу на русском языке?

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

Можно ли написать программу на русском языке?

Язык программирования 1С

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

С простыми программами всё понятно:

Процедура ПриветМир() Сообщить("Привет, мир! Это журнал Код!"); КонецПроцедуры

Но если нам нужно что-то более сложное, начинается программистский ад: команды — это существительные, прилагательные и глаголы на русском языке, которые пишутся слитно и с больших букв в середине. При этом язык 1С — полноценный язык программирования высокого уровня, с ООП, классами и динамической типизацией. Например, вот фрагмент программы, которая формирует отчёт для бухгалтера:

&НаСервере Процедура СформироватьНаСервере() ТабДок = Новый ТабличныйДокумент; ДатаС = ПериодОтчета.ДатаНачала; ДатаПо = ПериодОтчета.ДатаОкончания; Выборка = Документы.СчетФактураВыданный.Выбрать(ДатаС, ДатаПо, , "Дата"); ЭтотОтчет = РеквизитФормыВЗначение("Отчет"); Макет = ЭтотОтчет.ПолучитьМакет("Реестр"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ТабДок.Вывести(ОбластьШапка); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Организация) И Выборка.Организация <> Организация Тогда Продолжить; КонецЕсли; ОбластьСтрока.Параметры.Дата = Выборка.Дата; ОбластьСтрока.Параметры.Номер = Выборка.Номер; ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент; ОбластьСтрока.Параметры.Сумма = Выборка.Сумма; ТабДок.Вывести(ОбластьСтрока); КонецЦикла; ПолеОтчета = ТабДок; КонецПроцедуры

А можно просто рассказать компьютеру по-русски, что нужно сделать?

Можно, но компьютер ничего не сделает.

Более того — даже если вы напишете это на английском языке, то всё равно ничего не получится. Сейчас есть нейросети, которые умеют разбирать естественный текст и предлагать какой-то фрагмент кода, но задачи сложнее «Попроси у пользователя два числа и выведи их сумму» нейронка сделать пока не может.

А раз так — в ближайшие десятилетия у программистов будет много работы: и код писать, и обучать нейронки делать это самостоятельно. Хотите так же — приходите в Практикум, найдите направление по душе.

Добавить комментарий

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