Size: a a a

Compiler Development

2021 April 27

МБ

Михаил Бахтерев... in Compiler Development
minlog тоже, потому что основана на реализуемости. ACL2 тоже, потому что это аппликативный фрагмент Лиспа. Но, всё равно, не особо и взлетело. Хотя, вроде как, ACL2 используют в индустрии.

Почему это важно для компиляторов? Потому что у нас есть другие логики, которые можно использовать во всяких разных доказательствах свойств на разных стадиях оптимизации кода.
источник

МБ

Михаил Бахтерев... in Compiler Development
Но вот, кстати, у minlog даже может быть преимущество именно для описания вычислительных процедур, потому что это параконсистентная логика, которая не боится рекурсивностей и брадобреев.
источник

AT

Alexander Tchitchigi... in Compiler Development
Я тут смотрел простенькие доказательства на ACL2 -- очень трудно разобраться. И это как раз из-за автоматизации и "заметания под ковёр" пруф-термов. Оказывается, на практике это не так здорово, как кажется. Многим и доказательства тактиками не нравятся, а тут вообще без "опорного конспекта".
источник

МБ

Михаил Бахтерев... in Compiler Development
Ну, в ACL2 и нет proof-термов в обычном понимании. Там есть целевой терм, к которой идут эвристики, и которым надо подсказывать, как идти. Вот кстати, очень похоже на то, что делают оптимизаторы.
источник

KR

K R in Compiler Development
Спасибо. Подтверждает моё наблюдение, что внутри каждого программиста есть свой QC. И количество ошибок в результирующем коде зависит от этого QC.

Соответственно по языкам надо мерить не кол-во ошибок, а время написания с отладкой типичного для предметной области кода на разных языках.
источник

KR

K R in Compiler Development
Там, конечно, будет нелинейная зависимость от объёма.
источник

AT

Alexander Tchitchigi... in Compiler Development
Вот на практике это создаёт проблемы, так ACL2 и не пользуется оглушительной популярностью.

Кроме того, композициональность получается "интересная": при наличии лемм, теорема доказывается, а без них -- нет. Хотя леммы сами по себе доказываются автоматически, то есть ACL2 как бы может вывести всё, что нужно. Но не вместе, а только частями. Размер которых заранее совершенно не понятен.
источник

МБ

Михаил Бахтерев... in Compiler Development
Почему внутренние? Есть всякие тесты, spec-и, fuzzing и т.д. и т.п. Ну, то есть, есть технологии для самых разных языков, которые позволяют повышать качество тем или иным способом. Сложные типы -- одна из технологий. А время и объёмы -- очень индивидуально. Вроде как, пытались такие исследования проводить, но они ничего особого не показывают, кроме того, что есть хорошие и плохие программисты.
источник

KR

K R in Compiler Development
На внешние всегда можно забить. Творческий труд отличается тем, что его часто проще переделать, чем проконтролировать.

Как показывает практика кровавого ынтырпрайза, всё обходится при желании - и типы, и тесты, и рецензии.
источник

МБ

Михаил Бахтерев... in Compiler Development
Зависит от рабочего процесса. Типы, всё равно, не решают всех проблем и тестировать необходимо. Хотя бы по той причине, что сами спецификации могут содержать ошибки. Примеров уйма. Я не отрицаю пользу типов, но одними типами не обойтись.
источник

DF

Dollar Føølish in Compiler Development
Хорошие и плохие программисты ... Кому из них больше нужны типы а кому тесты ?
источник

А

Алексей ayaye :)... in Compiler Development
парное программирование, один хороший, другой плохой
источник

DF

Dollar Føølish in Compiler Development
Один с тестами другой с типами
источник

МБ

Михаил Бахтерев... in Compiler Development
Тесты нужны всем.
источник
2021 April 28

B

Brenoritvrezorkre in Compiler Development
Параконсистентность не про рекурсивность...
источник

B

Brenoritvrezorkre in Compiler Development
Есть определённые исследования того, как бы описать самореферентный язык, в тусовке параконсистентных логиков, но параконсистентность — это просто отсутствие принципа взрыва (и желательно также взрыва негаций), который никак не связан ни с семантическими парадоксами, ни с парадоксами [наивной] теории множеств.
источник

B

Brenoritvrezorkre in Compiler Development
Принцип взрыва — это то, что из противоречия следует любое утверждение
источник

B

Brenoritvrezorkre in Compiler Development
Интуиционистская логика, например, его содержит
источник

B

Brenoritvrezorkre in Compiler Development
А минимальная уже нет
источник

B

Brenoritvrezorkre in Compiler Development
Но минимальная содержит то, что любая негация следует из противоречия
источник