LINUX.ORG.RU

Релиз Rust 1.30

 ,


3

6

Что нового:

  • Rust 1.30 расширяет функционал процедурных макросов, добавляя возможность определять атрибутные процедурные макросы и функциональные процедурные макросы.
  • Теперь можно импортировать макросы в область видимости с помощью ключевого слова use.
  • Стабилизирован пакет proc_macro, который дает API, необходимый для написания процедурных макросов. В нем также значительно улучшили API для обработки ошибок, и такие пакеты, как syn и quote уже используют его
  • Два новых улучшения в использовании use: во-первых, внешние пакеты теперь добавляются в prelude, во-вторых, use стал поддерживать импорт элементов в текущую область видимости с путями, которые начинаются на crate.
  • Сырые идентификаторы
  • В Rust 1.30 можно использовать атрибут #[panic_handler] для самостоятельной реализации паники. Теперь можно создавать приложения, а не только библиотеки, которые не используют стандартную библиотеку.
  • В макросах теперь можно сопоставлять модификаторы области видимости, такие как pub, с помощью спецификатора vis.
  • «инструментальные атрибуты», такие как #[rustfmt::skip], теперь стабилизированы.
  • стабилизирован ряд API в стандартной библиотеке
  • В Cargo теперь есть индикатор выполнения

>>> Подробности



Проверено: jollheef ()

Attribute-like macros are similar to custom derive macros, but instead of generating code for only the #[derive] attribute, they allow you to create new, custom attributes of your own. They’re also more flexible: derive only works for structs and enums, but attributes can go on other places, like functions. As an example of using an attribute-like macro, you might have something like this when using a web application framework:

#[route(GET, "/")]
fn index() {

Сокрушительный удар по питону

Crocodoom ★★ ()

Function-like macros define macros that look like function calls. For example, an sql! macro:

let sql = sql!(SELECT * FROM posts WHERE id=1); This macro would parse the SQL statement inside of it and check that it’s syntactically correct.

Ещё одна пушка. Кастомные инлайны произвольных языков, интепретирующиеся в компайл-тайме. Растеры, как вам в 3018?

Crocodoom ★★ ()
Последнее исправление: Crocodoom (всего исправлений: 1)
Ответ на: комментарий от Crocodoom

Ещё одна пушка. Кастомные инлайны произвольных языков, интепретирующиеся в компайл-тайме

Не интерпретирующиеся а валидирующиеся. В лиспах всю жизнь такое было, как минимум в CL :)

loz ★★★★★ ()
Последнее исправление: loz (всего исправлений: 1)
Ответ на: комментарий от loz

В лиспах всю жизнь такое было, как минимум в CL :)

every programming language feature, ever.

Я так понимаю, что у любой фичи и парадигмы есть две даты рождения, например аспектно-ориентированное программирование родилось в 1980 в лиспе и в 2001 для простых смертных.

t184256 ★★★★★ ()

Мне вот интересно. На расте написали десятки фреймворков и ни одной базы данных. Даже key-value не нашел. Почему так? Неужели такая сложная задача? Или никому не нужно?

spoonbob ()
Ответ на: комментарий от spoonbob

Наверное никому не нужно. Хотя принципе может встраиваемая бд на чистом rust, было бы неплохо. Многие вещи все равно из плюсов берут, например OpenSSL/LibreSSL используются непосредственно, вместо Rust замен

vertexua ★★☆☆☆ ()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от spoonbob

Почему так? Неужели такая сложная задача? Или никому не нужно?

оплатят(ггул/моила) тогда будет

решать очередной миллион проблем в объемном мультипотоковом коде, миллион именно новых раст-онли специфичных проблем

...

соц. ленты что я слежу пока дошли до эволюции реализации простых «2д(массивы) алгоритмов» вот одна из последних публикаций https://nical.github.io/posts/rust-2d-graphics-02.html

и в коде по ссылке(который я даже не тестировал) я в слепую без тестов вижу сотни дефолтных проблем решенных тыщу раз в С/С++, и их опять надо решать для раста с его многопоточностью/моделью памяти/функциями/стилем кода

missxu ()
Ответ на: комментарий от spoonbob

Ну почему же никому не нужно... Просто не все опенсорсят - это во первых.

Во вторых, так как жаба доказала свою как-бы жизнеподобность в БД, особенно распределенных (Cassandra, HBase), многие считают, что зачем тратить в пять-десять раз больше ресурсов на то, что можно тупо завалить деньгами (среднего размера компании и те могут себе позволить, например, 10 килобаксов в месяц за дополнительные 8-10 серьезных виртуалок в амазоне или ажуре), вместо того, чтобы оптимизировать это при помощи кода.

Вот простой подсчет: у тебя есть кассандра. 9 узлов в ажуре (просто потому, что знаю цены на сегодня). ESv3 - 64 гига памяти и 8 ядер - стоит килобакс в месяц, плюс/минус. Допустим, у тебя запрос начал идти 200 мс, а хочется 100 мс. Решения три:

1. Добавляем в два раза больше машин - 9 килобаксов в месяц

2. Переводим на Сциллу - в 3-5 раз быстрее (судя по слухам) или Роксандру - в 5-7 раз быстрее. Новые проблемы, так как unmanaged code может упасть и так далее.

3. Переписываем на что-нибудь на расте, C++, Го в конце концов. Хороший разработчик, знакомый с написанием баз данных будет стоить 15-18 килобаксов в месяц минимум (это если мы говорим про людей, которые писали SQLServer, Oracle, DB2 и подобное). И это минимум! И надо их таких несколько, и на несколько месяцев. А ты за один день - бац - и еще в полтора раза увеличил скорость. Пока у тебя это не начинает стоить полмиллиона баксов, ты не пойдешь писать свою БД с нуля.

Ну и наконец, если уж тебе совсем нужна производительность и у тебя есть люди, описанные выше, скорее, они знают ЦПП лучше всего и им быстрее и надежней писать на нем.

kantoku ()
Ответ на: комментарий от spoonbob

https://www.sqlite.org/testing.html

Я как вот это прочитал, так очень доверие поднялось к тому чтобы просто ее встраивать. С другой стороны, я кладу статически слинкованые бинарники через musl. Собрать статическую sqlite с musl, лишний тяжёлый шаг

vertexua ★★☆☆☆ ()
Ответ на: комментарий от spoonbob

Там замена для криптографии, но вроде никто нормально не заворачивал это так, чтобы оно легко встраивалось например hyper, или какой-то другой https клиент или сервер. Например мне в основном для клиента, что может быть не так страшно. Потому что сервер всеравно может останавливать https как-то по другому

vertexua ★★☆☆☆ ()
Ответ на: комментарий от t184256

Я так понимаю, что у любой фичи и парадигмы есть две даты рождения, например аспектно-ориентированное программирование родилось в 1980 в лиспе и в 2001 для простых смертных.

Да нет никаких «в лиспе», «для простых смертных». Просто ты выбираешь язык который изучаешь, с которым работаешь. Что в нем доступно - то ты и знаешь. А потом видишь на лоре коммент много лет спустя что это крутая штука - видимо кто-то ее только что открыл, ну что поделать :)

loz ★★★★★ ()
Ответ на: комментарий от spoonbob

Я думаю там всякие простые вещи на корректность работы памяти были покрыты сразу. Плюс всякие sanitizers потоков, памяти. В дальше там conformance, всякие тесты на отключение питания

Rust не пуленепробиваем. Я вон получил недавно в Option или None или Some, в зависимости это релиз или дебаг билд. И нежелаемое значение было как раз в релиз билде чтобы нельзя было продебажить. Причину так и не нашли, баг исчез после каких-то перекомпиляции то ли с новым растом то ли после отключения LTO. Возможно это какой-то data race в алгоритме, но не представляю как. И вот вопрос, безопасный язык, покрыт ли так тестами сам, как sqlite. Понятно что лучше раз и навсегда покрыть тестами unsafe внутренности rust, чем потом делать 92 млн строчек тестов в каждом продукте, но все же.

vertexua ★★☆☆☆ ()
Последнее исправление: vertexua (всего исправлений: 5)