О безопасности языков программирования

Научно-технические вопросы применения русского языка в программировании. Проекты с сайта программирование-по-русски.рф, кроме ЯОС . Информация об организациях и людях, использующих или изучающих русский язык в программировании. Сравнение операционных систем.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 06.01.21 21:38

Очено коротко ещё по техническим пунктам. Обнуление должно быть умолчанием, но если скорость этого требует, то можно делать как-нибудь

Код: Выделить всё

перем данные = МУСОР : ряд 10050 из литера8
Т.е. отсутствие обнуления явно указывается инициализатором. Также я всё же писал о факторах надёжности языков. А понятно, что если мы одно лечим, то другое калечим. Надёжность чего-то стоит.

То же и про сборку мусора - она увеличивает надёжность, D не взлетел, но ява, дотнет, го, Ruby, PHP, Python уж точно взлетели. Лисп как взлетел, так по сей день и летит - ведь EMACS на нём написан, да и в PostgreSQL, и в gcc в родословной лисп тоже прослеживается. Также ocaml, haskell и ещё куча всего.

Универсальный указатель - да, это проблема надёжности. Как раз для того, чтобы было безопаснее, и создаются ЯП со строгой типизацией. void * нужен по той причине, что выразительность Си недостаточна. В С++ с этим получше.

> Т.е., контейнеры массивов запихнули в парадигму языка, лишив программиста права на свободное приведение типа этого указателя
Это совершенно нормально. В Обероне есть адресная арифметика, которая помечается необходимостью импорта в таком модуле псевдомодуля SYSTEM (НИЗКОУР). Как правило, нужны массивы, а адресная арифметика - лишь иногда. В Си нет массивов, а только адресная арифметика. В Си люди вынуждены пользоваться опасным ввиду отсутствия безопасного.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 06.01.21 21:45

Если мы делаем систему для кибербезопасности, то мы должны иметь доверенный компилятор. Компилятор в A2 есть, он содержит примерно 3,5 Мб исходников - это для ARM и AMD. Конечно, он не доверенный, т.к. его нужно для этого очень долго проверять. Но объём кода умеренный, сам язык достаточно простой. Оптимизаций в компиляторе почти никаких нет. Т.е., если взяться за эту работу, то цель получения довереннго компилятора выглядит более-менее достижимой. А как мы получим доверенный компилятор в случае Си/Си++? И доверенный компилятор ЧЕГО нам понадобится? Мы же не будем брать Си/Си++ как он есть - его захочется починить, выкинуть то, что в нём явно кривое, отжившее. Си, понятное дело, не даёт достаточной производительности труда при разработке. Тогда мы окажемся между несколькими стульями, т.к. нам придётся решать, какие приложения не смогут быть скомпилированы нашим компилятором ввиду недостаточности реализаций возможностей языка. Мы втянемся в мучительный поиск компромиссов. Дальше, доверенный компилятор должен быть простым, т.е. наш компилятор будет генерировать очень плохой код по сравнению с gcc. И получится, что язык у нас кудрявый, а производительность кода при этом не особо. Если же мы попробуем реализовать полный современный Си++, то это куча лишней работы, ведь C++ не чистился от мусора, а накопил весь "холестерин" за всю историю компьютерной техники. В принципе сделать компилятор С++ - это огромная задача, а уж доверенный - и подавно.

Аватара пользователя
КротОзёр
Сообщения: 54
Зарегистрирован: 05.01.21 02:16

Re: О безопасности языков программирования

Сообщение КротОзёр » 06.01.21 21:55

БудДен писал(а):
06.01.21 20:14
Это, так скажем, организационная сторона вопроса. По сути дела, обнуление имеет свою стоимость. Я считаю, что сейчас ключевая проблема России - это отсутствие киберзащищённости, т.е. способность противника перехватить управление нашей инфраструктурой и вести разведку с помощью тотального прослушивания всех коммуникаций и биг даты. Учитывая безалаберность населения, это реально страшно. Умрём ли мы, если у нас будет своя инфраструктура, но с обнулением? Или пусть она будет без обнуления, на 20% быстрее, но решето? Я однозначно выбираю обнуление.
В общем-то, C/C++ — одна из причин, почему сейчас работаю на "оборонке", хотя дела в ней в целом идут откровенно паршиво. И язык тут ни при чём. По предпочтениям, я скорее создал бы форк этого стека языков в русском варианте с некоторыми вкраплениями из разных языков. Но решать вопрос безопасности выбором языка — довольно странный метод. Это — как повышать проходимость автомобиля, меняя всю его электропроводку.

Сама тематика форума куда обширнее вопроса выбора языка программирования. А по-хорошему, тянет на целый портал. Потому не стоит ограничиваться только этим. У каждого может быть свой проект, тяготеющий к применению русского языка. Я не вижу никаких причин, почему нельзя этого делать на C/C++.

Вопрос же киберзащищённости я решаю своими методами, не меняя языка.

А что касается "обнуления", если не понимать под этим политическую тему, то в своём коде я это применяю чуть более, чем регулярно. Конструктор обнуляет переменные, причём даже в структурах, деструктор делает это по завершению. Исключением являются рекурсивные процессы, где происходит полная подмена значений переменных — там никакое обнуление не нужно от слова "совсем".

Но, ведь, на всё же есть другая точка зрения?
Не обязательно отталкиваться от бинарной логики вроде:
  • "Ты с нами или против нас?";
  • "Ты за частную собственность на средства производства или против?";
На мой взгляд, не нужно делать обнуления, как обязательной процедуры.
Достаточно учитывать это в компиляторе:
  • Если до чтения переменной она не была инициализирована — инициализировать.
  • Если ситуация не предсказуема (преобразование указателя) — инициализировать.
  • Если первая процедура — запись, то — не инициализировать.
Неужели это не логичнее, чем менять язык?
Опять же упомяну: я никого не заставляю менять предпочтения — они на то и предпочтения.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 06.01.21 22:09

Ну, моя программа-максимум была - втянуть Вас в ЯОС, т.к. это самый содержательный проект из всего куста. Но можно искать и другие точки взаимодействия. В общем-то моё "предисловие" включает в себя и критику C/C++ в том числе. Эти языки слишком популярны в нашей военке, причём не в каком-то идеализированном виде, а в том, в каком они есть на практике. Я считаю, что это просто беда. Учитывая, что мы отстаём, мы не можем позволить себе такую низкую производительность труда. Если, допустим, мы подписываемся под этим "предисловием" вместе, то придётся менять текст. Ну т.е. нужно как-то обрабатывать имеющиеся расхождения. Пока что можно зафиксировать, что они есть.

Из проектов в рамках Си/Си++ я могу себе представить такой: взять какую-нибудь маленькую RTOS и перевести её на русский. Но при этом неплохо, чтобы план деятельность включал понимание того, откуда возьмётся доверенный компилятор для такой ОС.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 06.01.21 22:22

Но в общем-то, изначальная цель была получить от Вас отзыв на "манифест-предисловие" с целью его улучшения. Просто я некоторые замечания приму, а по некоторым мнения разошлись - это норм. Если будете иногда заходить на форум и участвовать в обсуждениях - уже будет здорово. А видение проектов может сформироваться за длительное время. Есть вообще такое направление, как внедрение РЯ в существующие проекты. Я вот на работе пытаюсь это слегка делать, и у меня есть трения с коллегами. Поскольку мне платят не за это, то я более-менее настаиваю лишь на том, чтобы имена веток в гите назывались по русски, и сообщения коммитов тоже. И то это не все выполняют. Некоторые прямо говорят, что скорее уволятся, чем будут делать что-то из того, что я хочу.

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

Re: О безопасности языков программирования

Сообщение MihalNik » 06.01.21 23:40

КротОзёр писал(а):
06.01.21 21:30
Assembler, C, C++ (как с Qt, так и без), немного C#, немного Java, GW-Basic/QBasic/TBasic, немного VBA, немного 1C, TPascal-5/7, Object Pascal, SQL, PHP, JavaScript, TypeScrypt, немного Perl, немного Lisp, немного Prolog+Erlang.
В итоге остановился на C/C++. С ними работать в целом удобнее.
Это бессмысленно вне контекста задач. Писать/переделывать компиляторы С/++ явно не удобнее.
Но когда устраивают С/++ или другие какие-то готовые решения то и переделывать компиляторы не надо.
Следует все-таки отличать удобство наличия кучи библиотек от собственных вполне измеримых свойств языка.

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

Аватара пользователя
КротОзёр
Сообщения: 54
Зарегистрирован: 05.01.21 02:16

Re: О безопасности языков программирования

Сообщение КротОзёр » 07.01.21 00:24

БудДен писал(а):
06.01.21 22:09
Ну, моя программа-максимум была - втянуть Вас в ЯОС, т.к. это самый содержательный проект из всего куста. Но можно искать и другие точки взаимодействия.
В сфере русификации отечественного IT слишком много нерешённых проблем. Очень многое касается тех же рабочих сред и их приложений, а всё это написано на разных языках. Кстати, те же скриптовые интерпретируемые ЯП всё равно потребуются для системно-административных целей. Но проблема куда шире. Она затрагивает даже сферу ВЕБ-программирования, где наметился было позитивный сдвиг, но так и застрял на пол пути. А там применение виртуальных машин и адаптированных к ним ЯП является вполне очевидным решением.
БудДен писал(а):
06.01.21 22:09
В общем-то моё "предисловие" включает в себя и критику C/C++ в том числе. Эти языки слишком популярны в нашей военке, причём не в каком-то идеализированном виде, а в том, в каком они есть на практике. Я считаю, что это просто беда.
Языки C/C++ и близко не идеальны. При разработке русского форка я не стал бы их переносить в своём исходном виде. Совсем иной разговор, что среди новых языков практически ничего не вызывает энтузиазма. В таких языках, как GoLang, Rust я вижу лишь деградацию.
БудДен писал(а):
06.01.21 22:09
Учитывая, что мы отстаём, мы не можем позволить себе такую низкую производительность труда.
Производительность труда зависит не от языков. Среди существующих на рынке проектов ПО слишком много продуктов, написанных без какой-либо оптимизации архитектуры и с повторением уже разработанного кода. Можно сказать, половина мирового IT больше не умеет применять абстракции. А появление "контейнеров" и пакетных форматов "контейнерного" типа явным образом указывает на плачевное состояние дел.
БудДен писал(а):
06.01.21 22:09
Из проектов в рамках Си/Си++ я могу себе представить такой: взять какую-нибудь маленькую RTOS и перевести её на русский. Но при этом неплохо, чтобы план деятельность включал понимание того, откуда возьмётся доверенный компилятор для такой ОС.
FreeRTOS хорошо годится на эту роль. У неё достаточно красивый и аккуратный код. Есть так же системное окружение для "встраиваемых" платформ, BusyBox. Её преимущество — очень малоразмерное, компактное исполнение, повторяющее весь базовый набор POSIX-окружения. С неё удобно начинать полную перекройку философии окружения с выработкой своего стандарта и набора команд.
БудДен писал(а):
06.01.21 22:22
Есть вообще такое направление, как внедрение РЯ в существующие проекты. Я вот на работе пытаюсь это слегка делать, и у меня есть трения с коллегами. Поскольку мне платят не за это, то я более-менее настаиваю лишь на том, чтобы имена веток в гите назывались по русски, и сообщения коммитов тоже. И то это не все выполняют. Некоторые прямо говорят, что скорее уволятся, чем будут делать что-то из того, что я хочу.
А чего Вы ожидали? Программисты — тоже потребители, им свойственен свой эгоизм. Лучше не злите их сильно, а то руководству придётся принимать непопулярные меры. Сама идея РЯ в программировании уже вводит планку сегрегации.
MihalNik писал(а):
06.01.21 23:40
Это бессмысленно вне контекста задач. Писать/переделывать компиляторы С/++ явно не удобнее.
Но когда устраивают С/++ или другие какие-то готовые решения то и переделывать компиляторы не надо.
Следует все-таки отличать удобство наличия кучи библиотек от собственных вполне измеримых свойств языка.
К сожалению, это тоже напрашивается. Главный бардак, он не в языке, а в тех самых библиотеках.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 08.01.21 11:44

Вот есть цитатка из MISRA C 1998 года, где написано, что язык Си плохо подходит для систем с высокими требованиями к безопасности и что лучше использовать вместо него Аду или Модулу 2. И это не наше дилетантское или частное мнение, а мнение консорциума, в который входят автомобилестроители, американские НИИ (во всяком случае, один НИИ там точно есть) и производители электроники. Эта цитатка даже была в некоторых версиях "предисловия", но не удержалась при оптимизации по размеру.

Т.е. это, в общем-то, мнение клиента, а клиент всегда прав. Сейчас получилось так, что новые языки всех съели и образовалась монополия. В новых версиях MISRA C этой цитатки, как говорят, уже нет. Но это уже нерыночный фактор. Если мы в России следуем путём догоняющего развития, то наша сила в том, что мы можем учиться на чужих ошибках. Но поскольку в голове карго-культ, то способность учиться на чужих ошибках утрачена. Модула-2 и Ада в принципе никуда не делись, в Аде есть интересные технологии по формальной верификации, такие, как spark. Модула-2 по сей день летает в космосе на Глонассе. Т.е. бери и пользуйся, необязательно жрать кактус.

Я прошу прощения за педалирование этой темы, просто у меня продолжается переписка про Embox, я на него посмотрел и очень разозлился. В целом-то пора давно успокоиться :) При этом я вспомнил этот аргумент. Это хороший аргумент, я его не сразу нашёл. Поэтому он должен прозвучать.

Теперь очевидно, надо найти Misra C++ и почитать, как там его ругают.

Аватара пользователя
КротОзёр
Сообщения: 54
Зарегистрирован: 05.01.21 02:16

Re: О безопасности языков программирования

Сообщение КротОзёр » 08.01.21 17:29

А что делать, если ни Ада, ни Модула не по нраву? Даже признание проблем Си проблему-то не решает. Это — как с тем же Питоном: он либо нравится, либо бесит. Не могу понять, чем же вариант разработки другого языка на основе Си плох? Можно учесть ошибки и не нарываться на них.

Аватара пользователя
Лис [Вежливый]
Сообщения: 561
Зарегистрирован: 08.10.18 13:32

Re: О безопасности языков программирования

Сообщение Лис [Вежливый] » 08.01.21 17:31

«чем же вариант разработки другого языка на основе Си плох?»

не ясно, что означает слово "основа" в этом предложении. Если же разрабатывать транслятор другого языка, программируя на языке C, то недостаток такой разработки в том, что надо учить английский язык. Билл Гейтс в разработке рекомендовал ограничиваться единственным языком - родным.
Последний раз редактировалось Лис [Вежливый] 08.01.21 18:20, всего редактировалось 1 раз.

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

Re: О безопасности языков программирования

Сообщение MihalNik » 08.01.21 17:57

КротОзёр писал(а):
08.01.21 17:29
Можно учесть ошибки и не нарываться на них.
Только глагол "учесть" совершенного вида, а "нарываться" - несовершенного.
Постоянно что-то учитывать - это не учесть.
КротОзёр писал(а):
08.01.21 17:29
чем же вариант разработки другого языка на основе Си плох?
Тем, что изначально совершенно не ясно о чем идет речь:
1. Язык транспилируется в си-код?
2. Язык изначально пишется си-кодом?
3. Язык расширяет и поддерживает си-код?
4. Язык содержит какие-то синтаксические конструкции или концепции языка Си?

Так-то есть и реализации Оберона на основе Си.
Поменять синтаксис и вовсе несколько сотен строк кода.

Аватара пользователя
КротОзёр
Сообщения: 54
Зарегистрирован: 05.01.21 02:16

Re: О безопасности языков программирования

Сообщение КротОзёр » 08.01.21 20:13

Лис [Вежливый] писал(а):
08.01.21 17:31
«чем же вариант разработки другого языка на основе Си плох?»

не ясно, что означает слово "основа" в этом предложении. Если же разрабатывать транслятор другого языка, программируя на языке C, то недостаток такой разработки в том, что надо учить английский язык. Билл Гейтс в разработке рекомендовал ограничиваться единственным языком - родным.
Основа — это базовые положения языка программирования, а не лексические конструкции.
Его парадигма, синтаксис, правила обработки прекомпилятором.
Естественно не влоб копировать, а лишь лучшее, избавляясь от худшего.
MihalNik писал(а):
08.01.21 17:57
КротОзёр писал(а):
08.01.21 17:29
чем же вариант разработки другого языка на основе Си плох?
Тем, что изначально совершенно не ясно о чем идет речь:
1. Язык транспилируется в си-код?
2. Язык изначально пишется си-кодом?
3. Язык расширяет и поддерживает си-код?
4. Язык содержит какие-то синтаксические конструкции или концепции языка Си?

Так-то есть и реализации Оберона на основе Си.
Поменять синтаксис и вовсе несколько сотен строк кода.
Нет, обратная совместимость тут ни к чему, так что вариант 4.
У языков C/C++ в их текущем варианте очень много недостатков, от которых было бы неплохо избавиться.
А если сразу разрабатывать ЯП русским, так и вовсе нет смысла ограничиваться.

Как пример "оторванного" варианта:

Код: Выделить всё

включить <консоль>;
включить процесс;

применять пространство консоль;
применять класс процесс;

цел 8 начало()
{
    авто арг-ты = программа::аргументы;
    
    // Первый аргумент.
    если(арг-ты.нет(0))
        вывод << "Требуется хотя бы один аргумент!" << вк;;
        возврат 1;
    
    // Разные варианты аргумента.
    выбор(арг-ты[0])
    {
        "запуск"     : если(запущен) останов;; запуск;
        "останов"    : если(запущен) останов;
        по умолчанию : вывод << `Неопознанная команда "арг-ты[0]"!` << вк;; возврат 1;
    }
    
    возврат ожидание;
}
Тут, если присмотреться, сразу куча отличий от C++.

MihalNik
Сообщения: 244
Зарегистрирован: 05.11.18 11:02

Re: О безопасности языков программирования

Сообщение MihalNik » 08.01.21 23:02

КротОзёр писал(а):
08.01.21 20:13
обратная совместимость тут ни к чему, так что вариант 4.
У языков C/C++ в их текущем варианте очень много недостатков, от которых было бы неплохо избавиться.
Тут нужен конкретный перечень проблем, а не оторванные примеры синтаксиса.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: О безопасности языков программирования

Сообщение БудДен » 08.01.21 23:29

КротОзёр писал(а):
08.01.21 17:29
А что делать, если ни Ада, ни Модула не по нраву? Даже признание проблем Си проблему-то не решает. Это — как с тем же Питоном: он либо нравится, либо бесит. Не могу понять, чем же вариант разработки другого языка на основе Си плох? Можно учесть ошибки и не нарываться на них.
К языку можно привыкнуть. Даже к КЛЮЧЕВЫМ СЛОВАМ КАПСОМ можно привыкнуть, как оказалось. Хотя я при переводе их заменил на мелкие. Если речь идёт о транспиляции, то делать язык на основе Си - это значит резко усложнить стек технологии, в т.ч. снизится комфорт в процессе разработки, надёжность и затруднится отладка. Если о чём-то другом - то нужно конкретизировать, что именно имеется в виду.

Ответить