Понятно, не только проект плохой, но и автор тоже так себе. Думаю, на этом можно и закончить, но можешь ещё что-то плохое написать. Где же плохое писать, как не в темах чьих-то проектов?
На самом деле в ЯОС всё совсем не так плохо с переводами. Во-первых, это уже не первая попытка, поэтому многое улучшено по сравнению с предыдущим языком, который теперь называется яр-15. Например, я нашёл в переводе Фёдора Васильевича "аесли", а в первой попытке было "иначесли". Кроме того, произошёл постепенный отказ от идеи сделать всё на «исконной» лексике, и язык был приближен к современному. Хотя кое-что было и утрачено. Например, для яра-15 я придумал специальное слово "структа", чтобы не плодить смыслов к словам "запись" и "структура". В ЯОС это не стал включать, а наверное зря. Наверное, надо сделать, раз уж основная реакция, которую проект вызывает - это раздражение, надо идти в этом до конца. Однако, при случае я не постесняюсь применить и слово, вышедшее из употребления. Я реально думал использовать слово "ряд" для одномерного массива, как в Глаголе. В итоге отказался от этого и тоже в сомнениях. Массивы в Обероне бывают только одномерные, поэтому слово "массив" тут не очень подходит. В Лиспе одномерные массивы называются "вектор" и можно было бы так назвать. Однако я применил слово "массив", чтобы было меньше удивления - видимо, зря старался угодить, всё равно угодить нельзя. Но на самом деле я не так сильно парился в случае ЯОС с терминологией, потому что ключевые слова вовсе не являются основным содержанием инновации в ЯОС, они не должны мешать и быть более-менее сносными, не более того. В-третьих, внедрено повелительное наклонение, которое делает текст короче и смягчает проблему падежей. В яре-15 этого не было.
Придраться можно ко всему, в том числе и к англоязычным вариантам ключевых слов. Там можно точно так же попробовать найти ошибки. Например, слово when в лиспе используется для if без else. Но это годится только до того момента, пока в системе не возникает фактор времени. В системах с правилами и реакциями на события (таких, как G2) выясняется, что слово when более уместно использовать в правилах, а не в условном операторе. Но уже поздно. Пока я с этим не столкнулся, я и не думал об этой проблеме. То же можно с натяжкой сказать и про while.
Когда я делал свой прошлый язык яр-15,
https://tvoygit.ru/budden/jar15, я долго думал, как должно называться слово procedure. В Обероне этой проблемы нет ввиду ограниченных возможностей языка, а в лиспе в одном файле могут быть объявления декларативного характера (какой-то объект должен существовать), объявления процедурного характера (создай прямо сейчас объект с такими-то характеристиками) и просто какие-то действия (напечатай приветствие). Поэтому "определи функцию", "объяви функцию" и "объяви сигнатуру функции" - это три разных действия. Называть это слово "procedure" прокатывает в Обероне, но не прокатывает в лиспе.
В лиспе defun (define function) говорит о том, что мы должны, прочитав это, создать функцию с такой сигнатурой и телом. Хотя и тут есть нюансы - при интерпретации и компиляции произойдёт разное. При интерпретации функция будет создана прямо после прочтения формы. При компиляции это на самом деле объявление функции - сначала прочитается весь файл, а уже потом будут созданы функции, что даёт возможность функциям вызывать друг друга (если я ещё не забыл лисп). А вот как у Алексея Недори в Тривиле:
Код:
фн Факториал(ц: Цел64): Цел64 {
если ц <= 1 { вернуть 1 }
вернуть ц * Факториал(ц - 1)
}
Если его язык компилируемый, можно считать, что это калька с Оберона. Если же там есть интерпретация и мы можем написать это в REPL, то начинать такое со слова фн - вообще говоря, является ошибкой. Правильно было бы написать "создай функцию". Притом, есть языки, в которых так и пишут, например, это PL/SQL и подобные процедурные расширения - там так и пишут, CREATE PROCEDURE. Т.к. язык динамический, это отличается от какого мифического DECLARE PROCEDURE, которое можно было бы использовать для объявления сигнатуры процедуры, которая будет создана позже, например, для взаимно-рекурсивных процедур. Хотя не припомню, чтобы такое было в SQL, зато такое есть в Си и там вообще нет никакого слова - есть условность, что мы должны сами посмотреть на текст и понять, объявление это или определение.
В других же языках ещё хуже - используется слово def, т.е. "определи". А что определи? Можно же не только функцию определить, а и кучу других объектов. Тоже ведь ошибка. Однако всё это можно стерпеть, привыкнуть и пользоваться, что мы все на самом деле и делаем.
Если же мы начнём думать о словах procedure и function в Паскале, то всё становится совсем плохо. По идее функция не должна иметь побочных эффектов, но в Паскале она отличается лишь тем, что возвращает значение. Это уже явный пример, когда терминология неадекватна реальности. И что, кто-то возмущается? Отнюдь.
Данный рассказ показывает, что вопрос с терминологией нельзя решить идеально. Она уже несовершенна и там к куче всего можно придраться. При калькировании Оберона на русский я хотел, чтобы это было понятно в контексте ШАЯ (много ключевых слов взято оттуда, хотя слово алг я не стал брать), чтобы это было понятно вообще в контексте современной русскоязычной ИТ-культуры, и чтобы это было коротко. Это вопрос баланса и компромиссов, а когда принимаются такие решения, ничто идеальным не будет. Поэтому мне на самом деле наплевать на придирки, а существенные ошибки я может быть когда-нибудь исправлю. Будет не суть, а есмь, главное, что это не будет слово "есть", потому что слово "есть" слишком многозначное.