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

★★★★★

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

Так короче. К тому же это сокращение не от фибоначчи-леонардо-пизанский, а от число-фибоначчи(сч)

Люди всей очень разные:

  • рост;
  • вес;
  • характеры;
  • вкусы;
  • привычки;

Поэтому для того, чтобы «объять, необъятное» нужно такие технологии программирования разрабатывать, чтобы
самый «противный из противных» не смог - … /«Гусарам молчать!»/.

Владимир

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

Поэтому для того, чтобы «объять, необъятное» нужно такие технологии программирования разрабатывать, чтобы самый «противный из противных» не смог - … /«Гусарам молчать!»/.

Это не шутка была.

Владимир

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

– Ты сильный программист?
– Ну вроде как да.
– Отлично, завтра пойдёшь склад на новое место переносить…

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

Место "сильного программиста" - СКЛАД

Владимир

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

а разгадка одна

фибоначчи-леонардо-пизанский

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

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

и вот так таких уже сигналов в природе естественным образом дофига должно находиться. потому что гармония золотого сечения естественным ростом дофига где находится, гармоничный рост он в пропорции золотого сечения. естественно какая-то «гармоничная передача сигнала» и её ЛАФ(хз)ЧХ должна быть в природе в таких вот гиперсинусах/гиперкосинусах, а не в обычных.

проект языка у тебя интересный, конечно же.

anonymous ()
Ответ на: а разгадка одна от anonymous

Re: а разгадка одна

… естественно какая-то «гармоничная передача сигнала» и её ЛАФ(хз)ЧХ должна быть в природе в таких вот гиперсинусах/гиперкосинусах, а не в обычных.

Это да, но скорее в гипертангенсах/гиперкотангенсах …

anonymous ()

Посмотрел немного https://pkgs.racket-lang.org/package/russian-lang

Экспромтом

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

 - Для каждого языка использовать свой словарь ключевых слов;  

 - В исходниках rkt вместо русских ключевых слов использовать ID из словаря;  

 - Разработать несложный шаблонизатор, который позволит во всех *.rkt поменять ID на текстовую строку.  

Вышесказанное иллюстрирует лишь саму возможность реализации многоязычности.

Владимир

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

Потому что исходный язык лисп, а не питон.

В оригинале было (let recurse ((n 2) (n-1 1)) …), поэтому замены равно на пробел не было.

Можно было добавить равно при задании параметров, но зачем, если и без него всё однозначно?

Кроме того, потерялось бы единство с объявлением функции с аргументами по-умолчания

ф(а; б 1) = 
  ...

Разве что тоже обязать ставить равно…

К тому же, равно здесь уже используется как определение функций и переменных.

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

Посмотри https://github.com/Kalimehtar/russian-lang/blob/master/1/%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C.rkt#L122

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

Можно идти до конца — позволить произвольный перевод любой семантической единице программы (идентификатору или комментарию). Но это ставит крест на текстовом представлении программы. Потребуется специализированный редактор. Идея мне нравится. но её надо обдумать.

В частности, возникает проблема суффиксов/префиксов и автоматически сформированных имён идентификаторов.

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

а то тебе уже ярлыки фашиста и бендеровца «вешать» начали.

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

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

Вот это реально не важно.

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

Владимир

anonymous ()
Ответ на: комментарий от anonymous
  • В исходниках rkt вместо русских ключевых слов использовать ID из словаря;

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

Но вот исходники под GPL на github в стиле

run.c++.in

#1 #2(#1 #3, #4* #5)
{
   #6 #7(#3, #5);
}

run.c++.po.ru

msgid "#1"
msgstr "целое"

msgid "#2"
msgstr "главная"

msgid "#3"
msgstr "количество_аргументов"

msgid "#4"
msgstr "символ"

msgid "#5"
msgstr "аргументы"

msgid "#6"
msgstr "возврат"

msgid "#7"
msgstr "запуститьПриложение"

run.c++.po.en

msgid "#1"
msgstr "int"

msgid "#2"
msgstr "main"

msgid "#3"
msgstr "argc"

msgid "#4"
msgstr "char"

msgid "#5"
msgstr "argv"

msgid "#6"
msgstr "return"

msgid "#7"
msgstr "runApplication"

думаю, вызовут возмущение ещё больше, чем эта ветка форума.

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

Посмотри https://ru.wikipedia.org/wiki/Словио

Посмотрел. Очередной искусственный язык. Существенных преимуществ перед естественными не имеет. С 2011 заброшен.

Уж лучше https://ru.wikipedia.org/wiki/Ифкуиль . Он хотя бы даёт реальные преимущества (однозначность и регулярность фраз, явное указание на метафоры и намерения).

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

Посмотрел. Очередной искусственный язык. Существенных преимуществ перед естественными не имеет. С 2011 заброшен.

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

Владимир

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

А можно поподробнее? Ведь это прямая реализация твоего совета. Ты результат представлял как-то по-другому? Как?

У меня так.

Любое поле в объекте в метадата базе может иметь неограниченное количество свойств.

При этом свойства могут быть представлены в виде списка, дерева, …, проще говоря свойство может быть объектом.

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

PS: По существу ничего нового не изобретаю …

Все знают, что есть объекты, метаданные, …

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

Не ждать же 999 стандарт C++?

Владимир

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

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

https://ru.wikipedia.org/wiki/Список_искусственных_языков

Владимир

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

Полезны ли искусственные языки?

Шутка /а может быть в этом что-то и есть/.

И так.
Имееем тысячу книг в электронном языке скажем на английском языке.

Задача

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

Срок разработки алгоритма программы - три дня.

Владимир

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

Любое поле в объекте в метадата базе может иметь неограниченное количество свойств.

Так эту базу всё равно надо как-то сохранять и выкладывать. Вот у меня она в виде файлов .po.. И в исходнике сплошные ссылки на эту метадату.

Или предлагаешь ещё и бинарный формат под это или сплошной JSON с данными и метаданными в одном файл использовать? Так с точки зрения систем контроля версий ещё хуже будет.

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

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

Не ждать же 999 стандарт C++?

C++ к данной идее перпендикулярен. Всё равно откуда-то надо брать семантику языка и компилятор. Можно и C++.

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

Полезны ли искусственные языки?

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

Самый старый искусственный язык — язык юридических договоров.

Ещё есть язык научных работ, который напоминает Haskell запретом на присваивание. В нём нельзя сказать «А является Б», а можно только «А проявляет свойства Б в условиях …».

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

Так эту базу всё равно надо как-то сохранять и выкладывать. Вот у меня она в виде файлов .po.. И в исходнике сплошные ссылки на эту метадату.

В «точку попал».
У меня в планах /при разработке GUI/ сделать конвертер «po» в один из объектов базы.

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

Да почему же?
Одно и тот же идентификатор /но лучше так не делать/ в разных объектах иметь разную семантику.

C++ к данной идее перпендикулярен. Всё равно откуда-то надо брать семантику языка и компилятор. Можно и C++.

Именно так.
Программа в run-time может создавать объекты и работать с ними, которых в C++ ни когда не будет.
C++ программа ведь может использовать API СУБД, …?

Владимир

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

Полезны. Так как заставляют внимательнее смотреть на то, что психологи называют пресуппозицией.

Да, целый пласт идей …
Пока все же буду «реалистом», задача N1 - создание GUI.
Конечно лучшие «best practices» будут учтены.

Владимир

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

Название нельзя.

Одно и тот же идентификатор /но лучше так не делать/ в разных объектах

Вот это я и имел в виду. Равенство названий не всегда обозначает равенство идентификаторов. Например, в лиспе имя функции и имя переменной могут называться одинаково (а переводиться по разному, «cut» — «отрезать» для функции и «отрезок» для переменной).

И наоборот, в Паскале Trust и tRust — названия разные, но являются одним и тем же идентификатором.

C++ программа ведь может использовать API СУБД, …?

Может. Но СУБД всё равно, как правило, написана на том же C++.

Программа в run-time может создавать объекты и работать с ними, которых в C++ ни когда не будет.

Тогда нужна семантика этой работы.

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

Sorry

Шутка

https://www.youtube.com/watch?v=P9wnSimr0Yw Создаем Метапрог «как можем, для души»

PS: Мысли о создании языка программирования для «тети Нюры» @metaprog правильные …
Но путь он выбрал - … /«Гусарам молчать»/.

Владимир

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

Как и 1С …

Вот 1С хороший пример, где придумали свой язык со своей семантикой. Насколько я знаю, аналога конструкций &НаСервере, &НаКлиенте, &НаСервереБезКонтекста ни на одном другом языке нет.

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

Тогда нужна семантика этой работы.

У меня объекты, поля, … могут иметь семантику /при необходимости/.
Кстати такой подход много упрощает разработку алгоритмов.

PS: Ничего нового ведь не придумал.
«Все украдено до нас».

Владимир

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

Пока в «комод».

Приоритеты

  1. Допилить язык до реализации Scheme R5RS.

  2. Реализовать подъязык надо-быстро хотя бы на уровне паскаля с указателями.

  3. Многоязычнойсть.

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

То есть будет программа, которая из исходника вытаскивает идентификаторы и получает имя.расширение.in + имя.расширение.po.язык. И программа, которая собирает обратно для указанного языка.

Как gettext.

Проблема генерации идентификаторов пока решится тем, что для компиляции будет использоваться только один язык (для большинства - английский).

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

То есть будет программа, которая из исходника вытаскивает идентификаторы и получает имя.расширение.in + имя.расширение.po.язык. И программа, которая собирает обратно для указанного языка.

Можно и так.

В заголовке треда добавь инфу, что язык многоязычным будет /чтобы не пинали лишний раз/.
ИМХО многоязычность полезна и более того - нужна.

Владимир

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

В заголовке треда добавь инфу, что язык многоязычным будет /чтобы не пинали лишний раз/.

Именно этот сам по себе не будет.

Многоязычность будет для любого языка программирования и конкретно для этого языком компиляции будет русский (потому что надо-быстро и некоторые другие конструкции реализованы в библиотеках только на русском языке).

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

В оригинале было

это ответ на вопрос «почему так вышло?» А я спрашивал «зачем так сделали?» Ответ был бы, низачем, оставили как было.

Можно было добавить равно при задании параметров, но зачем, если и без него всё однозначно?

Потому что знак равно объединяет связанный сущности.

ф(а; б 1)

В этом примере есть два пробела, один отделяет б от точки с запятой, а другой связывает переменную б и ее значение. Довольно противоречивая штука. А было бы ф(а; б=1) и сразу видно, где отделители, а где присвоение.

К тому же, равно здесь уже используется как определение функций и переменных.

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

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

В этом примере есть два пробела, один отделяет б от точки с запятой, а другой связывает переменную б и ее значение. Довольно противоречивая штука. А было бы ф(а; б=1) и сразу видно, где отделители, а где присвоение.

Так в том-то и дело, что оно не присовение

ф(а; б 1) =

= «определяется функция ф с аргументами а и б, если б не задано, то его значение по-умолчанию 1».

А было бы ф(а; б=1) и сразу видно, где отделители, а где присвоение.

Вот так совсем невозможно. «б=1» — это допустимый идентификатор. Поэтому либо ф(а; б 1), либо ф(а; б = 1). Второе (по-моему) удлиняет запись без особой пользы.

То есть, = все равно используется как символ присвоения

Не присвоения, определения.

а = 1
а = а + 1

ошибка. Должно быть

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

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

После точки с запятой пробел не обязателен.

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

это ответ на вопрос «почему так вышло?» А я спрашивал «зачем так сделали?» Ответ был бы, низачем, оставили как было.

Если брать другие языки программирования, то там не обязательно равно. Бывает пробел, двоеточие, дополнительные слова типа &optional, :=, … Почему выбирать именно равно?

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

Но вот исходники под GPL на github в стиле

Кто-нибудь в курсе, что за чертовщина на github.com происходит? На мыло они повесили автоответчик, а в https://support.github.com/ походу наркоманов понабрали. Как с этим работать то?

anonymous ()