Автор Тема: Oberon-07/13: заметки  (Прочитано 22521 раз)

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #165 : Октябрь 24, 2016, 09:43:36 pm »
Исходя из такого понимания, можно сказать, что абзац не устарел, так как в нём не навязывается ни Модула ни Ада, а просто приводятся как пример более удачных языков для надёжных программ, к тому же с оговоркой на их доступность для используемой платформы. Отсутствие специалистов по языку можно рассматривать как недоступность языка.
Сечас абзац можно было бы освежить примерами новых языков, например, Rust.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3010
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #166 : Октябрь 24, 2016, 10:06:18 pm »
Исходя из такого понимания, можно сказать, что абзац не устарел, так как в нём не навязывается ни Модула ни Ада, а просто приводятся как пример более удачных языков для надёжных программ, к тому же с оговоркой на их доступность для используемой платформы. Отсутствие специалистов по языку можно рассматривать как недоступность языка.
Сечас абзац можно было бы освежить примерами новых языков, например, Rust.

Нельзя. Rust для подобных систем сейчас менее безопасный чем Си, но в среднем более безопасный для ширпотребсофта.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #167 : Октябрь 24, 2016, 10:36:41 pm »
Почему? Пока не сталкивался с таким мнением, так что интересно.

Могу привести пример:
Си со своим беззнаковым sizeof провоцирует использование беззнаковых целых, повышая вероятность переполнения из-за близости нижней границы, которое даже не может вызвать прерывания, так как в стандарте чётко прописано "корректное" поведение. Для Ржавого всё лучше в это плане, и не только. Впрочем, я не имел возможности его использовать широко, могу чего не знать.
« Последнее редактирование: Октябрь 24, 2016, 10:42:00 pm от kkkk »

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3010
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #168 : Октябрь 24, 2016, 11:26:59 pm »
Почему? Пока не сталкивался с таким мнением, так что интересно.

Могу привести пример:
Си со своим беззнаковым sizeof провоцирует использование беззнаковых целых, повышая вероятность переполнения из-за близости нижней границы, которое даже не может вызвать прерывания, так как в стандарте чётко прописано "корректное" поведение. Для Ржавого всё лучше в это плане, и не только. Впрочем, я не имел возможности его использовать широко, могу чего не знать.

Ну, моё мнение довольно скучное тут и занудное: всё просто, у Rust сырой компилятор, сырой рантайм, сырые либы и полное отсутствие инструментария для анализа кода.

В системах где актуальна MISRA там голым компилятором (пусть и полностью соответствующим стандарту) никто не ограничивается. Для любого языка. Вокруг этого строится целая система по повышению надежности кода. Делается специальный инструментарий для анализа кода, по верификации кода и так далее. Для той же Ады специально для нужд построения таких тулзовин был изобретен ASIS ( https://en.wikipedia.org/wiki/Ada_Semantic_Interface_Specification ). Всё это делается не один год и не один десяток лет, всё это потом еще и сертифицируется. И нарабатываются методологии как этим всем пользоваться, как обучать людей и так далее.

Далее - например даже в фитнес-приложениях по хорошему нельзя использовать стоковый GCC. Собственно на нем даже написано: "There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." Компилятор должен пройти сертификацию. Поэтому, кстати, даже писатели на Си и С++ как только им действительно нужна надежность, ибо мишн критикал система, они таки покупают у AdaCore ихний GNAT (да, туда входит и C/C++ компилятор на базе того же GCC, только вот он уже верифицирован, сертифицирован и есть гарантии надежности кодогенерации).

У Rust ничего подобного даже близко нет.

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

Ну а в мишн критикал системах выбор именно языка вносит не самый большой вклад в надежность всей системы, намного важнее процессы, методологии и инструментарий вокруг, коллектив (в том числе доступность специалистов - если у вас 100 специалистов желающих писать на языке X и 1000000 специалистов желающих писать на языке Y, то при прочих равных для языка Y вы (если не поскупитесь) сможете набрать 10 специалистов более высокого уровня чем для языка X - кстати, то же работает и в плане бенчмарков ЯП. Чем больше программистов, тем больше шанс что хоть кто-то сможет запостить решение которое будет работать реально быстро. Естественный отбор.). В конце концов марсоходы запрограммированы на С++, и отлично бегают. Мишн критикал как он есть.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #169 : Октябрь 25, 2016, 11:15:55 am »
Поскольку речь идёт о сравнении с Си, то всё не совсем так по многим пунктам.

У Rust достаточно зрелый frontend, а backend, в котором и сосредоточен наибольший потенциал для проблем - это ещё более зрелый LLVM. В то же время компиляторы Си для микроконтроллеров, даже сделанными на основе GCC, часто грешат ошибками, но их всё равно задействуют в серьёзных вещах, например, для контроля Li-ion аккумулятора, который вообще-то и загореться может.

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

Отсутствие статического анализа - это плохо, но немалая часть вещей, которые в Си находятся статическим анализом в Расте решены на уровне языка и компилятора. Heartbleed не был выявлен ни одним статическим анализатором, а вызван он был, насколько мне известно, переполнением буфера. Комментарий от одного из создателей статического анализатора - http://www.opennet.ru/openforum/vsluhforumID3/109478.html#10.

Системы автоматического доказательства корректности - это тяжёлая артилерия и применяется редко. Для Си его использование изрядно подпорчено наличием в языке препроцессора.

MISRA C, с одной стороны, давно вышла за рамки mission critical, так как является авторитетным сборником здравого смысла, и с исключениями некоторых правил используется весьма широко, с другой стороны, далеко не всегда MISRA C применяется в полной мере там, где это нужно.

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1949
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon-07/13: заметки
« Ответ #170 : Октябрь 31, 2016, 05:41:09 am »
Надо таки попробовать этот Rust, хоть его название и смущает немного, ну да ладно. В конце концов, в нём есть АлгТД как в окамле или хаскелле.
Да, но синтаксис у него даже хуже, чем у окамля ((
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…