Автор Тема: Программирование по-русски  (Прочитано 67934 раз)

Онлайн trs

  • Давно тут
  • **
  • Сообщений: 214
Re: Программирование по-русски
« Ответ #165 : 18.04.2021 09:27:35 »
Это вообще проблема модераторов. Чувство собственной значимости разъедает им трезвый взгляд на действительность, причём почти у всех модераторов такая "профессиональная деформация".
Полагаю, дело обстоит несколько иначе.

Альту более 20 лет, проект зародился на идеях СПО, которые исходно международные. Альт вырос, пережил многих "попутчиков", в том числе пытавшихся под сурдинку неких "выгод для России" проехаться на шее. Имею ввиду скандальную историю с внедрением в школы, когда третья сторона испортила установочные носители, сладкий шекель получили структуры некоего бывшего министра, а шишки до сих пор кидают в "Школьный Альтлинукс". Потом началось импортозамещение, когда некоторые бьют себя пяткой в грудь с криками "их бин Рашн ОС мантайнер", а по факту Эльбрус работает только на Альте и Астре (которая Debian, как и МЦСТ).

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

Онлайн trs

  • Давно тут
  • **
  • Сообщений: 214
Re: Программирование по-русски
« Ответ #166 : 18.04.2021 09:40:18 »
Я предлагаю инициаторам «посконного» ЯП сделать реализацию и привлечь прикладных хотя бы разработчиков.

Накидал реализацию. Нормальные алгорифмы Маркова и РЕФАЛ Турчина - посконнее некуда.

Фрагмент диалога с заинтересованной стороной:

Вопрос:  что такое "вычислительные скобки?"

Ответ: Цитирую РЕФАЛ-5 Руководство по программированию и справочник Турчин В.Ф., стр. 10 [...]

Десятая страница. Всё описание языка, включая абстрактную машину и примеры, укладывается в эти 10 страниц. Можно ли было их прочесть, я как-то даже боюсь спрашивать.
« Последнее редактирование: 18.04.2021 09:43:20 от trs »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 278
    • Домашняя страница
    • Email
Re: Программирование по-русски
« Ответ #167 : 18.04.2021 13:03:37 »
Я предлагаю инициаторам «посконного» ЯП сделать реализацию и привлечь прикладных хотя бы разработчиков.

Накидал реализацию. Нормальные алгорифмы Маркова и РЕФАЛ Турчина - посконнее некуда.
Где скачать можно?
Андрей Черепанов (cas@)

Онлайн trs

  • Давно тут
  • **
  • Сообщений: 214
Re: Программирование по-русски
« Ответ #168 : 19.04.2021 08:58:24 »
Где скачать можно?

Исходники  https://github.com/STrusov/refal-machine
Там же книга Турчина В.Ф. в pdf.
Интерпретатор понимает Базисный Рефал с некоторыми упрощениями (см. каталог examples, где модифицируется и исполняется компилятор Refal-05) плюс поддерживает кириллицу. Вместо традиционных префиксов s. e. t. (определяют тип переменной) можно использовать спецсимволы (незачем лишний раз переключать раскладку).

Ниже примеры поиска простых чисел. Моя реализация понимает оба варианта (если в первом удалить директивы $EXTERN и $ENTRY)
* Refal5-PZ & Refal-05 compatible

$EXTERN Add, Sub;

* syntactic sugar
*$ENUM From, To;

$ENTRY Go {
  = <Prout <Naturals <Sieve <Series From 2 To 10000>>>>;
}

Sieve {
  0      e.Tail = 0      <Sieve e.Tail>;
  s.Mesh e.Tail = s.Mesh <Sieve <Aliquots s.Mesh s.Mesh (e.Tail)>>;
   = ;
}

Aliquots {
  s.Mesh 1     (s.Cur e.In) e.Out = <Aliquots s.Mesh s.Mesh        (e.In) e.Out 0>;
  s.Mesh s.Cnt (s.Cur e.In) e.Out = <Aliquots s.Mesh <Sub s.Cnt 1> (e.In) e.Out s.Cur>;
  e.Stuff () e.Result = e.Result;
}

Series {
  From s.End To s.End e.Series = e.Series s.End;
  From s.Min To s.Max e.Series = <Series From <Add 1 s.Min> To s.Max e.Series s.Min>;
}

Naturals {
  0         e.Tail = <Naturals e.Tail>;
  s.Natural e.Tail = s.Natural <Naturals e.Tail>;
  = ;
}

#!/bin/refal -w

начало = <натуральные <решето <ряд от 2 до 10000>>>;

решето {
  0    … = 0    <решето …>;
  ?шаг … = ?шаг <решето <кратные ?шаг ?шаг (…)>>;
   = ;
}

кратные {
  ?шаг 1     (? .вход) .выход  = <кратные ?шаг ?шаг        (.вход) .выход 0>;
  ?шаг ?счёт (? .вход) .выход  = <кратные ?шаг <?счёт - 1> (.вход) .выход ?>;
  … () .готово = .готово;
}

ряд {
  от ?    до ?     .ряд = .ряд ?;
  от ?мин до ?макс .ряд = <ряд от <1 + ?мин> до ?макс .ряд ?мин>;
}

натуральные {
  0 … =   <натуральные …>;
  ? … = ? <натуральные …>;
  = ;
}
« Последнее редактирование: 19.04.2021 09:15:50 от trs »

Оффлайн DVI

  • Начинающий
  • *
  • Сообщений: 1
    • Email
Re: Программирование по-русски
« Ответ #169 : 29.08.2022 14:00:27 »
Накидал реализацию.
Спасибо. Несмотря на то, что переключение клавиатуры для {}<> уже стало восприниматься как неудобство, первая написанная мной для этого интерпретатора программа и работает, и выглядит красиво:-). Возможно, несколько недостаёт закапывания-выкапывания, но пока что попытаюсь обойтись файлами, т.к. именно стек мне сейчас не очень нужен.
« Последнее редактирование: 29.08.2022 14:50:15 от DVI »

Онлайн trs

  • Давно тут
  • **
  • Сообщений: 214
Re: Программирование по-русски
« Ответ #170 : 02.09.2022 08:56:15 »
Накидал реализацию.
Спасибо. Несмотря на то, что переключение клавиатуры для {}<> уже стало восприниматься как неудобство, первая написанная мной для этого интерпретатора программа и работает, и выглядит красиво:-). Возможно, несколько недостаёт закапывания-выкапывания, но пока что попытаюсь обойтись файлами, т.к. именно стек мне сейчас не очень нужен.
Прошу прощения, что не ответил оперативно - почему-то не вижу в почте уведомление о новом сообщении в данной теме.

Неудобства при наборе скобочек - одна из причин, почему работа приостановлена. Даже рассматривал вариант изменения (точнее, поддержки альтернативного варианта) синтаксиса одно время. В частности, добавить поддержку «конвейера»
Начало !  = <Print !> : (…) = <Prout !>;  // <<Prout <Print !>>а следующим шагом как-то уйти от <>
Начало !  =  ! -> Print : (…) -> Prout; // за что боролись, на то и напоролись
К счастью, узнал о раскладке Ручей. Она уже есть в Линуксах начиная с xkeyboard-config-2.36. Достаточно добавить оба варианта Russian (Engineering), см. во вложении пример для оболочки Gnome. {}<> вводятся привычными клавишами при нажатии правой Alt.

Что касается стека, на первый взгляд его несложно добавить на базе такого же двусвязного списка, что используется под поле зрения - рядом в той же «куче» расположить второй. Не реализовал, поскольку сам я на Рефале писал мало и мне оно пока не требовалось. Интереснее было найти решение, как реализовать лямбды без сборки мусора с подсчётом ссылок - насколько понимаю, в ряде случаев замыкания заменят стек. А так же добавить блоки и/или условия как у В.Ф. Турчина. Потом привести работу с файлами к виду, когда не приходится вручную оперировать с их описателями. Всё это упирается в необходимость написать что-то посложнее, например LSP сервер для Рефала (заодно получим подсветку синтаксиса в редакторах с поддержкой, т.е. почти везде). Беда в том, что у меня мозг слегка вывихнут ассемблером и машиной Тьюринга, обсудить развитие не с кем (о проекте Рефал-5λ знаю, но не хочу невзначай помешать учебному процессу), а если я в одиночку увлекусь такой затеей, то привычные к Рефалу наверняка будут удивлены результатом. Получается вот такой замкнутый круг. В итоге ждал, что Skull после запроса выше ответит хотя бы «ну кто так пишет транслятор, в одной то функции? бэст практикз рекомендуют декомпозицию». Теперь надеюсь, Вы расскажете больше о своей программе, а может быть даже покажете наиболее красивые её фрагменты.  :-)

Оффлайн DVI

  • Начинающий
  • *
  • Сообщений: 1
    • Email
Re: Программирование по-русски
« Ответ #171 : 12.09.2022 15:45:27 »
К счастью, узнал о раскладке Ручей. Она уже есть в Линуксах начиная с xkeyboard-config-2.36.

Спасибо. К сожалению, раскладкой обзавестись пока не удалось (возможно, для этого нужна более новая платформа, чем имеющаяся у меня p9). Тем не менее программа существенно выигрывает в читаемости.

Теперь надеюсь, Вы расскажете больше о своей программе, а может быть даже покажете наиболее красивые её фрагменты.  :-)

Две программы, написанные на Рефале-М, привожу полностью во вложении. Первая из них реализует сложение и умножение целых неотрицательных чисел с произвольным числом разрядов подобно тому, что есть в Лиспе, только для произвольных основания системы счисления и набора символов-цифр. Вторая преобразует числа от 0 до 99 в числительные, и основание от 2 до 20 - в название системы счисления.

Онлайн trs

  • Давно тут
  • **
  • Сообщений: 214
Re: Программирование по-русски
« Ответ #172 : 13.09.2022 15:28:34 »
К сожалению, раскладкой обзавестись пока не удалось (возможно, для этого нужна более новая платформа, чем имеющаяся у меня p9).
В p9 xkeyboard-config-2.25, а раскладка включена в 2.37. И буквально сейчас вышла новая версия. Возможно, заработает, если установить rpm пакет (он для Fedora). Я сначала вообще вручную накладывал патчи https://github.com/A-Projects/Ruchey/tree/main/RU-XKB/rpm-package/fc36/patches а потом обнаружил, что изменения уже в системе есть.

Две программы, написанные на Рефале-М, привожу полностью во вложении. Первая из них реализует сложение и умножение целых неотрицательных чисел с произвольным числом разрядов подобно тому, что есть в Лиспе, только для произвольных основания системы счисления и набора символов-цифр. Вторая преобразует числа от 0 до 99 в числительные, и основание от 2 до 20 - в название системы счисления.
Спасибо.
Вот такое, припоминаю, доводилось делать в школе:
числословами {
    "0" = ;
    "1" = "один";
    "2" = "два";
    "3" = "три";
    "4" = "четыре";
    "5" = "пять";
    "6" = "шесть";
    "7" = "семь";
    "8" = "восемь";
    "9" = "девять";
    "10" = "десять";
    "1" ?цифра = <модиф1 <числословами ?цифра>> "надцать";
    "4" ?цифра = "сорок " <числословами ?цифра>;
    "9" ?цифра = "девяносто " <числословами ?цифра>;
    ?цифра1 "0" = <модиф2 <числословами ?цифра1>>;
    ?цифра1 ?цифра2 = <модиф2 <числословами ?цифра1>> " " <числословами ?цифра2>;
}
модиф1 {
    .название "а" = .название "е";
    .название "е" = .название;
    .название "ь" = .название;
    .название = .название;
}
модиф2 {
    .название "ь" = .название "ьдесят";
    .название = .название "дцать";
}
на Qbasic, скорее всего. Там выходило что-то умопомрачительное. :-)

Можно ли распространять их в составе интерпретатора? Если да, то на каких условиях и кого указать автором?
Те примеры, что уже есть в каталогах examples и tests - больше технического плана и предназначены для тестирования, а Ваши показывают, как можно использовать язык, для такого напрашивается отдельный каталог «Примеры».

По поводу «лицензии» на сам интерпретатор. На форуме plana.mybb.ru, якобы созданном для продвижения русскоязычного программирования, пытались меня убедить, что обязательно должна быть лицензия, например GPL. Вы делом доказали моё утверждение, что кому надо, тот и так сможет свободно взять и использовать. Вероятно, придётся позже добавить «договор оферты» на русском языке, что-то простое и понятное, например «в учебных целях - без ограничений».

Оффлайн DVI

  • Начинающий
  • *
  • Сообщений: 1
    • Email
Re: Программирование по-русски
« Ответ #173 : 13.09.2022 16:39:32 »
Там выходило что-то умопомрачительное.
:)

Можно ли распространять их в составе интерпретатора? Если да, то на каких условиях и кого указать автором?
Можно. Автор: Даниил Исакевич.

«в учебных целях - без ограничений»
Всё целиком - на тех же условиях. А отдельные функции конечно можно использовать свободно. В конце концов, кому надо - тот посмотрит и своё напишет.:)

Оффлайн DVI

  • Начинающий
  • *
  • Сообщений: 1
    • Email
Re: Программирование по-русски
« Ответ #174 : 13.09.2022 16:53:13 »
Возможно, заработает, если установить rpm пакет (он для Fedora). Я сначала вообще вручную накладывал патчи https://github.com/A-Projects/Ruchey/tree/main/RU-XKB/rpm-package/fc36/patches а потом обнаружил, что изменения уже в системе есть.
Спасибо, попробую.