The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Доступен язык программирования Rust 1.15"
Отправлено Ordu, 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.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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