Вышел rust 0.11.0

в 13:44, , рубрики: Rust, Программирование, релиз

Вышел rust 0.11.0

Несмотря на то, что язык находится в активной фазе разработки, работа была сфокусирована над улучшением системы типов и библиотек. Главная работа была проведена над имплементацией типов с динамическим размером (DST) и рефакторингом стандартной библиотеки.
В этом релизе также удалили ~ и @ в угоду типам Box и Gc из стандартной библиотеки (компилятор пока знает о этих типах больше чем нужно, но вскоре эти типы станут самыми обычными типами Rust).

DST, векторы и строки

В подготовке в введию типов с динамическим размеров (DST), ~str и ~[T] были удалены из языка. Их вернут в виде Box<str> и Box<[T]>, но пока их нет. Их заменили на String и Vec соответственно.

Vec

Тип Vec заменяет старый тип ~[T] при этом его производительность улучшилась благодаря оптимизациям LLVM.
Как и ~[T], Vec<T> может менять размер используя изменяемый указатель. Из него легко получить &mut[T] и &[T].

String

По сути это прямая замена ~str. Это тип owned строк по умолчанию, и поддерживает изменения через mut указатель. Этот тип использует Vec<u8> и в рантайме гарантирует наличие строки с правильной utf8 кодировкой. Получить &str с него можно используя метод as_slice().

Тип String входит в prelude и живет в std::string.

Удаление ~ и @

Повсеместные указатели ~ и @ были удалены из языка и теперь находятся в библиотеках. Синтаксис вида ~T заменен на Box<T>, и находится в std::owned, а синтаксис вида @T был заменен на Gc<T> и находится в std::gc.

Вместо ~expr тепер нужно писать box expr, а вместо @expr тепер box(GC) expr.

Пока это всего лишь изменение в синтаксисе, но главной целью есть перенос многих фич из компилятора в библиотеки. В месте с этим мы получим упрощенную поддержку компилятора, более простую генерацию документации и более очевидное использование умных указателей Rc и Arc.
После внедрения DST компилятору не нужно будет специально обрабатывать типы Box<> и Gc<>.

Фасад «std»

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

  • libcore — ключевая библиотека для Rust. В теории максимально переносимая (у нее нет зависимостей), к примеру она не зависит от libc. Даная библотека хорошо подходит для использования в встроенных устройствах, разработке ядра, или для встраивания Rust в другой язык. libcore не умеет выделять память, поэтому в ней нет векторов и строк з изменяемым размером.
  • liblibc — обертка для libc.
  • liballoc — главный интерфейс для выделения памяти в Rust. В этой библиотеки находятся «умные указатели», такие как, Rc<T>, Arc<T> и Box<T>. Также вся память для Rust выделяется этой библиотекой. Сейчас для этого используется аллокатор jemalloc. Библиотека зависит от liblibc и libcore.
  • libcollections — Библиотека предоставляет типы коллекций, такие как vector, strings, maps, linked lists, и тд. Зависит от liballoc и libcore.
  • librustrt — Главный компонент рантайма, предоставляет I/O интерфейсы, модель задач, и тд.
  • libsync — Библиотека с примитивами синхронизации, и типами для работы с паралельными вычислениями.
  • librand — Библиотека с интерфейсом генераторов случайных чисел.

Явно указывать подключение даных модулей не нужно, стандартная библиотека реэкспортирует весь нужный функционал. К примеру, тепер в стандартной библиотеке есть такие модули:

  • std::collections
  • std::sync
  • std::comm
  • std::rand
  • std::rt

Автор: Antti

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js