#prog #rust #article
Fuzzing the Rust Typechecker Using CLP
И сразу существенная ложка дёгтя: статья из 2015 года, а потому разбирается с Rust 1.0-alpha. Тем не менее, читать интересно из-за общего похода.
Language fuzzing is a bug-finding technique for testing compilers and interpreters; its effectiveness depends upon the ability to automatically generate valid programs in the language under test. Despite the proven success of language fuzzing, there is a severe lack of tool support for fuzzing statically-typed languages with advanced type systems because existing fuzzing techniques cannot effectively and automatically generate well-typed programs that use sophisticated types. In this work we describe how to automatically generate well-typed programs that use sophisticated type systems by phrasing the problem of well-typed program generation in terms of Constraint Logic Programming (CLP). In addition, we describe how to specifically target the typechecker implementation for testing, unlike all existing work which ignores the typechecker. We focus on typechecker precision bugs, soundness bugs, and consistency bugs. We apply our techniques to Rust, a complex, industrial-strength language with a sophisticated type system.
Fuzzing the Rust Typechecker Using CLP
И сразу существенная ложка дёгтя: статья из 2015 года, а потому разбирается с Rust 1.0-alpha. Тем не менее, читать интересно из-за общего похода.
Language fuzzing is a bug-finding technique for testing compilers and interpreters; its effectiveness depends upon the ability to automatically generate valid programs in the language under test. Despite the proven success of language fuzzing, there is a severe lack of tool support for fuzzing statically-typed languages with advanced type systems because existing fuzzing techniques cannot effectively and automatically generate well-typed programs that use sophisticated types. In this work we describe how to automatically generate well-typed programs that use sophisticated type systems by phrasing the problem of well-typed program generation in terms of Constraint Logic Programming (CLP). In addition, we describe how to specifically target the typechecker implementation for testing, unlike all existing work which ignores the typechecker. We focus on typechecker precision bugs, soundness bugs, and consistency bugs. We apply our techniques to Rust, a complex, industrial-strength language with a sophisticated type system.
Самая большая ложь, которую нам внушает мир — это то, что взрослые существуют.
Их нет, есть только выросшие дети.
Их нет, есть только выросшие дети.
❤2
#prog #java #kotlin #scala #article
Well-Typed Programs Can Go Wrong: A Study of Typing-Related Bugs in JVM Compilers
В этой статье авторы отмечают, что усилия в тестировании компиляторов в основном направлены на отлов некорректных оптимизаций, при этом мало кто целенаправленно занимается отловом багов в фронтендах. Авторы выбрали 320 багов, связанных с типами, среди багов компиляторов Java, Scala, Kotlin и Groovy, и разобрались с тем, как они себя проявляют, какие фичи языка используют и как они фиксятся. Вооружившись этим знанием, они написали генератор тестовых программ, который смог найти 28 багов, из них 12 были новыми (то есть для них исправлений не было).
А ещё авторы отличились тем, что нормально выложили материалы по исследованию.
Well-Typed Programs Can Go Wrong: A Study of Typing-Related Bugs in JVM Compilers
В этой статье авторы отмечают, что усилия в тестировании компиляторов в основном направлены на отлов некорректных оптимизаций, при этом мало кто целенаправленно занимается отловом багов в фронтендах. Авторы выбрали 320 багов, связанных с типами, среди багов компиляторов Java, Scala, Kotlin и Groovy, и разобрались с тем, как они себя проявляют, какие фичи языка используют и как они фиксятся. Вооружившись этим знанием, они написали генератор тестовых программ, который смог найти 28 багов, из них 12 были новыми (то есть для них исправлений не было).
А ещё авторы отличились тем, что нормально выложили материалы по исследованию.
www.semanticscholar.org
Well-typed programs can go wrong: a study of typing-related bugs in JVM compilers | Semantic Scholar
This study conducts the first empirical study for understanding and characterizing typing-related compiler bugs, and believes that it opens up a new research direction by driving future researchers to build appropriate methods and techniques for a more holistic…
#prog #rust #article
Stack-safety for free?
TL;DR:
Пока что решение ограничено в том плане, что оно не работает с мутабельными ссылками и взаимно-рекурсивными вызовами, но автор обещает рассказать в будущем о том, как можно обойти эти ограничения.
Также автор отдельно отмечает, что у него было чувство, что он изобрёл велосипед, но он не смог найти prior art для этого.
Stack-safety for free?
TL;DR:
//рекурсивная функция, использующая системный стек⬇️
fn triangular(n: u64) -> u64 {
if n == 0 {
0
} else {
n + triangular(n - 1)
}
}
//использует стек на кучеАвтор этой статьи столкнулся со случаем, когда ему потребовалось переделывать рекурсивное решение на итеративное из-за переполнения стека, и ему не понравилось, что он руками делает то, что вполне мог бы сделать компьютер автоматически. Немного подумав, он смог разработать решение, которое бы использовало генераторы (пока что всё ещё только на nightly) и которое требовало бы для работы достаточно прямолинейную трансформацию, чтобы её можно было сделать процедурными макросами.
fn triangular_safe(n: u64) -> u64 {
trampoline(|n| move |_| {
if n == 0 {
0
} else {
n + yield (n - 1)
}
})(n)
}
Пока что решение ограничено в том плане, что оно не работает с мутабельными ссылками и взаимно-рекурсивными вызовами, но автор обещает рассказать в будущем о том, как можно обойти эти ограничения.
Также автор отдельно отмечает, что у него было чувство, что он изобрёл велосипед, но он не смог найти prior art для этого.
@hurryabit's blog
Stack-safety for free?
I demonstrate how to (ab)use generators to transform any recursive function into an iterative one with nearly zero code changes.
Если вы когда-нибудь почувствуете себя глупым, то вспомните, что я разок опоздал на встречу с человеком из-за того, что перепутал станции Октябрьская и Октябрьское поле.
#rust
9 companies using Rust in production.
О некоторых из них я уже рассказывал, но в любом случае иметь сборник лишним не будет.
9 companies using Rust in production.
О некоторых из них я уже рассказывал, но в любом случае иметь сборник лишним не будет.
9 Companies That Use Rust in Production
Who uses Rust, and what are the benefits of choosing this programming language for your stack? Find out the answer in stories from 9 successful companies.
#prog #rust
Синтаксис для условной компиляции (
Синтаксис для условной компиляции (
#[cfg(...)]
) в Rust позволяет использовать условные выражения, но не в очень эргономичном виде: через all
, any
и not
. Библиотека efg позволяет использовать более привычный синтаксис, похожий на то, что пишут в коде на самом Rust. Пример:#[efg(feature "proc-macro" && !(target_arch "wasm32" && target_os "unknown"))]
extern crate proc_macro;
Кстати, написана Толяном.