LINUX.ORG.RU

Избранные сообщения ozkriff

Имеет ли смысл использовать Rust для написания библиотеки?

Форум — Development

Есть желание написать одну библиотеку. Она может использоваться в разных языках и на разных платформах. В частности важно, чтобы не было проблем на Windows. Работать должна быстро, памяти потреблять мало. Логичный выбор - С. Использовать можно из любого языка, накладных расходов почти ноль.

Но про Rust много базза в последнее время и, т.к. проект just for fun, стало интересно, имеет ли смысл такое делать на нём? Готовы ли инструментальные средства для генерации DLL на всех платформах? Не будет ли проблем с интеропом (C++, Python, Objective C)? Какой результирующий объём бинарников, необходимых для распространения? Скажем, С-шная DLL-ка будет весить совсем немного, а стандартная библиотека есть практически на всех платформах.

Вроде как можно выставить в С-шном стиле биндинги. Насколько это всё будет работать и удобно ли этим будет пользоваться? В биндингах помимо прочего будут callback-и, т.е. библиотека должна нормально дёргать переданные ей указатели на функции.

 ,

Legioner
()

Презентация «Rust - лучше, чем C++» на русском языке от разработчика из Яндекса

Форум — Development

http://tech.yandex.ru/events/cpp-party/june-minsk/talks/1978

Степан Кольцов

Яндекс

Rust — это современный, практический, быстрый и безопасный язык программирования. Некоторые говорят, что Rust — это как C++, если бы его писал человек, знающий Haskell.

Система типов Rust решает главную проблему C++ — небезопасность. C++ очень легко сделать ошибки, которые приведут к поломкам (например, use after free). Rust позволяет писать безопасный код, сохраняя при этом выразительность и околонулевые накладные расходы C++. В докладе будут подробно описаны механизмы языка, которые контролируют безопасность программы.

Хотя в данный момент Rust ещё не подходит для использования в продакшне, его всё равно стоит изучать. Во-первых, потому что это очень интересный подход к программированию, а во-вторых, потому что через несколько лет для разработки требовательных к ресурсам программ будет необходим именно Rust или другой похожий инструмент.

 

ozkriff
()

Rust 0.11

Новости — Mozilla
Группа Mozilla

Спустя несколько месяцев разработки тихо и незаметно вышла новая версия Rust — языка программирования, разрабатываемого Mozilla и нацеленного на безопасность, производительность и параллелизм.

В данном релизе усилия разработчиков были главном образом сосредоточены на доведение до ума системы типов и стандартной библиотеки. Так, одной из основных задач являлось введение инфраструктуры для типов переменного размера. Также, как и обещано, был полностью удалён ~ и @ синтаксис в пользу использования стандартных типов Box и Gc.

Основные изменения:

  • Синтаксис ~[T] был удален из языка, вместо него используется Vec<T>;
  • Синтаксис ~str был удален из языка, вместо него используется String;
  • Синтаксис ~T был удален из языка, вместо него используется Box<T>;
  • Синтаксис @T был удален из языка, вместо него используется std::gc::Gc<T>;
  • Байтовые символы, строки и сырые строки теперь предваряются префиксом b;
  • Изменился синтаксис для указания времени жизни замыканий: <'a>|A, B|: 'b + K -> T;
  • Модульная арифметика для вещественных типов была убрана из языка;
  • Синтаксис use foo, bar, baz; был удален из языка;
  • Ключевое слово priv было удалено из языка;
  • Поля структур стали по умолчанию приватными;
  • Приватные перечислимые типы теперь запрещены;
  • Замыкание более не может быть вызвано через &-указатель;
  • Индекс вектора и размер битового сдвига теперь может быть представлен только в виде uint;
  • Стандартная библиотека теперь являет собой один унифицированный интерфейс к набору нижлежащих библиотек;
  • Добавлена новая библиотека libcore, призванная облегчить разработку встраиваемого программного обеспечения;
  • Был добавлен модуль regex, также включающий в себя набор статически скомпилированных регулярных выражений;
  • Набор I/O примитивов получил возможность прерывать операции по таймауту;
  • Добавлен макрос bitflags! для упрощения работы с битовыми флагами.

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

 , ,

mix_mix
()

Rust 0.10

Новости — Mozilla
Группа Mozilla

Вышла новая версия Rust, языка программирования разрабатываемого Mozilla. Релиз несет в себе около 1500 изменений и исправлений ошибок.

Основные изменения:

( читать дальше... )

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

 ,

encyrtid
()

Rust 0.9

Новости — Mozilla
Группа Mozilla

Сегодня было объявлено о выходе очередной версии Rust — языка программирования, разрабатываемого Mozilla.

Основные изменения:

  • Язык:
    • удален тип float, для чисел с плавающей точкой используются типы f32, f64;
    • добавлена возможность включения экспериментальных фич (feature gating) на уровне crate'ов (атрибут '#[feature(foo)]');
    • managed boxes (@) теперь включаются с помощью атрибута '#[feature(managed_boxes)]' и в будущем будут удалены. Вместо них используются типы Gc и Rc;
    • '@mut' удален, вместо него используется тип 'std::cell::{Cell, RefCell}';
    • для возврата в начало цикла используется ключевое слово 'continue' вместо 'loop';
    • запрещено изменение строк через индексацию;
    • новый синтаксис для создания raw-строк ('r"foo"'). Также можно создать raw-строку с помощью совпадающих хэш-разделителей 'r###«foo»###';
    • тип '~fn' теперь пишется как 'proc (args) -> retval { ... }' и может вызываться только однажды;
    • тип '&fn' теперь пишется как '|args| -> ret';
    • тип '@fn' удален;
    • ключевое слово 'do' теперь работает только с procs-лямбдами;
    • одноэлементные tuple-like структуры больше не могут быть разыменованы для получения внутреннего значения. Более полное решение для перегрузки оператора разыменования будет предоставлено в будущем;
    • атрибут '#[link(...)]' был заменен атрибутом '#[crate_id = «name#vers»]';
    • пустые реализации (impl) должны прерываться пустыми фигурными скобками, использование ';' для этого запрещено;
    • ключевые слова больше не могут использоваться как lifetime-имена, 'self'-lifetime больше не имеет особого смысла;
    • удален макрос 'fmt!';
    • удалены макросы 'printf!' и 'printfln!', вместо них используются 'print!' и 'println!';
    • pattern matching поддерживает 'mut' ('let (mut x, y) = (1, 2);'
    • вместо синтаксиса 'extern mod foo (name = «bar»)' теперь следует использовать 'extern mod foo = «bar»';
    • новые зарезервированные слова 'alignof', 'offsetof', 'sizeof';
    • макросы могут иметь атрибуты;
    • макрос 'asm!' теперь включается feature-gated атрибутом '#[feature(asm)]';
    • комментарии могут быть вложенными;
    • значения неявно преобразуются к типам trait'ов которые они реализуют (раньше необходимо было явно использовать 'as');
  • Библиотеки:
    • std: API для 'option' и 'result' был переработан для того чтобы сделать его более простым, консистентным и композабельным;
    • std: Полностью заменен модуль 'std::io', включая планировщик. Полностью реализованы File, TCP, UDP, Unix сокеты, именованные каналы и таймеры;
    • std: в модуль 'io::util' добавлены полезные реализации типов 'Reader' и 'Writer', включая 'NullReader', 'NullWriter', 'ZeroReader', 'TeeReader';
    • std: Тип 'extra::rc' перемещен в std;
    • std: Тип 'Gc' в модуле 'gc' заменит тип '@';
    • std: Удален тип 'Either';
    • std: 'fmt::Default' может быть реализован для любого типа с помощью синтаксиса 'format!(«{}», myfoo)';
  • Инструментарий:
    • команды 'rust' и 'rusti' были удалены из-за отсутствия поддержки;
    • 'rustdoc' был полностью переписан;
    • 'rustdoc' может тестировать примеры кода из документации;
    • 'rustpkg' может тестировать пакеты с аргументом 'test';
    • 'rustpkg' поддерживает произвольные зависимости, включая библиотеки на C;
    • улучшен механизм генерации отладочной информации в 'rustc';
    • улучшены сообщения об ошибках для несбалансированных разделителей в 'rustc';
    • удалена поддержка JIT в 'rustc';
    • исполнимые файлы и статические библиотеки могут быть собраны с LTO (ключ '-Z lto');
    • в 'rustc' добавлен флаг '--dep-info' для вывода сообщения зависимостей инструментам сборки.

Детальный обзор изменений с примерами

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

 ,

encyrtid
()