LINUX.ORG.RU

Вышел Rust 1.0 Beta

 ,


2

7

3 апреля 2015 года, в полном соответствии с планом, вышла бета-версия Rust 1.0. Язык и большая часть стандартной библиотеки окончательно стабилизированы, до финального релиза возможны только минимальные изменения в API.

Некоторые изменения со времени альфа-версии, вышедшей 9 января:

Полный список изменений.

Так же разработчики отмечают рост экосистемы языка. Репозиторий crates.io недавно преодолел отметку в 1 миллион загрузок и содержит более 1700 модулей, готовых для использования. В данный момент идет работа по обновлению устаревших модулей до бета-версии. Большая часть документации (The Book, Rust By Example, The Rust Reference, API reference) приведена в соответствии с вышедшей бета-версией.

Окончательный релиз Rust 1.0 запланирован на 16 мая, разработчики потратят оставшиеся до релиза 6 недель на тестирование, исправление ошибок и обновление документации.

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

anonymous

Проверено: maxcom ()
Ответ на: комментарий от dizza

C++ запарил только неумех, которые используют его там, где он им не нужен

Расскажи мне об этом.

Rust - потенциальная замена С++.

Потенциальная замена в нише языка для неумех, которые будут использовать Rust там, где можно обойтись чем-нибудь менее хардкорным?

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

внезапно, malloc - это тоже не системный вызов. если не считать page exception-ов, конечно

Brk - системный вызов. Malloc - обёртка вокруг brk.

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

Brk - системный вызов. Malloc - обёртка вокруг brk.

Вернитесь в криокамеру, утечка хладагента будет скоро устранена.

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

Тот факт, что malloc дергает системный вызов, чтобы запросить память у ядра, никуда не делся.

malloc дергает mmap (или sbrk) настолько редко, что называть его «оберткой» как минимум глупо.

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

Настолько редко - это насколько? Если через malloc выделять жирные куски памяти, что mmap будет вызван в каждом случае, потому что размер чанка внутри аллокатора будет каждый раз меньше необходимого, и в данном случае редко - это каждый раз.

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

Настолько редко - это насколько?

Это при необходимости нарастить объем памяти в куче // К.О.

Если через malloc выделять жирные куски памяти

Итак, ты можешь заставить malloc при каждом вызове обращаться к ядру. браво. То, что это приложение течет и падает в течение секунд, тебя, конечно, не интересует.

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

Чем Rust лучше D? Хоть один пример. Пока все, что вижу это нечитабельный синтаксис и кучу необоснованных разговорах о его преимуществах.

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

Итак, ты можешь заставить malloc при каждом вызове обращаться к ядру. браво. То, что это приложение течет и падает в течение секунд, тебя, конечно, не интересует.

Если я правильно выделяю и освобождаю память, и при этом остаюсь в рамках доступной памяти, ничего падать или течь не будет, если, конечно, в аллокаторе из libc нет багов.

В любом случае, это был искусственный пример. Заметь, никто тащемто не говорил, что всё что malloc делает это дергает нижележащий системный вызов. Но обёрткой вокруг него он быть не перестаёт.

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

Если я правильно выделяю и освобождаю память, и при этом остаюсь в рамках доступной памяти, ничего падать или течь не будет, если, конечно, в аллокаторе из libc нет багов.

И обращений к mmap тоже не будет.

никто тащемто не говорил, что всё что malloc делает это дергает нижележащий системный вызов. Но обёрткой вокруг него он быть не перестаёт.

Это какой-то новый смысл слова «обертка».

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

И обращений к mmap тоже не будет.

> cat testmmap.c 
#include <stdio.h>
#include <stdlib.h>

void test()
{
    void *p = malloc(1024*1024*1024);   // 1G
    if(p) {
    //    puts("Allocated");
        free(p);
    //    puts("Freed");
    } else {
    //    puts("Failed");
    }
}
    
int main()
{
    for(int i = 0; i < 10000; i++)
        test();

    return 0;
}
> gcc testmmap.c -o testmmap -std=c11
> strace -o mmap.strace ./testmmap
> cat mmap.strace|grep mmap|wc -l   
10009

P.S. Просто признай, что у тебя маленькая пиписька, и тебе нравится самоутверждаться в срачах на ЛОРе. Особенно по банальным вопросам.

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

Твой пул тоже будет обёрткой вокруг системного вызова, если так рассуждать.

Да. Но более эффективной чем malloc в конкретном случае.

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

Принципиальное отличие Rust от D/Go/Nim - отсутствие GC с сохранением memory safety. Есть множество других отличий, но растовый reason d'etre именно в практичной реализации borrow checking.

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

На С++ стоит только хардкорные проекты писать вроде СУБД и high frequency trading

Да ладно. Ещё геймдев, как минимум. Да и на самом деле, много всего. Повторюсь, я с кастомными аллокаторами сталкивался очень редко. Да, это больше говорит про мой опыт, но всё-таки С++ - мой основной инструмент.

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

Просто признай, что у тебя маленькая пиписька,

Хороший способ закончить спор, не признав свою неправоту.

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

ага, а если в чужом коде что-то незнакомое, просто скажи боссу, что этот код - говно, дайте мне другой

Больше всего проблем у новичков с темплэйтами и перегрузкой а они используются обычно не часто.

Т.е. Вас просто назначили на неподходящую для вас часть проекта.

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

Но оно еще недоделанное, обещают на потом.

Да его уже несколько лет обещают, но пока ADT в D нет.

tailgunner ★★★★★
()

Поразительно. Кто-то уже написал биндинги для gtk3, и на этих биндингах написал IDE со встроенным neovim

makoven ★★★★★
()

Очередная попытка сделать C++, только лучше. Ничего путного не выйдет. Потому что там, где поддерживается идеология и синтаксис C++, получится только C++, даже если приделать туда всякие навороты из Оберона/Паскаля, Явы или ML. Для низкоуровневых операций, где каждый бит дорог, ничего лучше C всё равно не будет. Если же хочется писать большие проекты проще и надёжнее, и при этом иметь высокую производительность, то следует либо смириться с C++11, либо менять идеологию, например, использовать и развивать MLton.

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

Ты бы хоть вопрос изучил, прежде чем икспертизу с дивана давать.

Потому что там, где поддерживается идеология и синтаксис C++

И «идеология» и синтаксис Rust крайне далеки от C++. С++ со «всякими наворотами из Оберона/Паскаля, Явы или ML» это D и Go. Rust это С++ со «всякими наворотами из Оберона/Паскаля, Явы или ML» плюс memory safety без GC.

Вообще интересно узнать, что ты понимаешь под «идеологией С++»? На ум приходит только «you don't pay for what you don't use», но не понятно, почему ты считаешь, что это всегда должно приводить к С++.

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

С++ со «всякими наворотами из Оберона/Паскаля, Явы или ML» это D и Go.
С++ со всякими наворотами это Go
С++ со всякими наворотами
женериков нет вообще

вещества?

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

Вообще хоть Rust и сравнивают с C++, по-моему он очень далёк от него.

ООП там совсем другое. Я сильно с ним пока не разбирался, но из того, что вижу — общего с C++ не больше, чем у Java с JavaScript-ом.

Шаблоны совсем другие. Работают только для типов. Duck-Typing не работает. Все плюсовые приёмы работы с шаблонами тут не примениы.

Концепция управления жизнью объектов абсолютно другая. Настолько другая, что это самая главная помеха при написании первых программ на Rust-е.

Исключений нет. Связанных с этим приседаний с exception-safe кодом, соответственно, тоже нет. Всё работает так, как написал, сюрприз разве что из макроса может прийти, но из стандартных макросов вроде только try! меняет поток управления.

При этом есть множество концепций, которых в C++ просто нет, а в Rust-е они в каждой второй функции применяются. Паттерн-матчинг тот же.

Паскаль, Ява тут точно рядом не лежали. Вообще ничего из этих языков Rust не взял.

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

использовать и развивать MLton

Хотя бы, чтобы он не выжирал всю доступную память и компилировал быстрее чем за 10 часов.

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

ООП там совсем другое.

Аминь.

Duck-Typing не работает.

Аминь.

Все плюсовые приёмы работы с шаблонами тут не примениы.

Аминь.

Концепция управления жизнью объектов абсолютно другая.

Аминь.

Исключений нет.

Аминь.

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

Вообще хоть Rust и сравнивают с C++, по-моему он очень далёк от него.

Просто сложно выбрать другой язык, с которым его можно сравнить, потому что в своей нише (которую пытается занять rust) C++ один.

Kuzy ★★★
()

Заржавело. Закапывайте.

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

Связанных с этим приседаний с exception-safe кодом, соответственно, тоже нет.

Веселье с паникой в деструкторе осталось.

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

Ну макросы-то в расте как раз не хуже, гигиена, паттерн матчинг, все дела. Смотрятся слегка коряво, ну так тут либо скобочное месиво гомоиконичность, либо корявые макросы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.