The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Доступен язык программирования Rust 1.15"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для сортировки сообщений в нити по дате нажмите "Сортировка по времени, UBB".
. "Доступен язык программирования Rust 1.15" +1 +/
Сообщение от Orduemail (ok), 05-Фев-17, 23:01 
> Ну мне вот тоже непонятно, зачем этот to_string() - о константе компилятор
> знает абсолютно всё, намерение программиста также абсолютно прозрачно - зачем этот
> мусор?

Во-первых, не прозрачно. s имеет тип auto, и если не использовать to_string(), то туда будет положен именно слайс, статический и immutable. То есть, как минимум, придётся явно указывать тип для s. Во-вторых, неявные преобразования типов -- это ни-ни. В этом отношении раст даже немного вымораживает, нужно явно указывать преобразования, например, из single-float в double-float. Но в случае со строками я не вижу большой беды. Метод to_string создаёт новый объект, он выделяет память из кучи и копирует туда содержимое слайса. Идея сделать это неявным мне, честно говоря, не нравится нисколько.

>  push_str - там более маразм какой-то. От джавы нахватались, что
> ли? Нет, чтобы оператор конкатенации сделать.

Можно и при помощи оператора:

s += ", world";

>  Не, привыкнуть ко всем можно - но зачем делать заведомо неудобные конструкции?
> Отдельно реализованные строки и слайсы - это вообще какая-то совершенно непонятная
> избыточность.

Слайс -- это не строка, это что-то типа сишного массива, они фиксированного размера. &str -- это, грубо говоря, чисто синтаксическая обёртка вокруг &[u8] (указатель на массив из u8, unsigned char'ов, длина которого неизвестна в compile-time). И эта синтаксическая обёртка по-сути нужна только потому, что &str состоит из элементов переменного размера. &str даёт грядку методов для разруливания этого. Если бы rust использовал бы константного размера символы, то никто бы даже не заморочился бы создавать &char, все бы использовали непосредственно &[u8], &[u16] или &[u32], в зависимости от конкретного выбранного кодирования символов.

String же -- это обёртка над указателем на str, который располагается в куче. String заведует lifetime'ом этого str, динамически выделяет/перевыделяет/освобождает память.

Вся эта ситуация, на самом деле, напоминает C++, где есть char[], и есть std::string.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Доступен язык программирования Rust 1.15, opennews, 04-Фев-17, 11:25  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру