#prog #ocaml #article
Не смотря на то, что исторически property-based testing применялось для тестирования чистых функций, технически ничто не мешает тестировать и функции с некоторыми побочными эффектами. Тем не менее, при переносе этого подхода на компиляторы возникает очевидная проблема: все сколько-нибудь полезные программы обладают побочными эффектами, и языки далеко не всегда определяют порядок вычислений достаточно точно, чтобы предсказать вывод обладающей побочными эффектами фрагмента программы исключительно по исходному коду. Одним из таких языков является OCaml: среди его реализаций есть как те, которые вычисляют порядок аргументов слева направо, так и те, которые вычисляют справа налево. Это делает генерацию исходных программ с целью тестирования несколько затруднительной, поскольку вывод даже корректно скомпилированной программы может зависеть от реализации.
В статье Effect-Driven QickChecking of Compilers авторы решили эту проблему, спроектировав генератор, который создаёт лишь программы, вывод которых не зависит от порядка вычислений. Сделали они это путём введения рудиментарной системы эффектов (попутно доказав её корректность) и архитектуры генератора, позволяющей на ранних этапах генерации отбрасывать альтернативы, которые бы привели к зависимости от конкретного порядка вычислений. Вместе с генератором они также спроектировали минификатор, позволяющий минифицировать программы с сохранением полезного свойства независимости (впрочем, это получилось скорее автоматически ввиду того, что это свойство было закодировано в эффектах, а элементарные операции минификации сохраняли тип).
Генератор получился достаточно ограниченным. Он генерирует только весьма узкое подмножество всех программ (в частности, никакого полиморфизма, ни по типам, не по эффектам), и, в частности, генерирует только программы, которые гарантированно завершаются. Вдобавок, введённая система эффектов отслеживает исключительно сам факт наличия побочного эффекта, но не его конкретную разновидность. Тем не менее, даже такое ограниченный инструмент оказался полезным на практике. Используя реализацию QuickCheck для OCaml для свойства "для любой программы, сгенерированной генератором, вывод этой программы при использовании двух разных компиляторов одинаков", авторы смогли обнаружить четыре новых бага, а также найти два уже ранее известных.
P. S.: единственное, что меня смущает — это лемма об ослаблении контекста типизации в разделе, в котором доказывается корректность системы типов с эффектами:
Не смотря на то, что исторически property-based testing применялось для тестирования чистых функций, технически ничто не мешает тестировать и функции с некоторыми побочными эффектами. Тем не менее, при переносе этого подхода на компиляторы возникает очевидная проблема: все сколько-нибудь полезные программы обладают побочными эффектами, и языки далеко не всегда определяют порядок вычислений достаточно точно, чтобы предсказать вывод обладающей побочными эффектами фрагмента программы исключительно по исходному коду. Одним из таких языков является OCaml: среди его реализаций есть как те, которые вычисляют порядок аргументов слева направо, так и те, которые вычисляют справа налево. Это делает генерацию исходных программ с целью тестирования несколько затруднительной, поскольку вывод даже корректно скомпилированной программы может зависеть от реализации.
В статье Effect-Driven QickChecking of Compilers авторы решили эту проблему, спроектировав генератор, который создаёт лишь программы, вывод которых не зависит от порядка вычислений. Сделали они это путём введения рудиментарной системы эффектов (попутно доказав её корректность) и архитектуры генератора, позволяющей на ранних этапах генерации отбрасывать альтернативы, которые бы привели к зависимости от конкретного порядка вычислений. Вместе с генератором они также спроектировали минификатор, позволяющий минифицировать программы с сохранением полезного свойства независимости (впрочем, это получилось скорее автоматически ввиду того, что это свойство было закодировано в эффектах, а элементарные операции минификации сохраняли тип).
Генератор получился достаточно ограниченным. Он генерирует только весьма узкое подмножество всех программ (в частности, никакого полиморфизма, ни по типам, не по эффектам), и, в частности, генерирует только программы, которые гарантированно завершаются. Вдобавок, введённая система эффектов отслеживает исключительно сам факт наличия побочного эффекта, но не его конкретную разновидность. Тем не менее, даже такое ограниченный инструмент оказался полезным на практике. Используя реализацию QuickCheck для OCaml для свойства "для любой программы, сгенерированной генератором, вывод этой программы при использовании двух разных компиляторов одинаков", авторы смогли обнаружить четыре новых бага, а также найти два уже ранее известных.
P. S.: единственное, что меня смущает — это лемма об ослаблении контекста типизации в разделе, в котором доказывается корректность системы типов с эффектами:
If
∆;Γ,(x : τ′),Γ′ ⊢ e : τ & φ and τ′′ ⊑ τ′
then
∆;Γ,(x : τ′′),Γ′ ⊢ e : τ & φ
или, если словами, произвольный тип внутри контекста типизации можно заменить на тип с более слабым эффектом. Лично мне это не кажется очевидным от слова совсем.Forwarded from Аниме-блог | Cheetamaru
Метка подсчёта — иероглиф 正
Когда нужно посчитать на бумаге, сколько раз случилось какое-либо событие, мы обычно используем четыре вертикальные палочки и одну их перекрывающую — такой полный рисунок означает «5 штук».
Этот символ распространён практически во всех Европейских странах и в Америке.
Но в странах, где используются китайские иероглифы, функцию метки подсчёта выполняет иероглиф 正. Его значение — «правильный, справедливый», но в контексте подсчёта значение не важно. Важно, что он пишется пятью строками.
Поэтому в аниме, когда персонажи хотят подсчитать, например, сколько человек проголосует за тот или иной вариант проведения школьного фестиваля, на школьной доске можно увидеть иероглифы 正.
#JapanFact
Когда нужно посчитать на бумаге, сколько раз случилось какое-либо событие, мы обычно используем четыре вертикальные палочки и одну их перекрывающую — такой полный рисунок означает «5 штук».
Этот символ распространён практически во всех Европейских странах и в Америке.
Но в странах, где используются китайские иероглифы, функцию метки подсчёта выполняет иероглиф 正. Его значение — «правильный, справедливый», но в контексте подсчёта значение не важно. Важно, что он пишется пятью строками.
Поэтому в аниме, когда персонажи хотят подсчитать, например, сколько человек проголосует за тот или иной вариант проведения школьного фестиваля, на школьной доске можно увидеть иероглифы 正.
#JapanFact
Аниме-блог | Cheetamaru
Метка подсчёта — иероглиф 正 Когда нужно посчитать на бумаге, сколько раз случилось какое-либо событие, мы обычно используем четыре вертикальные палочки и одну их перекрывающую — такой полный рисунок означает «5 штук». Этот символ распространён практически…
И ведь не сказать, что это какая-то неразумная вещь: в отличие от перечеркнутых палочек, фигура после учёта каждого предмета выглядит заметно иначе, чем после учёта других, так что так куда сложнее перепутать, скажем, "3" и "4"
— А давайте-ка я возьму мятных конфеток, — подумал я.
— А давайте, — сказала маска и стала перенаправлять выдохи, наполненные ментолом, прямо в глаза.
Ай :(
— А давайте, — сказала маска и стала перенаправлять выдохи, наполненные ментолом, прямо в глаза.
Ай :(
Forwarded from Технологический Болт Генона
Среда это маленькая пятница и остановиться я не мог 🌝
В ИИ не верил до конца, поэтому некоторых переименовал слегка.
@nosingularity
@sysadmin_tools
@oleg_log (Олег прости, букву "а" забыл)
@aws_notes
@count0_digest
@SysadminNotes
@bykvaadm
@dereference_pointer_there
@k8security
Хайрезы в комменты скину.
В ИИ не верил до конца, поэтому некоторых переименовал слегка.
@nosingularity
@sysadmin_tools
@oleg_log (Олег прости, букву "а" забыл)
@aws_notes
@count0_digest
@SysadminNotes
@bykvaadm
@dereference_pointer_there
@k8security
Хайрезы в комменты скину.
Forwarded from мне не нравится реальность
Ну как не поделиться статьёй, которая говорит что раст лучше плюсов, правильно?
C++ Move Semantics Considered Harmful (Rust is better)
В этой статье автор рассказывает про то, как и почему реализован мув в C++, сравнивает это с устройством Rust. Статья будет интересна как для тех кто не знаком с C++, так и для тех кто знаком (наверное). Рекомендую в общем :)
C++ Move Semantics Considered Harmful (Rust is better)
В этой статье автор рассказывает про то, как и почему реализован мув в C++, сравнивает это с устройством Rust. Статья будет интересна как для тех кто не знаком с C++, так и для тех кто знаком (наверное). Рекомендую в общем :)
Forwarded from мне не нравится реальность
Nightly
rustdoc
теперь может автоматически показывать примеры из examples/*
в документации функций, которые там используется. Твит от автора фичи: <twitter:wcrichton>Twitter
Will Crichton
1 year, 1 RFC, and 1k LOC later... it's finally here! Rustdoc can now automatically scrape code examples from your workspace's examples/ directory as documentation for functions. Check out a live demo: willcrichton.net/example-analyz…
Forwarded from You Had No Job
Нам необходимы:
* Потупить в курилке
* Громко говорить, чтобы остальные в опенспейсе ничего не слышали
* Пятничный душ в уютном кругу коллег
* Кикер, в который никто не играет
Желание работать будет плюсом
* Потупить в курилке
* Громко говорить, чтобы остальные в опенспейсе ничего не слышали
* Пятничный душ в уютном кругу коллег
* Кикер, в который никто не играет
Желание работать будет плюсом
Forwarded from ruDALL-E Malevich (XL)
Фото сгенерировано моделью ruDALL-E от Сбера по запросу "Вафелька"
#rust
Одна из вещей, которая мне нравится в Rust — это совершенно замечательные диагностические сообщения.
t.iss.one/ihatereality/2516
t.iss.one/ihatereality/2517
Одна из вещей, которая мне нравится в Rust — это совершенно замечательные диагностические сообщения.
t.iss.one/ihatereality/2516
t.iss.one/ihatereality/2517
Telegram
Мне не нравится реальность
Каждый раз, когда кто-то улучшает сообщения об ошибках rustc так тепло на душе становится
Add beginner friendly lifetime elision hint to E0623
Add beginner friendly lifetime elision hint to E0623