#prog #rust
Хайлайты из rust-analyzer:
* Добавлена новая команда для отображения раскладки типов в памяти. Выглядит, правда, страшненько. С другой стороны, результат этой команды — это просто HTML со стилями, так что поменять это потом будет не так уж сложно. Кстати, тот факт, что просто HTML достаточно — одно из немногих достоинств основанных на Electron редакторов.
* Добавлена команда, которая по impl-блоку генерирует определение трейта и его реализацию для типа из impl-блока.
* rust-analyzer при наведении на константу показывает во всплывающей подсказке значение этой константы. Теперь по возможности для формирования этой подсказки используется реализация Debug для типа константы. Для, скажем, структур, генерируемых bitflags, это сильно повышает полезность данной подсказки.
Хайлайты из rust-analyzer:
* Добавлена новая команда для отображения раскладки типов в памяти. Выглядит, правда, страшненько. С другой стороны, результат этой команды — это просто HTML со стилями, так что поменять это потом будет не так уж сложно. Кстати, тот факт, что просто HTML достаточно — одно из немногих достоинств основанных на Electron редакторов.
* Добавлена команда, которая по impl-блоку генерирует определение трейта и его реализацию для типа из impl-блока.
* rust-analyzer при наведении на константу показывает во всплывающей подсказке значение этой константы. Теперь по возможности для формирования этой подсказки используется реализация Debug для типа константы. Для, скажем, структур, генерируемых bitflags, это сильно повышает полезность данной подсказки.
GitHub
Feature: Add a memory layout viewer by adenine-dev · Pull Request #15081 · rust-lang/rust-analyzer
Motivation: rustc by default doesn't enforce a particular memory layout, however it can be useful to see what it is doing under the hood, or if using a particular repr ensure it is behaving how...
🔥5
#prog #julia #rust #rustlib #article
Первая статья — Shelling Out Sucks — рассказывает, что не так с языковыми средствами для запуска шелла (такими, как в Perl и в Ruby с backtick-строками, например). Тезисно:
1. Для интерполяции переменных используется обычная строковая интерполяция, которая не экранирует символы со специальным значением для шелла — что ломает пайплайны, если туда затёсывается, скажем, пробел или кавычка.
2. Для исполнения команды запускается шелл, который, в свою очередь, уже запускает переданную команду — что не слишком эффективно и, вообще говоря, избыточно.
3. Ошибки по умолчанию проглатываются (из-за посредника в виде процесса шелла), а при использовании средств вроде
3.1. Некоторые команды оболочки и программы используют код завершения не для передачи статуса ошибки, а для передачи полезной информации (grep, например), что плохо сочетается с
В статье Put This In Your Pipe рассказывается, как эта проблема была решена в Julia. В языке также присутствует синтаксис backtick-строк, но он реализует другой функционал. А именно:
* вместо немедленного запуска команды строка формирует объект, который представляет собой команду. В частности, на этом этапе строка делится на имя запускаемой программы и её аргументы.
* синтаксис для интерполяции значений (не только переменных, но и выражений) уже делает необходимое экранирование.
* интерполяция массивов работает аналогично shell expansion вместо вставки разделённых пробелами строк.
* функции для запуска команд порождают процессы и собирает их коды возврата самостоятельно, без делегации командной оболочке.
В Rust есть библиотеки для запуска команд, основанные на похожих принципах: xshell (от Алексея Кладова) и более продвинутая duct, позволяющая пайпить команды. Документация xshell прямо отсылает к "Shelling out sucks" и "Put this in your pipe", а документация duct дополнительно рассказывает о том, какие ловушки закрывает.
P. S.: тот факт, что в Unix-like системах до сих пор нет вменяемого способа завершить дерево процессов более чем единичной глубины — это охренеть как странно.
Первая статья — Shelling Out Sucks — рассказывает, что не так с языковыми средствами для запуска шелла (такими, как в Perl и в Ruby с backtick-строками, например). Тезисно:
1. Для интерполяции переменных используется обычная строковая интерполяция, которая не экранирует символы со специальным значением для шелла — что ломает пайплайны, если туда затёсывается, скажем, пробел или кавычка.
2. Для исполнения команды запускается шелл, который, в свою очередь, уже запускает переданную команду — что не слишком эффективно и, вообще говоря, избыточно.
3. Ошибки по умолчанию проглатываются (из-за посредника в виде процесса шелла), а при использовании средств вроде
set pipefail ошибки недостаточно подробны, так как не говорят, какая именно команда завершилась ошибкой.3.1. Некоторые команды оболочки и программы используют код завершения не для передачи статуса ошибки, а для передачи полезной информации (grep, например), что плохо сочетается с
set pipefail.В статье Put This In Your Pipe рассказывается, как эта проблема была решена в Julia. В языке также присутствует синтаксис backtick-строк, но он реализует другой функционал. А именно:
* вместо немедленного запуска команды строка формирует объект, который представляет собой команду. В частности, на этом этапе строка делится на имя запускаемой программы и её аргументы.
* синтаксис для интерполяции значений (не только переменных, но и выражений) уже делает необходимое экранирование.
* интерполяция массивов работает аналогично shell expansion вместо вставки разделённых пробелами строк.
* функции для запуска команд порождают процессы и собирает их коды возврата самостоятельно, без делегации командной оболочке.
В Rust есть библиотеки для запуска команд, основанные на похожих принципах: xshell (от Алексея Кладова) и более продвинутая duct, позволяющая пайпить команды. Документация xshell прямо отсылает к "Shelling out sucks" и "Put this in your pipe", а документация duct дополнительно рассказывает о том, какие ловушки закрывает.
P. S.: тот факт, что в Unix-like системах до сих пор нет вменяемого способа завершить дерево процессов более чем единичной глубины — это охренеть как странно.
👍6
Блог*
Люблю, когда у меня в руках толстый кошель 🤤
Так, я понял. У меня нет донатов, потому что мои подписчики не любят толстые кошельки
🤡12🍌2😢1
#prog #rust #article
Winning the fight against the Rust compiler (Coherence in Rust, feat. rustc sources)
Или неглубокое погружение в coherence check в rustc.
Winning the fight against the Rust compiler (Coherence in Rust, feat. rustc sources)
Или неглубокое погружение в coherence check в rustc.
ohadravid.github.io
Winning the fight against the Rust compiler (Coherence in Rust, feat. rustc sources)
Ohad's blog
❤5