Pull to refresh
158
157.9
Александр Рябиков@rsashka

Системный архитектор

Send message

Измерение синтаксиса и изменение парадигмы, это не одно и тоже.

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

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

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

Китайская комната — это совсем не про то. Машина Тьюринга теоретически может эмулировать головной мозг человека во всех деталях, и тогда там будет сознание.

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

Любой алгоритм может считаться ошибочным только применительно к конкретной задаче ...

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

А так да, именно человек должен ограничивать допустимость реализации тех или иных алгоритмов. И вы правы, что новый язык не нужен. Можно взять уже существующий полный по Тьюрингу (например С++), и сделать для него анализатор кода, реализующий те или иные ограничения.

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

Причем самое смешное, да, так как этот язык не допускает ошибок :-)

Зачем мне "свои определения", когда достаточно уже имеющихся.

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

Безопасность памяти, это только одна из граней безопасной разработки и дело не только в ней.

Зачем вы коммерческую тайну приплетаете? У вас в статье вообще нет примеров по коммерческой тайте, только налоговая + дополнительные обстоятельства.

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

Спасибо, хорошие замечания.

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

Про высокопроизводительные программы с RAII сказать ничего не могу. Все дело в реализации алгоритма. Подозреваю, что в этом случае можно реализовать алгоритм, которые очищает память объектов только при завершении работы (аналогично, как это делается для пула потоков).

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

Большинство этих UB успешно ловится анализатором во время компиляции (ссылку я давал чуть выше)

Я бы и сам купил :-)
Но к сожалению это генерация картинки по описательному промпту

есть мануал для ада как писать безопасный код

https://habr.com/ru/articles/469671/
https://dwheeler.com/steelman/steelman.htm
Спасибо!
Это действительно максимально близко к тому, о чем идет речь.

надо было почитать мануал для ада

Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами Ады, нужно воспринимать в контексте особенностей выбранной предметной области

Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемость текстов программ, даже в ущерб лёгкости написания[7]. Результатом такого подхода стал несколько «тяжеловесный» синтаксис и множество ограничений, отсутствующих в наиболее распространённых языках общего назначения (таких как Си и C++), например, та же строгая типизация. Это привело к формированию представления об Аде как о сложном, малопонятном и неудобном в использовании языке[8].

Эта библиотека - только пример реализации описанного в статье подхода на С++ (доказательство реализуемости идеи с помощью использования плагина для компилятора), но пока она не является завершенной концепцией безопасной разработки.

Information

Rating
34-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Инженер встраиваемых систем, Архитектор программного обеспечения
Ведущий
C++
ООП
Linux
Программирование микроконтроллеров
Встраиваемая система
C
Qt
Разработка программного обеспечения