Telegram Group & Telegram Channel
#prog #rust хайлайты.

TL;DR: тык.

Среди многих хороших вещей, которые есть в Rust — указание версии, начиная с которой определение стабильно. Главным образом это относится к API в стандартной библиотеке, но эта информация также хранится и для фич компилятора — это позволяет компилятору указывать на то, что #![feature(...)] уже стабилизирована и потому не требует аннотаций в коде.

Долгое время эта версия указывалась вручную. Это обычно не так сложно — новое определение попадает в stable-версию, которая на три версии старше текущей. Однако PR в Rust имеют свойство затягиваться — особенно для больших и сложных фич типа non-lexical lifetimes — и потому эти атрибуты требовалось периодически обновлять. Так как это не очень интересная работа, а упустить эти атрибуты при работе очень легко, часто в master эти указания на стабильную версию попадали неверными, из-за чего их приходилось править задним числом после мерджа (например).

Для того, чтобы избежать подобных происшествий, в конце августа 2022 года est31 добавил поддержку заменителя версии. Именно, все новые стабильные фичи должны теперь вместо конкретной версии использовать строку "CURRENT_RUSTC_VERSION", и tidy (линтер компилятора) в CI проверяет, что это действительно так. Для того, чтобы менять версию на актуальную, этот же PR добавил для этого автоматический инструмент — replace-version-placeholder — который запускается каждый раз, когда отпочковывается новая бета-версия. Это очень тупой инструмент, который использует простую текстовую замену (буквально str::replace)

Однако определение этого шаблона нужно иметь и в сорцах компилятора — для того, чтобы корректно распознавать определения с указанием этой строки в качестве стабильной версии и давать связанные с версиями диагностики. По понятным причинам это определение используется в коде компилятора, ответственного за парсинг атрибутов. Чтобы избежать перезаписывания определения шаблона, в replace-version-placeholder был захардкожен путь до файла, отвечающего за эту часть компилятора. Однако структура компилятора не является отлитой в граните, и периодически файлы перемещают или переименовывают. Иногда меняется путь и до файла, содержащего определение шаблона, из-за чего инструмент для замены версий начинает заменять то, что не надо, и его надо править, чтобы поменять путь, который исключается из обработки.

Чтобы исключить подобную чехарду, Pietro Albini придумал гениальный ход с заменой определения шаблона в коде. Вот как определение VERSION_PLACEHOLDER выглядело до его PR:

pub const VERSION_PLACEHOLDER: &str = "CURRENT_RUSTC_VERSION";


А вот как оно же выглядит после:

pub const VERSION_PLACEHOLDER: &str = concat!("CURRENT_RUSTC_VERSIO", "N");


Несмотря на то, что определение де-факто осталось тем же, исходники теперь не содержат строку CURRENT_RUSTC_VERSION, а потому replace-version-placeholder файл не меняет. Это изменение позволило не только свободно перемещать исходники, но и убрать фильтрацию по имени файла из инструмента. Естественно, Pietro написал в комментариях, зачем это надо.

Но всё равно смешно.



group-telegram.com/dereference_pointer_there/9105
Create:
Last Update:

#prog #rust хайлайты.

TL;DR: тык.

Среди многих хороших вещей, которые есть в Rust — указание версии, начиная с которой определение стабильно. Главным образом это относится к API в стандартной библиотеке, но эта информация также хранится и для фич компилятора — это позволяет компилятору указывать на то, что #![feature(...)] уже стабилизирована и потому не требует аннотаций в коде.

Долгое время эта версия указывалась вручную. Это обычно не так сложно — новое определение попадает в stable-версию, которая на три версии старше текущей. Однако PR в Rust имеют свойство затягиваться — особенно для больших и сложных фич типа non-lexical lifetimes — и потому эти атрибуты требовалось периодически обновлять. Так как это не очень интересная работа, а упустить эти атрибуты при работе очень легко, часто в master эти указания на стабильную версию попадали неверными, из-за чего их приходилось править задним числом после мерджа (например).

Для того, чтобы избежать подобных происшествий, в конце августа 2022 года est31 добавил поддержку заменителя версии. Именно, все новые стабильные фичи должны теперь вместо конкретной версии использовать строку "CURRENT_RUSTC_VERSION", и tidy (линтер компилятора) в CI проверяет, что это действительно так. Для того, чтобы менять версию на актуальную, этот же PR добавил для этого автоматический инструмент — replace-version-placeholder — который запускается каждый раз, когда отпочковывается новая бета-версия. Это очень тупой инструмент, который использует простую текстовую замену (буквально str::replace)

Однако определение этого шаблона нужно иметь и в сорцах компилятора — для того, чтобы корректно распознавать определения с указанием этой строки в качестве стабильной версии и давать связанные с версиями диагностики. По понятным причинам это определение используется в коде компилятора, ответственного за парсинг атрибутов. Чтобы избежать перезаписывания определения шаблона, в replace-version-placeholder был захардкожен путь до файла, отвечающего за эту часть компилятора. Однако структура компилятора не является отлитой в граните, и периодически файлы перемещают или переименовывают. Иногда меняется путь и до файла, содержащего определение шаблона, из-за чего инструмент для замены версий начинает заменять то, что не надо, и его надо править, чтобы поменять путь, который исключается из обработки.

Чтобы исключить подобную чехарду, Pietro Albini придумал гениальный ход с заменой определения шаблона в коде. Вот как определение VERSION_PLACEHOLDER выглядело до его PR:

pub const VERSION_PLACEHOLDER: &str = "CURRENT_RUSTC_VERSION";


А вот как оно же выглядит после:

pub const VERSION_PLACEHOLDER: &str = concat!("CURRENT_RUSTC_VERSIO", "N");


Несмотря на то, что определение де-факто осталось тем же, исходники теперь не содержат строку CURRENT_RUSTC_VERSION, а потому replace-version-placeholder файл не меняет. Это изменение позволило не только свободно перемещать исходники, но и убрать фильтрацию по имени файла из инструмента. Естественно, Pietro написал в комментариях, зачем это надо.

Но всё равно смешно.

BY Блог*


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/dereference_pointer_there/9105

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

The SC urges the public to refer to the SC’s I nvestor Alert List before investing. The list contains details of unauthorised websites, investment products, companies and individuals. Members of the public who suspect that they have been approached by unauthorised firms or individuals offering schemes that promise unrealistic returns In 2014, Pavel Durov fled the country after allies of the Kremlin took control of the social networking site most know just as VK. Russia's intelligence agency had asked Durov to turn over the data of anti-Kremlin protesters. Durov refused to do so. That hurt tech stocks. For the past few weeks, the 10-year yield has traded between 1.72% and 2%, as traders moved into the bond for safety when Russia headlines were ugly—and out of it when headlines improved. Now, the yield is touching its pandemic-era high. If the yield breaks above that level, that could signal that it’s on a sustainable path higher. Higher long-dated bond yields make future profits less valuable—and many tech companies are valued on the basis of profits forecast for many years in the future. The perpetrators use various names to carry out the investment scams. They may also impersonate or clone licensed capital market intermediaries by using the names, logos, credentials, websites and other details of the legitimate entities to promote the illegal schemes. A Russian Telegram channel with over 700,000 followers is spreading disinformation about Russia's invasion of Ukraine under the guise of providing "objective information" and fact-checking fake news. Its influence extends beyond the platform, with major Russian publications, government officials, and journalists citing the page's posts.
from us


Telegram Блог*
FROM American