LINUX.ORG.RU

Язык программирования 1 теперь работает на Эльбрусе

 , , , ,


3

2

Также реализовано формирование имён функций доступа к полям структуры по правилам русского языка.

$ uname -a
Linux alatyr 5.4.0-3.19-e1cp #1 Wed Mar 9 16:53:28 MSK 2022 e2k E1C+ MBE1C-PC GNU/Linux
$ cat тест.1
#!1

структура человек
  ; имя
    отчество #:изменяемое
  #:суффикс -человека

иван = человек "Иван" "Иванович"
отчество-человека иван := "Петрович"
отчество-человека иван
$ racket/bin/racket тест.1
"Петрович"

Пока сборка есть только для Эльбрус Линукс на Эльбрус-1С+ (система команд e2k-8c). Для остальных можно воспользоваться скриптом для сборки.

Язык 1 - функциональный язык программирования на основе русского языка. Синтаксис унаследован от Haskell, семантика от Racket.

Предыдущее обсуждение на ЛОРе

>>> Описание языка

★★★★★

Проверено: hobbit ()

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

Это он?

Тема интересная. Только ссылочек бы всё-таки. Может, сюда? Ну и когда я читаю «сборка есть», ожидаю ссылку на эту сборку увидеть. Так же, как и на упомянутый скрипт.

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

Ну и когда я читаю «сборка есть», ожидаю ссылку на эту сборку увидеть. Так же, как и на упомянутый скрипт.

А куда бинарный каталог выложить? На Яндекс-диск?

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

А куда бинарный каталог выложить? На Яндекс-диск?

А в то место, где его ожидают увидеть, что мешает? Размеры бинаря?

Или я всё же ошибся, и это уже совсем другой проект?

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

Так же, как и на упомянутый скрипт.

Если для сборки из-под пользователя и без привязки к какому-либо менеджеру пакетов, то

git clone https://github.com/racket/racket
cd racket
make CONFIGURE_ARGS="--enable-pb --enable-mach=tpb64l"
make install
racket/bin/raco pkg install russian-lang

дальше для запуска программ

racket/bin/racket имя-программы.1

или для компиляции

racket/bin/raco exe имя-программы.1
monk ★★★★★ ()
Ответ на: комментарий от monk

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

Ну и наверное, можно тег lisp добавить? Он на ЛОРе для новостей про все лиспоподобные используется.

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

Ну и наверное, можно тег lisp добавить? Он на ЛОРе для новостей про все лиспоподобные используется.

Да, добавил. По сути-то это всё тот же лисп, но с вагоном сахара сверху.

monk ★★★★★ ()

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

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

Особенно если пытаться следовать давно похороненной идее «программирования на естественном языке».

Имена функций и переменных всё равно приходится давать на естественном языке. APL и J в качестве языков общего назначения не прижились.

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

Имена функций и переменных всё равно приходится давать на естественном языке

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

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

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

Чистого кода с комментариями. Когда задание написано по-русски, то комментарии тоже приходится писать по-русски. И получается что-то вроде


/*
   условные единицы = количество трансформаторов НН * 1,3 + количество шин НН * 2 + количество трансформаторов ВН * 1,8
+ количество шин ВН (п. 42 ТЗ) 
*/

conventionalUnits = transformerLVQuantity * 1.3 + busesLVQuantity * 2 + transformerHVQuantity * 1.8 + busesHVQuantity;

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

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

Нет. Это другое. Яр системный для ОС, а это прикладной со сборщиком мусора.

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

Так фактическое «1» или «один» чем не название? Не хуже чем «1с».

monk ★★★★★ ()

Ненавижу такие названия проектов.

Ну как вы думаете, что будет в поисковике по запросу «1»? Я даже проверять не буду.

Почему нельзя нормальное ключевое слово выбрать для названия?!

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

Да дело тут даже не столько в флективности и всём прочем, а тупо в локальности.

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

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

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

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

пардоньте, но язык программирования 1 - это PL/1

Тоже ожидал увидеть про PL/1. :) И удивлялся ещё, схрена ли про него вспомнили?

dimgel ★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Главное ТС-у нравится этим заниматься. Или скажете что лучше бы пиво пил? :)

Одно другому разве мешает? :)

dimgel ★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

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

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

Тупо для выживания разумно взять/стащить уже готовое опен-сорцное, например gcc или clang, в которые вложено уже столько миллионов человеко-часов, что приблизиться по качеству например генерируемого кода к ним невозможно. Да собственно наши так и делали: брали gcc и добавляли поддержку Эльбруса.

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

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

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

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

Да собственно наши так и делали: брали gcc и добавляли поддержку Эльбруса.

Нет. Компилятор lcc написан с нуля, расширения gcc реализованы через блок от EDG.

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

Хм, странно. Значит я что-то с чем-то напутал. И этим с нуля написанным компиляли линукс под Эльбрус? Вместе с опенофисом (или что там было), жавой (эта точно была) и т.п.?

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

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

Эта логика работает не только при выборе языка программирования.

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

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

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

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

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

И этим с нуля написанным компиляли линукс под Эльбрус?

Да.

Вместе с опенофисом (или что там было), жавой (эта точно была) и т.п.?

Для жавы ещё и JVM модифицировали, так как родная на VLIW очень тормозила.

monk ★★★★★ ()
структура человек
  ; имя
    отчество #:изменяемое
  #:суффикс -человека

«Был человек - нет человека»

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

Не кисло. Т.е. у меня даже нематерных слов нет. Потому что написать с нуля компилятор с этой бредятины под названием C++ – не то что эффективный, а хотя бы просто работающий – выглядит как что-то невозможное. Ну скажи честно, они хоть какие-нибудь готовые части взяли? Про «расширения gcc» не понял что такое, но звучит как нечто второстепенное.

Нашёл что такое EDG: покупной фронтенд. Я хз много ли он делает, если только парсинг то это ни о чём: я помню как в середине 90-х смотрел сорцы тогдашнего gcc, и в качестве парсера там был тупо bison с хинтами.

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

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

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

Ну скажи честно, они хоть какие-нибудь готовые части взяли?

Вот: https://en.wikipedia.org/wiki/Edison_Design_Group

«compiler front ends (preprocessing and parsing)»

Про «расширения gcc» не понял что такое, но звучит как нечто второстепенное.

https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html

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

Я хз много ли он делает, если только парсинг то это ни о чём: я помню как в середине 90-х смотрел сорцы тогдашнего gcc, и в качестве парсера там был тупо bison с хинтами.

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

monk ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.