LINUX.ORG.RU

Rust, получить аргументы произвольным доступом

 , ,


1

5

1. Задача такова: программе на rust нужно скормить 20 строк, не используя stdin. Программа без аргументов, поэтому можно загонять строки таким образом. При необходимости будет несколько файлов-лаунчеров с нужными строками - не критично. Хочется гибкости и незахламленного кода, что будет производительнее: через аргументы или явно в коде через файл, который в tmpfs? Есть ли ещё способы?
2. Как производным доступом обращаться к значениям std::env::args без накладных расходов? Nth каждый раз проходит по итератору, преобразование в вектор через collect не бесплатно, да и лишний он тут: массива достаточно, но как его получить.. Аргументы разве не в самом процессе хранятся, чтоб как с массивом с ними работать?

что будет производительнее

какой неожиданный вопрос...

пожалуй, правильный ответ тут - попробуй и померь

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)

Эти двадцать строк каждая по мегабайту? Иначе разницы ты не заметишь.

Более того, я почему-то уверен, что этот итератор внутри себя random access, и let args = std::env::args(); args.clone().nth(N) оттранслируется в плюс-минус оптимальный код.

Впрочем, всё-таки подпишусь. Вопрос про std::env::args интересен с точки зрения идиоматичного кода.

intelfx ★★★★★
()

Сейчас подумал, при создании вектора с помощью collect копирования же не происходит, только перемещение - верно?

let args: Vec<_> = std::env::args().collect();
чем отличается от
let args = std::env::args().collect::<Vec<_>>();

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

копирования же не происходит, только перемещение - верно?

Посмотри асм-выхлоп.

чем отличается от

Ничем.

mix_mix ★★★★★
()

Не экономь на спичках и используй Vec.

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