Здравствуйте, vdimas, Вы писали:
V>·>Как правило в таких применениях структуры данных довольно плоские и простые (или их специально сводят к таковым).
V>Как правило для публичного интерфейса к таким структурам — массивам байт все-равно идут ref-объекты (кроме числовых и булевских значений), т.е. КАЖДАЯ операция чтения или записи полей такой структуры часто сопровождается созданием ref-объекта.
Может и "как правило", но не обязательно (собственно как и в C++). Просто не делай так если важно LL.
V>·>Если же замутить что-то навороченное даже на плюсах — с классами, с наследованием, виртуальными функциями, овнершипством, то в итоге получится то же самое — индирекции, перемешивание, проблемы удаления и прочие приседания. Чудес не бывает.
V>Плюсы — это мультипарадигменный язык, позволяющий играть дизайном как душе будет угодно. Виртуальные ф-ии нужны исключительно для абстрактных типов, ну или заменой им можно считать лямбды и прочие std::function.
V>Вот у тебя некий пост-процессор данных может быть таким абстрактным функциональным типом, но через это пост-процессор прогоняются вполне себе "плоские" данные. Стоимость вызова std::function примерно равна стоимости одного виртуального вызова, т.е. порядка 2-3ns в цикле для современной техники.
Ок. А можно ближе к сабжу?
V>·>Угу. Зато работает, а это — самое важное. И ещё раз повторяю, это будет малой долей всего кода системы.
V>Да не работает оно. Индексы разметки все-равно в виде ref-типов хранятся.
Ну например индекс разметки [FIX tag]->[позиция в буфере сообщения] может храниться как "new int[65536]" (tag id в fix == 2 байта) и этот самый массив в единственном экземпляре может жить в gen2 и в кеше вечно.
EP>>>Не помню точную цитату, но суть в следующем — на заре вычислительной техники кто-то возмутился по поводу компиляторов языков (что-то типа Fortran или Algol) мол зачем нагружать компьютер той рутинной работой (компиляцией), с которой хорошо справляются девушки.
V>·>Вброс: зачем нагружать компьютер той рутинной работой (сборкой мусора), с которой хорошо справляются сиплюсплюсники.
V>Скажи, неужели все эти вещи ни разу не интересны? ))
Интересны, но не в этой теме. Здесь мы обсуждаем dotnet vs java.
EP>>>Так вот эти нарезатели байт-буферов прям как те самые девушки занимаются рутинной механической работой, с которой прекрасно справляются компиляторы, тем более в 2016.
V>·>И сейчас с супер-пупер код написанный для компьютера, а не для человека (ака оптимизированный код) выглядит плохо по сравнению с остальным кодом, даже в плюсах.
V>В плюсах это не так.
V>Самый жутко-оптимизированный код выглядит как совершенно обычный, например:
V>V>MyType * obj = new(context) MyType(args);
V>
И что? А что
в этом коде необычного?
V>·>Возможно что аналогичный плюсовый код был бы лучше явового, но другие достоинства managed кода и gc перевешивают недостаток "плохо выглядещего" кода.
V>Ты зря считаешь, что вся фишка управляемых сред только в GC. Это серьезное заблуждение. Фишка управляемых сред в огромных писанных под них библиотеках/фреймворках. А такое стало возможным не только и не столько из-за ПС, сколько из-за сознательной изолированности от конкретного железа/архитектуры и освобождения от вот этих гирь "необходимости соблюдать совместимость/портируемость". Ну и плюс чудовищные финансовые вложения, ес-но. Ну и плюс всё это было отдано Sun людям даром, хотя в итоге были затрачены сотни миллионов на разработку. Это щедрый прощальный предсмертный подарок этой конторы.
Я и не говорил, что только в GC, я так не считаю. Не приписывай мне ложных высказываний.