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)
Ответ на: комментарий от mister_VA

На 1С в русским или 1С в ангельском варианте?

На языке, совпадающем с языком ТЗ. Иначе плюс пару часов на утрясание словаря проекта.

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

Ваше задание – не магазин, а склад, поскольку для магазина необходимо сопряжение с ККМ

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

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

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

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

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

При условии, что задание выдано на русском, так и есть.

Если текст задания изначально на английском, то (при достаточно хорошем знании английского) обычно его быстрее на английском диалекте 1С и закодировать (как сделано в 1C:Hotel).

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

Поступление денег от покупателя ОБЯЗАТЕЛЬНО должно проходить через ККМ. ККМ должен быть подключён к налоговой и в чеке должны указываться проданные позиции. Иначе мы имеем дело не с магазином, а со складом при магазине.

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

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

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

А через пробел прокатит?

Да.

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

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

Мы в русских равнинах, какое задание на английском для 1С?

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

Я предложил более корректный вариант: сделать одно и тоже русскоязычным в русской 1С и английской 1С без учёта сложностей незнакомой предметной области.

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

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

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

Я предложил более корректный вариант: сделать одно и тоже русскоязычным в русской 1С и английской 1С без учёта сложностей незнакомой предметной области.

Это очень просто. Для тех кто учил в школе язык отличный от английского.

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

Я предложил более корректный вариант: сделать одно и тоже русскоязычным в русской 1С и английской 1С без учёта сложностей незнакомой предметной области.

Так я примерно это и сравнивал. Равная доработка (например, добавить новый документ) в 1С:Розница (русской) и 1С:Hotel (английской) у меня занимает почти в два раза меньше времени в русской (то, что в русской 3 часа, в английской около 5). При том, что у меня есть опыт работы в англоязычных ЯП (Common Lisp, Racket, C++).

Фактически, опыт доработки 1С:Hotel меня и сподвиг на написание русскоязычного ЯП общего назначения с открытым бесплатным компилятором.

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

Сведения с касс о проданных товарах должны поступать в эту систему немедленно.

Это не требует непосредственного подключения касс к программе. Раньше вообще в тетрадке учёт вели и никто не требовал подключения кассы к тетрадке…

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

Хотя бы за ради того, чтобы продавцы не искали уже проданный товар на складе или полке

Нынче товар ищут на полке не продавцы, а покупатели. А продавцу лучше пробить товар вне зависимости от того, что говорит учётная система. Если на полке нашёлся, значит есть.

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

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

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

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

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

Заплатишь ещё раз за товар. Потом товаровед дооприходует отрицательный остаток.

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

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

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

Можно и на естественном языке (по мотивам COBOL и 文言 編程語言)

Вот такое вполне можно сделать компилируемым:

Это Вывод таблицы умножения.

Пусть Ширина поля равна 8.

Выведи Ширину поля пробелов.
Выведи числа от 1 до 9 с шириной Ширина поля.
Для Множителя от 1 до 9 
  Выведи строку множителя Множитель с шириной Ширина поля.

Когда говорят
  Выведи строку множителя Множитель с шириной Ширина,
делай так:
  Выведи число Множитель с шириной Ширина.
  Для Второго множителя от 1 до 9
    Вычисли {Множитель}*{Второй множитель} в Результат;
    Выведи Результат с шириной Ширина;
    Выведи перевод строки.

Когда говорят
  Выведи Число с шириной Ширина,
делай так:
  Выведи Число в строку Строка числа.
  Вычисли {Ширина}-{длина Строки числа} в Размер отступа.
  Повтори Размер отступа раз Выведи " ".
  Выведи Строку числа.

Переносы и отступы незначащи.

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

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

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

А как же ФП?

опр фиб(ъ):  # для ъ > 0
  коль ъ == 0:
    возвернуто 0
  инаколь ъ == 1 али ъ == 2:
    возвернуто 1
  кольиное:
    возвернуто фиб(ъ-1) + фиб(ъ-2)
herasov
()
Ответ на: комментарий от monk

Ширина Ширину

Претензия была именно к русскому языку из-за флексий. Более аналитические языки, где флексий очень мало, для этого более пригодны. Китайский, кстати, даже больше чем английский.

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

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

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

I'm sitting on a табуретка and drinking чай with печеньки.

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

float square(x) {
  return x*x;
}

printf("X=%g", 42);

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

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

I'm сижу on a табуретка and drinking чай with печеньки

Тут уже структура действий будет понятна только наполовину. Иностранцу нужно будет больше заморачиваться со словарём и кроме того знать что «сижу» это форма «сидеть». Русскоговорящему же не стало сильно лучше, это всё равно суржик.

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

Если уж делать язык на базе русского, то он должен быть синтаксически не совместим с литературным языком. Т.е. построение «фраз» такого языка должно быть радикально другим. Для этого лучше подойдут языки не типа Си, а типа ЛИСПа или ФОРТа. Там даже при русской базе будет очевидно, что это не русский язык и даже не близко. Поэтому и отсутствие флексий не будет восприниматься как проблема, также как это не проблема во фразе «чай with печеньки».

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

Претензия была именно к русскому языку из-за флексий.

Это решаемо. Ну будет у компилятора ещё и таблица склонений.

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

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

Англоговорящий человек. Для русскоговорящего здесь два иностранных языка.

Или надо писать

вещ квадрат(x) {
  возврат x*x;
}

печатьф("X=%g", 42);
monk ★★★★★
() автор топика
Ответ на: комментарий от no-such-file

Если уж делать язык на базе русского, то он должен быть синтаксически не совместим с литературным языком. Т.е. построение «фраз» такого языка должно быть радикально другим. Для этого лучше подойдут языки не типа Си, а типа ЛИСПа или ФОРТа.

Так Адина и есть ЛИСП. Только вместо скобок можно использовать отступы как в sweet expressions и добавлены операторы с приоритетами.

Кстати, в ЛИСПе тоже есть суффиксы как и в Адине: type-of, class-of.

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

Т.е. построение «фраз» такого языка должно быть радикально другим.

Можно просто взять Haskell и перевести Prologue на русский.

main = do
    вывести "Как вас зовут?"
    имя <- получитьСтроку
    вывести ("Привет " ++ имя ++ "!")
monk ★★★★★
() автор топика
Ответ на: комментарий от monk

Только вместо скобок можно использовать отступы

Это ненужное улучшение. Скобки как раз ясно показывают, что это не русский.

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

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

Оно не ложное. Гораздо проще запомнить, что «функция Найти ищет элемент в коллекции», а не что «функция Find ищет элемент в коллекции». Также как

I'm сижу on a табуретка

понятно даже без знания английского языка. Чего не скажешь о

I'm sitting on a табуретка

Тут уже понятно только, что что-то происходит с табуреткой.

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

Оно необязательно.

#!1

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

(= иван (человек "Иван" "Иванович"))
(:= (отчество-человека иван) "Петрович")
(отчество-человека иван)

Компилируется в такой же код.

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

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

Это вообще-то COBOL. В американских банках до сих пор такая рабская ментальность.

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

кольиное

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

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

Чтобы был такой же уровень кошмара, его надо переводить как «инес».

Более скрепно будет слово «аще», ну или хотябы «а если».

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

тоже есть суффиксы как и в Адине: type-of, class-of.

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

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

Можно просто взять Haskell и перевести Prologue на русский

Можно. Даже Си можно, там «литературность» достаточно рудиментарная. А зачем? Повторю, что это будет всё тот же суржик вид сбоку. Только теперь местечковый, а не международный. Остаются все недостатки без каких-либо новых достоинств.

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

Ну суффиксы тогда не нужны.

В лиспе они тоже есть: https://github.com/hu-dwim/hu.dwim.defclass-star/blob/main/test/test.lisp#L95

А если их выбросить то это просто ЛИСП на русском. В чём новизна?

Отступы, операторы, в перспективе прозрачный FFI к Си++. Синтаксический сахар, в общем.

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

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

А у меня в суффиксе родительный падеж. Там где у англичан (name-of John) у меня (имя-человека Иван).

Так-то и в лиспе это закос под литературный английский. В Си, например, никаких «of» не используют.

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

А зачем? Повторю, что это будет всё тот же суржик вид сбоку.

Чтобы не приходилось переводить имена предметной области из задачи на английский. И чтобы не было мешанины из FileList (из стандартной библиотеки) и СписокМонтажныхКрепежей (из задачи).

И чтобы минимизировать количество переключений языка при вводе строки. Вот ты же пишешь Си и ЛИСП, а не C и LISP.

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

Мне не совсем понятно: как язык с семантикой Racket может быть проще в изучении, чем сам Racket?

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

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

Мне не совсем понятно: как язык с семантикой Racket может быть проще в изучении, чем сам Racket?

В Racket:

#!lang racket
(letrec ((is-even? (lambda (n)
                     (or (zero? n)
                         (is-odd? (sub1 n)))))
         (is-odd? (lambda (n)
                    (and (not (zero? n))
                         (is-even? (sub1 n))))))
  (is-odd? 11))

В 1

#!1
пусть ()
  чётное? n =
    ноль? n || нечётное? (n - 1)
  нечётное? n =
    не ноль?(n) && чётное? (n - 1)
  нечётное? 11

Синтаксически блоки эквивалентны, а семантически идентичны, но второй читается намного легче.

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

Уже сделал: https://docs.racket-lang.org/russian-lang/index.html

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