Рубрика странных вопросов. Отвечаем серьёзно: да, можно, но в этом нет большого смысла.
Всё дело в интерпретаторе
На самом деле компьютеру неважно, на каком языке написан код. Главное — чтобы существовал интерпретатор, который может перевести программный код, написанный человеком, в команды, понятные компьютеру.
В теории, можно взять любой язык программирования, перевести все его команды на русский язык и потом написать интерпретатор для этого языка. Работать вся конструкция будет так:
- Берём код на русском языке.
- Переводим каждую команду обратно в исходный вид в оригинальном языке.
- Так делаем с каждой командой.
- Получившийся код запускаем с помощью оригинального компилятора или интерпретатора.
Видно, что с таким подходом больше мороки, чем пользы:
- нужно написать отдельный новый интерпретатор;
- научить его проверять ошибки;
- научить его переводить код в оригинальные команды другого языка;
- по возможности, чтобы это не падало и не тормозило;
- написать документацию и обучающие материалы.
В общем, работы много, но непонятно, зачем её делать. Гораздо проще сразу писать на нормальном языке программирования, а не изобретать свой собственный.
Как программировать на русском языке | Алгоритмы
Другой вариант — использовать директивы вроде #define в языке C и C++. Смысл #define в том, что перед компиляцией все слова, которые мы таким образом определили, заменяются на изначальные. И тогда можно написать что-то такое:
#define НЕТ false
#define АНЕТО else
#define ВЫВОД printf
#define ОТДАЛ return
И получится что-то такое (не вдаваясь в подробности):
Ради искусства такое сделать можно, но долго эксплуатировать такой код вам будет неудобно, даже если вы сами его написали. Сначала нужно запомнить все свои дефайны, потом не перепутать их при употреблении. А потом другой разработчик придёт в ваш код и проклянёт вас.
А ещё есть два известных языка программирования, где весь синтаксис изначально реализован на русском: КуМир и язык программирования 1С.
КуМир
КуМир — это сокращение от Комплект Учебных МИРов. Его разработал советский математик Анатолий Кушниренко, но придумал его академик Андрей Ершов.
КуМир — это специальный язык для обучения школьников и студентов, которые до этого не изучали программирование. В КуМире есть исполнители — Робот, Чертёжник, Кукарача и другие. У каждого из этих исполнителей есть свой язык команд, которыми можно ими управлять. Например, Робот может двигать ячейки по полю, а Чертёжник — что-то рисовать на холсте.
Главный плюс КуМира — простота для детей, чтобы им было легче разобраться с основными понятиями. Например, ЭТО Бегемот задаёт переменную «Бегемот», ПОВТОРИ — это цикл, а « ЭТО…КОНЕЦ » позволяет организовать функцию.
Как стать ПРОГРАММИСТОМ с НУЛЯ?
Ещё есть обычные команды языка, не привязанные к исполнителю — они похожи на команды JavaScript, которые мы использовали для простых консольных проектов. Например, можно организовывать циклы, работать с массивами, запрашивать и вводить числа и писать почти полноценный алгоритмический код.
Язык программирования 1С
Программирование под 1С — это отдельный мир, в котором 1С-программисты свысока смотрят на своих коллег, потому что никто кроме них не может разобраться в их коде, хотя он и написан по-русски.
С простыми программами всё понятно:
Процедура ПриветМир() Сообщить(«Привет, мир! Это журнал Код!»); КонецПроцедуры
Но если нам нужно что-то более сложное, начинается программистский ад: команды — это существительные, прилагательные и глаголы на русском языке, которые пишутся слитно и с больших букв в середине. При этом язык 1С — полноценный язык программирования высокого уровня, с ООП, классами и динамической типизацией. Например, вот фрагмент программы, которая формирует отчёт для бухгалтера:
ДатаС = ПериодОтчета.ДатаНачала; ДатаПо = ПериодОтчета.ДатаОкончания; Выборка = Документы.СчетФактураВыданный.Выбрать(ДатаС, ДатаПо, , «Дата»); ЭтотОтчет = РеквизитФормыВЗначение(«Отчет»); Макет = ЭтотОтчет.ПолучитьМакет(«Реестр»); ОбластьШапка = Макет.ПолучитьОбласть(«Шапка»); ТабДок.Вывести(ОбластьШапка); ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»); Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Организация) И Выборка.Организация <> Организация Тогда Продолжить; КонецЕсли; ОбластьСтрока.Параметры.Дата = Выборка.Дата; ОбластьСтрока.Параметры.Номер = Выборка.Номер; ОбластьСтрока.Параметры.Контрагент = Выборка.Контрагент; ОбластьСтрока.Параметры.Сумма = Выборка.Сумма; ТабДок.Вывести(ОбластьСтрока); КонецЦикла; ПолеОтчета = ТабДок; КонецПроцедуры
А можно просто рассказать компьютеру по-русски, что нужно сделать?
Можно, но компьютер ничего не сделает.
Более того — даже если вы напишете это на английском языке, то всё равно ничего не получится. Сейчас есть нейросети, которые умеют разбирать естественный текст и предлагать какой-то фрагмент кода, но задачи сложнее «Попроси у пользователя два числа и выведи их сумму» нейронка сделать пока не может.
А раз так — в ближайшие десятилетия у программистов будет много работы: и код писать, и обучать нейронки делать это самостоятельно. Хотите так же — приходите в Практикум, найдите направление по душе.
Источник: thecode.media
Компьютерная грамотность с Надеждой
Заполняем пробелы — расширяем горизонты!
Русский язык программирования, а почему бы и нет?
На волне сегодняшнего поиска национальной идеи неплохо вспомнить о том, что когда-то мы успешно конкурировали в области IT-технологий с западными странами. Был ли когда-либо русский язык программирования?
Команды в программировании на русском языке
К сожалению, очень многие наши соотечественники, можно сказать, с пеной у рта доказывают, что никогда не существовало языков программирования с командами на русском языке.
Как будто никогда не было в русском языке программирования таких команд, как «ЕСЛИ», «ТО», «ИНАЧЕ» вместо «IF», «THEN», «ELSE». Или, например, вместо «GO TO» как будто не было команды «ИДТИ НА», без третьего слова, привычной для российского уха идиомы…
Что интересно, русские вычислительные машины понимали не только команду «ИДТИ», но и «ИТТИ», а также «ИЙТИ». Это не связано с неграмотностью разработчиков, которые создавали подобные языки программирования. Это было обусловлено тем, что трансляторы и интерпретаторы русских языков программирования срабатывали на первую букву команды, и уже было неважно, какие символы использовались далее.
Русский язык программирования Аналитик
Надо сказать, что разработчики «русских» языков программирования зашли намного дальше в разработке языков программирования, чем их западные конкуренты.
Например, существовал язык программирования АНАЛИТИК. Он работал на вычислительных машинах МИР не только с численными, но и с аналитическими выражениями. Как видим, название «МИР» использовалось не только для наименования космической станции.
Во всех языках программирования используются переменные величины. С помощью переменных, собственно говоря, и появляется возможность программировать. Однако абсолютно во всех языках программирования каждая переменная величина к моменту обработки выражения должна иметь конкретное значение (цифровое, текстовое, логическое и т.п.).
Разработчики АНАЛИТИКа сделали иначе. И это больше никто не смог повторить, а именно. Они установили, что в отсутствии значения переменной ее значением становится имя переменной!
Например, пусть переменная B равна 2, а значение переменной A не определено. Тогда во всех языках программирования выражение C=A+B автоматически приводит к ошибке в выполнении программы. Но только не в АНАЛИТИКе.
В этом «русском» языке программирования такое выражение присваивало переменной C значение (A+2). При этом никакой ошибки не возникало. Программа продолжала работать с подобными аналитическими выражениями.
Например, выражение D=C+C присваивало переменной D значение (2*A+4), так как:
Что интересно, с подобными выражениями можно было осуществлять и более сложные операции. Например, алгебраические выражения можно было приводить к одной из 3-х форм:
- с раскрытием скобок,
- без раскрытия скобок,
- с приведением подобных членов.
Русские команды Интегрировать и Дифференцировать
Также присутствовали команды языка программирования, которые могли вычислять первообразную функции (команда «ИНТЕГРИРОВАТЬ»), и определять производную функции (команда «ДИФФЕРЕНЦИРОВАТЬ»).
Скептики скажут, что подобные аналитические вычисления в настоящий момент не сильно востребованы благодаря бурному развитию численных методов. Однако, во-первых, не будем забывать, что это делалось в 1960-е – 1970-е годы, еще на заре кибернетики.
А, во-вторых, создание трансляторов с подобных языков программирования как никогда демонстрировало существенное превосходство советской кибернетической школы программирования над западными конкурентами.
О перспективах
Не случайно до сих пор российские программисты высоко ценятся как в нашей стране, так и за рубежом. Они продолжают являться носителями недоступных западным специалистам подходов, гораздо более смелых и креативных, порой нарушающих стройную картину стабильного незыблемого мира западных стандартов программирования.
Конечно, наша беда – дураки и дороги, которые в вопросах кибернетики (и не только) происходят от того, что мы не научились делать массовые серийные продукты, легко продаваемые.
Один раз подковать блоху – это не то же самое, что массово серийно выпускать много одинаковых кибернетических блох. Это то, что еще нам предстоит научиться делать в неизбежной конкурентной борьбе с Западом.
Тем не менее, остается тот факт, что у нас были собственные разработки языков программирования. По тем временам такие разработки на порядок превосходили зарубежные аналоги. Кстати, они проводились на нашем собственном «железе», на нашей собственной элементной базе.
Это вселяет уверенность в том, что мы еще увидим кибернетические системы исключительно российского производства. Вполне возможно, что такие системы будут желанной добычей зарубежных хакеров, поскольку они будут отличаться от западных систем, как небо отличается от земли.
Другие интересные материалы:
Источник: www.compgramotnost.ru
О русском языке в программировании
Начну с мелочи. Удобно ли сейчас организована типичная смена раскладки клавиатуры? В смысле переключения на русский/латинский? На мой взгляд, в смартфонах и то удобнее. Не надо нажимать одновременно все эти «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]. По части «русификации» были добавлены русские ключевые слова, включая И-ИЛИ-НЕ вместо знаков «https://habr.com/ru/articles/535988/» target=»_blank»]habr.com[/mask_link]