Войти
ФлеймФорумПрограммирование

Зачем уродуют С++ (61 стр)

Страницы: 160 61 62 63 64 Следующая »
#900
10:15, 24 ноя. 2017

Nomad
> שָׁלוֹם
Я так и знал, что у крестонеосиляторов кончатся аргументы.


#901
12:01, 24 ноя. 2017

0iStalker
> Во флейме?! 0_o
Ну а сейчас слишком софткорно, ощущения не те.

#902
10:33, 25 ноя. 2017

Шёл 2017 год. Крестовики по-прежнему боролись с printf:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры
#903
12:30, 25 ноя. 2017

Panzerschrek[CN]
> Шёл 2017 год. Крестовики по-прежнему боролись с printf:

И до сих пор никто не поборол

#904
11:31, 27 ноя. 2017

Долго же я читал эту тему. Вот реализация leftpad с использованием моей библиотеки Intra:

String LeftPad(StringView s, size_t n, char fill=' ')
{
    return Drop(Range::Repeat(fill, n), s.Length()) + s;
}
Range::Repeat создаёт диапазон, котрый ведёт себя как массив из n элементов, равных fill, всё это происходит без выделения памяти.
Drop удаляет из него до указанного количества символов, но не больше, чем есть.
Оператор + принимает любые два диапазона символов и конкатенирует их в String за одну аллокацию.
При этом благодаря StringView, функция принимает строки любого вида, представляющие собой массив char - это может быть Си-строка, std::string, мой String, std::vector<char>, std::array<char, N>. Добавив немного шаблонной магии, можно заставить эту функцию принимать вообще любые диапазоны, потоки и контейнеры, включая текстовые файлы и связные списки символов.

Кстати, если результирующая строка не длиннее 11 байт на 32-битной платформе или 23 на 64-битной, то вообще всё делается без аллокаций. При этом никаких накладных расходов на буфер на стеке sizeof(String) == 12 и 24 соответственно.

#905
11:42, 27 ноя. 2017

gammaker
> return Drop(Range::Repeat(fill, n), s.Length()) + s;
s.Length() - тут точно верно применен?

p.s. и почему Drop, а не Trunc? :)

#906
11:54, 27 ноя. 2017

Vitorio
> s.Length() - тут точно верно применен?
С чего бы ему не быть верно применённым? Максимальный паддинг достигается, когда строка пустая, уменьшается с длиной строки и отсутствует, когда она не короче, чем n.

Vitorio
> p.s. и почему Drop, а не Trunc? :)
Я использовал терминологию диапазонов языка D. Там так называлось. Да и в функциональных языках, насколько я знаю, такая терминология.
Кстати, Drop выкидывает первые элементы, а не последние. В данном примере это неважно, но важно для диапазонов, которые могут не знать своей длины или быть бесконечными.

#907
11:57, 27 ноя. 2017

gammaker
Все понял. Теперь дошло как работает Drop. Спасибо!

#908
16:53, 27 ноя. 2017

Всю тему запороли скучным спором про арабский(

#909
9:57, 28 ноя. 2017

И чего, больше никто не прокомментирует мой leftpad? Столько было реализаций, а у меня самое короткое и эффективное решение. Ну если конечно не тащить мою либу только ради него. И оно демонстрирует мощь, универсальность и в то же время эффективность диапазонов в моей либе.
Я в последнее время всё больше пишу на JS, который тут обсуждали, и даже там нет такой выразительности. Часто приходится писать циклы там, где можно было бы обойтись одной строкой в C++/Intra. А библиотеку для JS писать не вариант, потому что там нет zero cost abstraction. Придётся платить её размером и производительностью.
Я считаю, что нужно всего два языка - C++ (или лучше D когда/если дорастёт) для того, что требует высокой производительности и JS для веба и других не критичных к производительности вещей, где нативный JSON и динамическая типизация будет удобной. Конечно у этих языков должны быть такие же удобные библиотеки, как у языков-конкурентов, причём образующие единую экосистему, а не помойку слабосвязанных библиотек с дублирующимся базовым функционалом.
Я вот недавно изучал Java, и так и не понял, зачем она нужна. Из-за отсутствия value типов и нормальных generic'ов она жрёт в разы больше памяти на ровном месте, без причины. Кода на ней нужно писать дофига, я как-то не заметил прироста продуктивности по сравнению с плюсами. Единственные плюсы в плане скорости разработки - это автоматическое подтягивание зависимостей, сборщик мусора и наличие обширной стандартной библиотеки, и других библиотек, написанных в том же едином стиле и хорошо сочетающихся со стандартными. Что мешает написать такое же в C++ и D?

#910
10:12, 28 ноя. 2017

gammaker
> Я вот недавно изучал Java, и так и не понял, зачем она нужна.

Это диагноз, батенька :)

#911
10:28, 28 ноя. 2017

gammaker
к подобным умозаключениям пришел, щас во всю тестирую связку qt c++ вместе с qml js. Причем qt дает весь механизм связки с++ и js, QMap отлично превращается сама в QVariant, который легко передается в JS переменную, где из обычного объекта читаешь property, которые были сделаны из ключ-значения мапы. А если учесть, что сама мапа из вариант типа, то спокойно делаются сложные JS объекты, чем я и пользуюсь. Плюс декларативный синтаксис QML объектов идеально подходит для GUI. Может под новый год, скину сылку на свой github покидать какашками свой проек-пример, главное успеть доделать его. 

#912
14:01, 28 ноя. 2017

Не подумайте что я того, но лучше бы в C++ добавили возможность программировать на GPU и для GPU (и NVidia, и AMD Radeon).

#913
14:06, 28 ноя. 2017

gammaker
> Кода на ней нужно писать дофига,

Да? Можно примеры в студию ?

#914
14:09, 28 ноя. 2017

capitalknew
> Не подумайте что я того, но лучше бы в C++ добавили возможность программировать
> на GPU и для GPU (и NVidia, и AMD Radeon).
CUDA

Страницы: 160 61 62 63 64 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.