LINUX.ORG.RU

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

 , , , ,


4

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 ()
Последнее исправление: hobbit (всего исправлений: 6)
Ответ на: комментарий от fluorite

У меня было бы

ПРОСТОЕ N =
  если 
    (N < 2) ложь
    иначе $ не $ цикл/первый
      для
        M $ в-диапазоне-по 2 $ целое $ корень(N) + 0.5
        #:когда (N % M == 0)
      истина

вывести $ ПРОСТОЕ 2003
monk ★★★★★
() автор топика
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от fluorite

все

всё, чёрёз ё. Т.к. все ассоциируется с каким-то ФП-предикатом на множестве.

для M от 2 до корень(N)+0.5 цикл

Слово цикл надо в начало строки, иначе крайне дискомфортно читать: пока не доберёшься до конца строки, не понятно о чём речь. А если должно быть понятно по слову для, то слово цикл вообще лишнее.

кц

Гы. Ку @ля. Если после есливсё, то и здесь должно быть всё. Иначе бардак.

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

nombro_da_pneŭoj

Там про шины высокого и низкого напряжения. Которые в распредшкафах. Вряд ли там будет корень pneŭ.

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

А вот, кстати, что мне понравилось - так это оформление. Слева идут инструкции, посередине чётко выровнены все возвраты из функции, справа - комментарии.

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

Тут вообще непонятно примерно ни черта. (Предыдущие примеры не смотрел; из ФП-языков знаю только scala, который мультипарадигменный и синтаксис имеет вполне общепринятый.)

если 
   (N < 2) ложь

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

иначе $ не $ цикл/первый

Что такое $? Спец.символ или имя переменной? Если спец.символ, то что он означает? Если имя переменной, то какие ещё бывают не-alphanumeric имена, и какие ограничения на имена вообще?

Что за $ не $?

Что значит «/первый» в цикл/первый?

M $ в-диапазоне-по 2 целое(корень(N) + 0.5)

После нескольких минут затупления, думаю что это может означать «цикл по M от $ до целое(…) с шагом 2», хотя и не уверен, т.к. «в-диапазоне-по» это вообще что-то нерусское. Шаг 2 – это видимо для ускорения перебора, но тут я уже туплю: а откуда следует, что перебор всегда начинается с нечётного числа?

#:когда (N % M == 0)

Что такое #: и каждый из этих двух символов по отдельности? Вряд ли комментарий, т.к. условие существенное. Поскольку == 0 т.е. тут проверка на НЕ простое число, то возможно это связано с отрицанием в $ не $ выше, что не делает синтаксис той строки понятнее.

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

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

Ну ты же понимаешь, что только что покритиковал выписку из брошюры 1987 года?

Да. :) Но не смог удержаться. Мы эту гадость в школе проходили.

UPD. Это кстати иллюстрация сразу двух вещей:

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

  • разработкой вещей практических не должны заниматься теоретики. (Тут вспоминаются наезды на 7-уровневую модель OSI.)

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

А вот, кстати, что мне понравилось - так это оформление. Слева идут инструкции, посередине чётко выровнены все возвраты из функции, справа - комментарии.

Эм, в твоём примере из брошюры 1987 года? Ну вполне нормальное оформление, в т.ч. по современным меркам. Но это вряд ли повод для восхищения: тот же си постарше будет лет на 20, а в отступы научились скорее всего и того раньше. :)

pr849
()

это типа Язык программирования 1C ? Чтобы сложнее было искать в гугле ?

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

Угу, «Рапира». Я по вашей ссылке полистал и сразу нашёл (стр. 4) корень как имя встроенной функции. Почему корень, а не квКорень?

Разве «возврат нет» и «возврат да» понятен?! Это, оказывается, оператор вывода текста на экран!! Сравните с writeln(«Да»);

За кц вместо кнцЦикла отдельное спасибо создателям.

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

Для языка, выпущенного в 1959 году, он очень живуч.

Живуч?! Он живёт на нескольких мейнфреймах, которые дорого и долго переделывать, и не взлетел за пределами США.

Иначе получается что-то вроде:

Чем плохо?

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

А ты попробуй отдельно само название загуглить.

Ну сравни erlang теперь работает на эльбрусе и язык программирования 1 теперь работает на эльбрусе. Так и будете за собой этот прицеп таскать.

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

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

Предыдущие примеры не смотрел; из ФП-языков знаю только scala

Тогда такой вариант синтаксиса (без лишних спецсимволов):

ПРОСТОЕ N =
  если N < 2 тогда ложь
    иначе 
    не 
      цикл/первый
        для
          M 
            в-диапазоне-по 2 (целое (корень(N) + 0.5))
          #:когда (N % M == 0)
        истина

вывести 
  ПРОСТОЕ 2003

в-диапазоне-по а б возвращает диапазон с а по б включительно.

Можно ещё так:

ПРОСТОЕ N =
  если N < 2 тогда ложь
    иначе 
    не 
      цикл/первый
        для
          M 
            2 ...+ целое (корень(N) + 0.5)
          #:когда (N % M == 0)
        истина

вывести 
  ПРОСТОЕ 2003

#: и каждый из этих двух символов по отдельности

#:имя – именованный параметр. В данном случае условие, по которому отработает тело цикла (то есть истина).

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

Чем плохо?

Смесью языков в одной строке. Суржик. Как «таргетирование имплементаций лэнгвиджей» или «How much watch?».

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

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

ya-betmen ★★★★★
()
Ответ на: комментарий от mister_VA

Разве «возврат нет» и «возврат да» понятен?!

Да. Вот прямо очевидней некуда. Как return YES; в objective-c.

writeln непонятно. Куда записать? На принтер? Что за ln?

Могу предположить, что Рапировский Вывод: был интерактивной командой, как PRINT в бейсике.

fluorite ★★★★★
()
Ответ на: комментарий от ya-betmen

Но синтаксис конечно адовый, я еле продрался через «не» «:когда»

Переписывание 1-в-1 получилось некрасивым. Если бы с нуля писал было бы так:

ПРОСТОЕ N =
  предел = целое 
             корень(N) + 0.5
  проверить-от M =  -- проверить делители от M до предела
    если 
      (N % M == 0) ложь
      (M == предел) истина
      иначе
        проверить-от (M + 1)
  если N < 2 тогда ложь
  иначе 
    проверить-от 2

если без тогда позволяет указать несколько пар условие-действие.

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

Тогда для такой системы записи надо и язык на базе древнерусского

… например 1, 2 :)

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

А почему

целое
    корень(N) 
А не
целое(корень(N))
?

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

ya-betmen ★★★★★
()

Давно я такого убожества не видел :-D

zabbal ★★★★★
()
Ответ на: комментарий от ya-betmen

это одно и то же. Можно писать на отдельной строке, можно в скобках.

проверить до предела

После -- комментарий.

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

В русском языке много англицизмов, и новые легко встраиваются это нивелирует потерю. Ну типа object-объект, function-функция, и т.д.

mydibyje ★★★★
()

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


Звучит как какая то насмешка над русским языком в программировании, всратый язык без задачь который никто нигде не будет изучать и применять мол вот его место. Тем более расширение файла .1 вроде распознаются в *nix как man файлы.
А тем временем в школах внедряются линупсы (со скрипом) и можно было бы дать школьникам русскоязычный bash что бы Линукс в целом лучше усваивался. А то еще сделать его лучше и удобней чем баш и сделать его таким чтоб он не только на русском мог но и на других языках.
Хоть на арабском хоть на японском.

А так это очередное баловство типа ёптаскрипта, только несмешное.

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

В русском языке много англицизмов, и новые легко встраиваются это нивелирует потерю.

Я про обратную ситуацию. Дали ТЗ на русском языке. Документацию (спецификацию, алгоритмы) вроде имеет смысл писать на русском. Комментарии вроде к коду и должны быть на английском. В результате в документации «решение СЛУ методом Крамера», а в комментарии «Cramer’s rule for a system of linear equations». Не говоря уж про имена показателей, надписей, кнопок и прочее. В документации «кнопка отправки ТОРГ-12», в комментарии «post invoice» и быстро найти по комментарию текст в документации или по документации, какой комментарий ей соответствует, почти нереально.

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

и можно было бы дать школьникам русскоязычный bash что бы Линукс в целом лучше усваивался. А то еще сделать его лучше и удобней чем баш и сделать его таким чтоб он не только на русском мог но и на других языках

Так делай.

Я делаю язык для себя. Если кому-то ещё интересен, хорошо. Если нет, мне всё равно.

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

А ещё с переводом проблема в неоднозначности. Скажем, дали задание сделать вид расчёта зарплаты «Доплата до МРОТ». По смыслу называешь класс «SurchareToMinimalWage» (ну как ещё МРОТ назвать?). А потом через полгода задача сделать «Доплата до минимального заработка». И как новый класс называть? Или старый переименовывать в «SurchareToMROT» (раз уж МРОТ на самом деле не минимальный) и во всей документации не забыть. Или новый назвать «SurchareToRealMinimal» на горе последующим сопровожденцам…

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

Видел базу с таблицами goods и tovars. Потому что сначала номенклатуру перевели как goods, а потом, когда выяснилось, что не вся номенклатура товар и надо дополнительные поля, то сделали русизм.

monk ★★★★★
() автор топика

А тем временем, пока ИТ-элита ЛОРа уверяет нас в вечности английского языка в ИТ, рекламный баннер на том же ЛОРе завлекает на курсы скоростного запоминания китайских иероглифов. Реклама явно что-то знает.

И нет, я не искал ничего по этой тематике ни в яндексе, ни в гугле, и вообще знаю только «нихао» и «та чи мифан». :)

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

Но если комментарии заказчик требует писать на английском, значит программа планируется к доработке англоязычными программистами, то есть в будущем другое ТЗ по этой программме будут давать англоязычным, и доки получается тоже надо сразу на англе делать, не понял прикола…

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

как ещё МРОТ назвать?

Как установленную законом минимальную зп - toStatutoryMinimumWage

Доплата до минимального заработка». И как новый класс называть?

Это не одно и то же с МРОТ? Легче брать дословный перевод и не париться, будет toMinimumWage.

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

Смесью языков в одной строке

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

mister_VA ★★
()

Нафлудили. Лень всё перечитывать. Расскажите как и чем генерируется ассемблерный код?

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

Но если комментарии заказчик требует писать на английском

Заказчик не предъявляет требований к комментариям. Ему, по большому счёту, даже всё равно на каком языке программирования реализована задача. Главное, чтобы работала правильно и соответствовала ТЗ. Вот к спецификации есть требование наличия перевода на русский, так как он её всё-таки согласует.

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

/**
 * Сумма чисел
 * @param {number} a
 * @param {number} b
 * @returns {number} сумму a и b
 */

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

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

Это не одно и то же с МРОТ? Легче брать дословный перевод и не париться, будет toMinimumWage.

В том-то и дело. Также как ставка рефинансирования у нас не совпадала со ставкой, по которой ЦБ давал кредиты банкам, так и МРОТ не совсем минимальная оплата труда. Он является минимальной для ФСС, штрафов. Но именно для оплаты труда может быть другая минимальная (тоже установленная законом).

Поэтому по-русски есть отдельно МРОТ и отдельно «минимальная зарплата». Как их по-разному перевести на английский?

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

Расскажите как и чем генерируется ассемблерный код?

Racket, который для этого использует Chez Scheme.

Если именно для Эльбруса, то используется байткод, так как кодогенератор для e2k в Chez Scheme ещё не написан.

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

Нихао – это японский.

Китайский. В японском это заимствование из китайского. Здравствуйте по-японски коннитива.

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

По-любому будет смесь языков, даже если это будет смесь Джавы с ангельским.

Не будет смеси словарей. Когда у одной коллекции length(), потому что из стандартной библиотеки, а у другой количество(), потому что реализована самостоятельно.

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

(hash-set! приоритеты оп (cons приоритет ассоциативность)) заставляет, фактически, думать на двух языках одновременно.

А иногда приходится вспоминать, искомую функцию надо искать среди русскоязычных или англоязычных. Потому что есть list? и есть список1?.

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

Иначе получается что-то вроде

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

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

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

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

Если брать виды МРОТа, то например раз первый вариант функции про зарплату был о федеральном МРОТ, а вторая функция про региональный, то вторую назвать как и первую, с уточнением-припиской SurchareToMinimalWageRegional. Название первой можно не менять на SurchareToMinimalWageFederal, если важна обратная совместимость.

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

вторая функция про региональный

Вторая вообще не про МРОТ. А про документы типа «трёхстороннее соглашение между округом, работодателями и профсоюзами о минимальной зарплате».

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

то не вижу проблемы в приведённом комментарии

Читабельность строки:

@returns {number} сумму a и b

не заставляет спотыкаться при чтении?

monk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.