Size: a a a

Конференция C++ Russia

2020 December 24

AV

Alexey Veselovsky in Конференция C++ Russia
Ilya L
перекладывание json это работа...
Лопатой
источник

G

Gabriele in Конференция C++ Russia
magras
Я бы еще не отказался послушать о приемах и концепциях из других языков. Не все можно переложить на С++, но это расширяет кругозор и иногда все равно положительно влияет на плюсовый код. Классический пример - это функциональные языки. Еще пара примеров, которые я могу сходу назвать: горутины и каналы из go, borrow checker из rust.

Рассказ о языках облегчающих формальные доказательства свойств программ тоже было бы интересно послушать. Как работает prolog? Как в erlang'е устроен рантайм что позволяет автоматически перезапускать упавший кусок вычислений? Я думаю у любого программиста есть свой список подобных вопросов на которые он хотел бы знать ответы, но "руки еще не дошли".
есть языки, специально разработанные для формальных доказательств (Haskell, но не только), но в целом вы найдете интересные «model checking» и theorem provers / proof helpers, они для этого предназначены
источник

G

Gabriele in Конференция C++ Russia
TLA+, Coq, HOL (ML), и вообще есть несколько действительно отличных научных статей по теме, написанных Zohar Manna, Amir Pnueli, и другими.
Мне было бы интересно узнать, есть ли в российских университетах активные исследования по этой теме. В конце концов, одним из первых конкретных приложений проверки моделей была правильность попыток освоения космоса, которые часто могут привести к миллионам и миллионам долларов и серьезному ущербу.
источник

G

Gabriele in Конференция C++ Russia
Также в определенной степени быстро растет область "static code analyzers". Несколько итальянских исследователей активно занимались этой темой, один из них создал компанию, которая позже была продана FB.
источник

G

Gabriele in Конференция C++ Russia
источник

G

Gabriele in Конференция C++ Russia
вопрос, который у вас есть о языках, - это скорее практический вопрос, как языки могут быть надежными даже во runtime и т. д. Но все это в конечном итоге  результатом больших прошлых успехов в теории, и особенно в логике
источник

G

Gabriele in Конференция C++ Russia
magras
Продолжая эту логику: перекладывание json не программирование, только чистые алгоритмы и математика могут считаться программированием.
Да кoнечно, это. Но все больше и больше людей делают вид, что это неправда, только чтобы оправдать свое присутствие в индустрии программного обеспечения. Это одна из (огромного количества) причин, почему эта профессиональная область находится в таком быстром росте, но также и в быстром снижении качества написанного программного обеспечения
источник

G

Gabriele in Конференция C++ Russia
Что касается программного обеспечения, стоит отметить, что даже на «простых» языках (C, etc) вы можете писать правильные программы, правильность которых может быть даже математически доказана -- Например микроядро seL4.
Я знал лет назад итальянского ученого (он получил высшее образование в Милане около 20-30 лет назад), который проводил исследования в этой лаборатории в Австралии вместе с Gernot Heiser.
В этой лаборатории они использовали различные инструменты для формальной проверки kernel как «математически правильного» и практически bug-free, а в последнее время они начали использовать собственные инструменты разработчика для дальнейшей специализации своей работы.
источник

G

Gabriele in Конференция C++ Russia
источник

G

Gabriele in Конференция C++ Russia
Насколько мне известно, это единственная formally verified операционная система
источник

G

Gabriele in Конференция C++ Russia
Это не «лабораторная игрушка» - это было, было и будет использоваться во многих случаях, даже в военной технике.
источник

ES

Egor Suvorov in Конференция C++ Russia
magras
Я бы еще не отказался послушать о приемах и концепциях из других языков. Не все можно переложить на С++, но это расширяет кругозор и иногда все равно положительно влияет на плюсовый код. Классический пример - это функциональные языки. Еще пара примеров, которые я могу сходу назвать: горутины и каналы из go, borrow checker из rust.

Рассказ о языках облегчающих формальные доказательства свойств программ тоже было бы интересно послушать. Как работает prolog? Как в erlang'е устроен рантайм что позволяет автоматически перезапускать упавший кусок вычислений? Я думаю у любого программиста есть свой список подобных вопросов на которые он хотел бы знать ответы, но "руки еще не дошли".
Если кратко: Prolog работает хитрым перебором, Erlang просто требует писать программы в определённом стиле с акторами ("процессы") и тогда перезапускаются только процессы. Перезапустить кусок процесса, насколько я знаю, нельзя
источник

AV

Alexey Veselovsky in Конференция C++ Russia
Egor Suvorov
Если кратко: Prolog работает хитрым перебором, Erlang просто требует писать программы в определённом стиле с акторами ("процессы") и тогда перезапускаются только процессы. Перезапустить кусок процесса, насколько я знаю, нельзя
Что такое «кусок процесса»?
источник

ES

Egor Suvorov in Конференция C++ Russia
Gabriele
TLA+, Coq, HOL (ML), и вообще есть несколько действительно отличных научных статей по теме, написанных Zohar Manna, Amir Pnueli, и другими.
Мне было бы интересно узнать, есть ли в российских университетах активные исследования по этой теме. В конце концов, одним из первых конкретных приложений проверки моделей была правильность попыток освоения космоса, которые часто могут привести к миллионам и миллионам долларов и серьезному ущербу.
Да в одном JetBrains Research довольно много:
https://research.jetbrains.org/ru-ru/groups/plt_lab/
https://research.jetbrains.org/ru-ru/groups/vorpal/
https://research.jetbrains.org/ru-ru/groups/group-for-dependent-types-and-hott/

Например, у меня однокурсник в одной из групп там работает, бакалаврский диплом защищал по теме: https://habr.com/ru/company/hsespb/blog/441114/
источник

G

Gabriele in Конференция C++ Russia
спасибо, очень интересно
источник

ES

Egor Suvorov in Конференция C++ Russia
Gabriele
Что касается программного обеспечения, стоит отметить, что даже на «простых» языках (C, etc) вы можете писать правильные программы, правильность которых может быть даже математически доказана -- Например микроядро seL4.
Я знал лет назад итальянского ученого (он получил высшее образование в Милане около 20-30 лет назад), который проводил исследования в этой лаборатории в Австралии вместе с Gernot Heiser.
В этой лаборатории они использовали различные инструменты для формальной проверки kernel как «математически правильного» и практически bug-free, а в последнее время они начали использовать собственные инструменты разработчика для дальнейшей специализации своей работы.
На фразе "простой Си" мне вспомнилась прекрасная https://www.ralfj.de/blog/2020/12/14/provenance.html
источник

ES

Egor Suvorov in Конференция C++ Russia
Alexey Veselovsky
Что такое «кусок процесса»?
Какой-то кусок кода. Erlang не умеет магически восстанавливать программу из ошибочного состояния, надо явно провести границы, какие кусочки можно с каких состояний перезапускать, а между собой они общаются только посылкой сообщений.
источник

G

Gabriele in Конференция C++ Russia
собственно, поэтому я заключил "простой" в кавычки
источник

G

Gabriele in Конференция C++ Russia
C в любом случае является относительно более простым языком, если мы говорим об общей сложности и размере внешних и стандартных библиотек.
источник

G

Gabriele in Конференция C++ Russia
это, кстати, одна из причин, почему современный C++ стимулирует использование стандартной библиотеки, так что эти подверженные ошибкам детали абстрагируются std containers и другими facilities, если вам действительно, действительно не нужно возиться с этими техническими аспектами (для определенных программ)
источник