LINUX.ORG.RU

Новый язык программирования для русскоговорящих

 , ,


2

1

Синтаксис от Хаскеля, семантика от Ракета.

факториал(сч) =
  если (сч == 1)
    1
    сч * факториал (сч - 1)

фибоначчи(сч) =
  если (сч < 3)
       1
       пусть рекурсия (н-1 1 ; н 2; тек-сч 3)
         если (сч == тек-сч) н $ рекурсия н (н + н-1) $ тек-сч + 1

Будет ещё конструкция надо-быстро с семантикой от Си (и использованием gcc).

Исходники: https://github.com/Kalimehtar/russian-lang

Пакет для Ракета: https://pkgd.racket-lang.org/pkgn/package/russian-lang

Документация: https://docs.racket-lang.org/russian-lang/index.html

★★★★★

Ответ на: комментарий от Result-Code

Описание грамматики языка пока что в формате только для Racket?

Вопрос не понял. Грамматика аналогична SRFI-110 с небольшими вариациями: вместо \\ используется ;, нет <* *>, инфиксная запись всюду, где обнаружен оператор не в первой позиции. Оператор распознаётся аналогично Хаскелю (всё, что состоит только из знаков «!#$%&⋆+./<=>?@^~:*-» или внутри спецсимволов: в Хаскеле `…`, у меня ^…^). Строчный комментарий из Хаскела -- (два минуса).

Теоретически можно легко перенести на любой другой лисп (реализация SRFI-110 для Common Lisp существует).

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 4)
Ответ на: комментарий от anonymous

тем более такое использование никак не пересекается в ее использованием в строках

С таким же успехом можно в англоязычном языке x (икс) использовать в качестве синтаксического разделителя. Тоже никак не используется с её использованием в строках. Мне в Common Lisp невозможность использования имени t достаточно мешала.

P.S. аналог x,y,z в русскоязычных программах ч,ш,щ,ё,ь,ъ

monk ★★★★★ ()

Не хватает заголовка вроде «ой гой-еси, не перевелись программисты на земле русской!»

Если серьезно, ЕМНИП давно была статья о том, что русскоязычным проще кодить т.к. фрагменты кода воспринимаются ими однозначно, нет конфликтов с бытовым языком. По своему опыту - мне безумно сложно было воспринимать философские тексты т.к. я постоянно путался, это у них термин или просто слово?

AntonI ()
Ответ на: комментарий от AntonI

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

Вот она:

http://compiler.su/russkij-yazyk-i-programmirovanie.php

Кроме того, есть примеры использования РЯ в программировании. Русскоязычный PL/1 отвечает, к примеру, за стыковку на МКС (расчёт баллистики) и используется для обработки фотографий, вот фрагмент кода:

http://www.вече.программирование-по-русски.рф/viewtopic.php?t=61

/*
 ИЩЕТ В ТЕКУЩЕЙ ПАПКЕ ФАЙЛЫ ISS*.TXT, ИЗВЛЕКАЕТ ИЗ НИХ:
 ИМЯ ФАЙЛА NASA PHOTO ID (СТРОКА 1),
 Lens ID (СТРОКА 17),
 Focus Mode (СТРОКА 19)
*/
EXIFTXT:PROC(ПАРАМ) MAIN;

%INCLUDE 'Z:SERVICE.DCL';

ОПС ПАРАМ ТЕКСТ(*)РД;

?DO_KONEC=ДА;
РАЗОБРАТЬ_ОДИН_ФАЙЛ(ПАРАМ);

РАЗОБРАТЬ_ОДИН_ФАЙЛ:PROC(ИМЯ);

ОПИСАНИЕ
ИМЯ       CHAR(*)VAR,
(CCC,CC1) CHAR(*)VAR,
(
FILENAME,
LENSID,
FOCUSMODE
)                  CHAR(*)VAR,
(I,J)              FIXED(31),
V720               BIT,
F_EXIF             FILE;

КОГДА НЕТ_ФАЙЛА(F_EXIF) ИДТИ НА_ВЫХОД;

ОТКРЫТЬ ФАЙЛ(F_EXIF) ДЛЯ_ВВОДА ТЕКСТОВЫЙ ПО_ИМЕНИ(ИМЯ);

КОГДА КОНЕЦ_ФАЙЛА(F_EXIF) ИДТИ НА_ВЫХОД;

PUT SKIP;
I=0;
V720 = НЕТ;
FILENAME,
LENSID,
FOCUSMODE = '';

ЦИКЛ ПОВТОРЯЯ;
   READ FILE(F_EXIF) INTO(CCC);
   I+=1;
//   ЕСЛИ I ^= 1 & I ^= 17 & I ^= 19 ТОГДА ОПЯТЬ;
   ССС=ЗАМЕНИТЬ(CCC,' ','^I');

   J=ИСКАТЬ(CCC,':');
   ЕСЛИ J=0 ТОГДА ОПЯТЬ;

   CC1=ПОДСТРОКА(CCC,1,J);
   СС1=ОЧИСТИТЬ(CC1);

   ЕСЛИ J=ДЛИНА(ССС)
      ТОГДА ССС='';
      ИНАЧЕ CCC=ПОДСТРОКА(CCC,J+1);
   ССС=ОЧИСТИТЬ(CCC);

   ЕСЛИ I = 1  & ИСКАТЬ(СС1,'ExifToolVersion') = 1 ТОГДА
      ЕСЛИ index(ССС,'7.')=1 ТОГДА V720 = ДА;

   ЕСЛИ V720
      ТОГДА
      {;
      ПРОВЕРИТЬ(2,  'FileName ' ,FILENAME);
      ПРОВЕРИТЬ(39, 'FocusMode ',FOCUSMODE);
      ПРОВЕРИТЬ(146,'LensID '   ,LENSID);
      };
      ИНАЧЕ
      {;
      ПРОВЕРИТЬ(1,  'NASA PHOTO ID:',FILENAME);
      ПРОВЕРИТЬ(17, 'Lens ID:'      ,LENSID);
      ПРОВЕРИТЬ(19, 'Focus Mode:'   ,FOCUSMODE);
      };

КОНЕЦ;

НА_ВЫХОД:
PUT EDIT(FILENAME,';',LENSID,';',FOCUSMODE)(A);
ВОЗВРАТ;

НА_СООБЩЕНИЕ: PUT SKIP LIST(ИМЯ,I,CC1,CCC);

ПРОВЕРИТЬ:PROC(I1,ОБРАЗЕЦ,КУДА);
ОПИСАНИЕ
I1             FIXED(31),
(ОБРАЗЕЦ,КУДА) CHAR(*)VAR;
 
//ЕСЛИ I ^= I1 ТОГДА ВОЗВРАТ;
ЕСЛИ ИСКАТЬ(СС1,ОБРАЗЕЦ)=1
   ТОГДА КУДА=ССС;
//   ИНАЧЕ ИДТИ НА_СООБЩЕНИЕ;

КОНЕЦ ПРОВЕРИТЬ;
КОНЕЦ РАЗОБРАТЬ_ОДИН_ФАЙЛ;

END EXIFTXT;

На языке Графит-Флокс описаны алгоритмы работы ступеней ракет, которые нас охраняют, а 1С используется очень широко.

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

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 3)
Ответ на: комментарий от AntonI

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

Зато словарный запас небытового становится сравним с бытовым. Вот зачем мне как программисту знать, что такое customer, TIN, payroll, payment, …?

О общение в стиле «посмотри валуе таски обработки инвоице» тоже не ускоряет процесс разработки.

monk ★★★★★ ()
Ответ на: комментарий от monk

А со скобками разве очевидно, что action2 при еслине ?

ви таки миня траллите
очевидно если скобки разные:

если (x > 0 && x< 10) {
  действие1(); 
} иначе если (x >= 10 && x <20) {
  действие2(яТвойДомТрубаШатал);
} иначе если (x >= 20) {
  действие2(мойЛюбимыйАргументВСпоре);
} иначе { // ноль и меньше
  новый число[] пукВЛужу = {1,2};  
  число радиусРазлетаОбломковЛужа = действие3(пукВЛужу);

  если (радиусРазлетаОбломковЛужа > радиусРазлетаОбломковВентилятор) {
    сообщить ("Пукаем в лужу!");
  } иначе {
    сообщить ("Пукаем на вентилятор!");
  }
}

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

rukez ()
Ответ на: комментарий от AntonI

Напротив порой однозначности этой часто нет, т.к. не раз встречал как нэйтив-спикер посчитал, что он самый умный и вводил кучу слов и сокращений, которые при общеизвестном дефиците документации в малых проектах, приводило к огромным сливам времени только на то, чтобы понять что делает ниндзя-код, т.к. название было не говорящим, поэтому имхо мне безразлично как написанно длинно или коротко, главное чтобы название переменных/функций прямо отражало их смысл-назначение и тут я тем более не против кстаии и кириллического яп, правда при условии не агульной бездумной русификации, а как результат множества решений только упрощающих разработку с прицелом под русскоязычную аудиторию, плюс это к тому же могло бы снизить планку входа для тех у кого с логикой всё впорядке, а навык запоминания «однозначных» слов, сленга и сокращений чужого языка напротив не ахти и они как результат могли делать свои разработки с прицелом опять же на носителей русского, тем более что порой замечал упоротость некоторых разработок и трендов, что продукт разрабатывается с прицелом только на русских(минимум 99,99% целевой аудитории из россии), а всякие РеАдМиПлИз.МД и комментарии в исходниках написаны на английском, т.е. русские строят барьеры для своих же - что мягко говоря странно и неразумно.

AKonia ()
Ответ на: комментарий от AKonia

Напротив порой однозначности этой часто нет

Да английский язык сам по себе страдает огромным количеством многозначных слов. Моё любимое - это oversight, которое означает одновременно «надзор» и «недосмотр», но также put и hub очень неплохи.

Помимо того, русские программисты плохо знают английский и они часто тупо пишут слова с орфографическими ошибками.

den73 ★★★★★ ()
Ответ на: комментарий от den73

Это обращение к полям какого-то файла в независящем от программиста формате, в чём проблема-то?

В имени переменной FOCUSMODE.

В результате в

НА_СООБЩЕНИЕ: PUT SKIP LIST(ИМЯ,I,CC1,CCC);

CC1 и CCC угадаешь сходу на каком языке?

monk ★★★★★ ()
Ответ на: комментарий от monk

Для СС1 и ССС есть режим выделения латиницы :)

Сложно придумать название для переменной, в которую вводится значение из поля внешнего формата, называемого FocusMode, иное, чем FocusMode. Будет только хуже.

Вообще А.Караваев писал, что они не сразу начали внедрять РЯ, поэтому получилось полосатенько.

den73 ★★★★★ ()
Ответ на: комментарий от monk

CC1 и CCC угадаешь сходу на каком языке?

Вариант решения, например в том, чтобы между ABCEHKMOPTX не делалось различий. И имена А(рус) и A(лат) обозначали одну и ту же переменную.

anonymous ()

Больше меня удивляет совсем другой факт, где, черт его задери, @metaprog, один из главных продвиженцев интернационализации и локализации в языке.

anonymous ()
Ответ на: комментарий от den73

раз вся экосистема на русском языке, то сотрудников искать проще и платить им можно меньше

Ну это киллерфича, не поспоришь. Для местных рабовладельцев и бездарных рабов-птушников. А специалистам то зачем ваша русификация? Кстати, дарю идею: узбекский ЯП. Очень перспективная тема.

anonymous ()
Ответ на: комментарий от anonymous

бездарных рабов-птушников.

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

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Сложно придумать название для переменной, в которую вводится значение из поля внешнего формата, называемого FocusMode, иное, чем FocusMode. Будет только хуже.

АлгоритмФокусировки. В смысле, в русском описании формата EXIF это поле называется «алгоритм фокусировки». А остальные два используемых — «имя файла» и «код объектива».

monk ★★★★★ ()
Ответ на: комментарий от monk

Придумать можно, но возникнет точка перевода, которая затруднит работу с кодом. Хотя можно и придумать. Я просто говорю, что придумывать необязательно. Внешние ресурсы и форматы всё равно никуда не денутся. Решение состоит не в тотальной русификации, а в способности легко управляться с двухъязычными текстами при доминировании русского, чего мы и добиваемся в ЯОС.

den73 ★★★★★ ()
Ответ на: комментарий от anonymous

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

Удобно ли будет делать в такой среде англо-русский словарь? Или хотя бы подмонтировать файлы с флешки? На флешке же никто не запрещает положить рядом файлы АВСЕ и ABCE .

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

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

anonymous ()
Ответ на: комментарий от anonymous

До 2014 года в 1С была вполне мировая зарплата.

вы потеряете вообще всех специалистов, и ракеты придется программировать 1Сникам.

пусть лучше ракеты программируют 1С-ники, чем человек, который потом уедет в США продавать секреты. Русский язык в т.ч. нужен для того, чтобы вот такие вот «обитатели глобуса» не составляли критическую массу там, где программируют ракеты. Вот в Эльбрусе комментарии на английском и я уж сомневаюсь, можно ли ставить Эльбрус на ракеты.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

уедет в США продавать секреты.

лул. Как человек, которому 2 года назад разрешили выезд из страны, могу сказать, что секретов давно никаких нет, особенно если учесть, что у нас начальство с доступом к документам ОВ по 2 раза за год в страны наты моталось отдыхать и дачки строить. Так что довод твой такое себе …

anonymous ()
Ответ на: комментарий от den73

англо-русский словарь

А какие проблемы? ABCEHKMOPTX <-> АВСЕНКМОРТХ и aceopcxy <-> асеорсху отображается в зависимости от того, в каком языке мы ищем слово. Если в слове присутствуют буквы из оставшегося подмножества (рус или лат), то вопрос вообще однозначно решается.

подмонтировать файлы с флешки

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

anonymous ()
Ответ на: комментарий от anonymous

Насчёт узбеков. Мой коллега родом из Солнечного Узбекистана, в момент выхода Узбекистана из состава СССР работал там инженером-связистом на АТС. Местное руководство, желая избавиться от русского языка и русскоговорящих специалистов, распорядилось перевести всю техническую документацию по обслуживанию АТС на узбекский язык. Но беда в том, что в узбекском языке отсутствует необходимая терминология, информацию об этом удалось довести до начальства. Тогда начальство в мудрости своей повелело использовать недостающие термины из языка фарси. И тут очередная беда, узбекские инженеры, как оказалось, не понимают фарси...

Jameson ★★★ ()
Ответ на: комментарий от anonymous

отображается в зависимости от того, в каком языке мы ищем слово

Что, кстати, я делал именно для словаря. Практически. Спелчеккер для OCR документов. Пока жив.

anonymous ()
Ответ на: комментарий от anonymous

Но кривое-косое решение тоже не выход.

если ты всё ещё тот анонимус, то решение состоит в том, чтобы кириллица и латиница визуально отличались, есть много способов этого добиться, они приведены в теме, а тот, который внедрён - на самой последней картинке. К воспросу качества отрисовки, выбору шрифта и цветовой гаммы это не имеет отношения, т.е. я не понял, что такое «самоубийство для глаз». Для меня ЯОС выглядит достаточно нормально, я могу в ней работать много часов подряд.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

чтобы кириллица и латиница визуально отличались

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

Для меня

А, тогда да, это сильный аргумент. У метапрога (не к ночи) диагарммы тоже выглядят нормально.

anonymous ()
Ответ на: комментарий от anonymous

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

Сделать идентичность одинаково выглядящих букв кириллицы и латиницы - лучше, чем сделать их визуально отличимыми? Давай, приводи свои аргументы. На самом деле никто никаких аргументов в пользу твоего решения не приводил - всем понятно, что это костыль и его можно применять только от крайней нищеты (например, когда нужно влезть в 7 бит или что-то в этом роде). Я его хотел применить в одном месте в ЯОС (на экране загрузки), но пока обошлось без этого и надеюсь, что и обойдётся.

И ты его не смог защитить от элементарной проблемы с внешней файловой системой.

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от anonymous

А, тогда да, это сильный аргумент

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

den73 ★★★★★ ()
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Сделать идентичность кириллицы и латиницы

Идентичность - это что? Я про отображение в единый алфавит при обработке имен / ключевых слов.

ABCDEFGHIJKLMNOPQRSTUVWXYZ, БГДЖЗИЙЛПУФЦЧШЩЪЫЬЭЮЯ, abcdefghijklmnopqrstuvwxyz, бвгджзийклмнптфцчшщъыьэюя

Или типа того.

И ещё греческий туда.

чем сделать их визуально отличимыми

Глаголицу введи.

На самом деле никто никаких аргументов в пользу твоего решения не приводил

Жаль.

anonymous ()
Ответ на: комментарий от anonymous

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

den73 ★★★★★ ()
Ответ на: комментарий от den73

Обоснуй, чем это лучше визуальной отличимости

У тебя решение подразумевает vendor lock-in.

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

Дальше развивать не надо, надеюсь, все очевидно?

anonymous ()