Здравствуйте, VladD2, Вы писали:
EP>>Бесплатное освобождение это когда ничего не нужно ни перемещать, ни бегать по развесистым графам, ни мир останавливать. EP>>То есть кроме выделения не производится абсолютно никаких операций. VD>Дык при освобождении ничего и не делается. Точнее даже самого освобождения нет. По графам бегают в других потоках.
Это и есть цена освобождения. Если ты за освобождение считаешь что-то другое — то ок, но это вопрос терминологический и ничего не меняющий. Медленный этап всё равно остаётся как ты его не назови — "освобождение" или "генеральная уборка мусора, для доступа к пространству им занимаемым".
EP>>Pool это когда есть что-то типа free list'а уже готовых кусочков, и вся аллокация/деаллокация сводится к практически бесплатным pop/push в этот free list. EP>>Ни в Java, ни в .NET, GC и близко не приближается по производительности к Pool'у — отсюда и все эти заморочки с garbage-free и т.п. VD>Ох, ох, ох. Еще один спорщик черпающий знания перед ответом в Википедии.
Ссылку я дал тебе дабы избежать путаницу, так как название не всем знакомое (и по его виду можно не понять что это специальный термин), но ты всё равно запутался
Потрать хоть минуту, открой ссылку, и прочитай что там написано — иначе конструктивная дискуссия невозможна, так как ты понимаешь free list как-то по-своему.
VD>Ты все напутал. Free list — это как раз простейший алгоритм используемый в С-шных/С++-ных менеджерах памяти.
Это ты всё напутал. Free list это вообще не алгоритм.
VD>Именно он вызывает фрагментацию хипов и тормоза.
При использовании free list'а как основы пула объектов — вешняя фрагментация всегда нулевая, а внутренняя нулевая почти всегда
VD>Пул же это когда память выделяется большим блоком (пулом) и нарезается для конкретных нужд. Ты ниже это назвал Region-based.
Region это способ организации набора объектов разного размера, при котором все они деаллоцируются одним махом.
Пул же, хоть и допускает возможность такой же быстрой деаллокации всех объектов в некоторых случаях, в общем случае не предполагает этого. Более того, в общем случае объекты можно "возвращать" в пул, для повторного использования места ими занимаемого в рамках одной сессии/"времени жизни пула". А если ещё более конкретно, то когда говорят о пулах — обычно подразумевают управление блоками фиксированного размера.
Смешивать понятия пулов и регионов (хотя они и имеют некоторые схожие черты) — неправильно, и только вносит терминологическую путаницу.
VD>Free list же не имеет к нему никакого отношения.
Free list это всего лишь способ нарезки куска памяти, при котором не теряется память на связи между узлами списка.
VD>Это всего лишь тупой и тормозной алгоритм из дремучих веков.
Смешно
VD>А вот в GC используют Region-based (если тебе так понятнее) принцип.
При region-based есть только выделение, и никаких остановок мира или конкурентных-пакостей
VD>Выделение памяти в GC — это всего лишь увеличение указателя на начало свободной памяти в хипе.
EP>Непонятно с чем связанно удивление — это много или мало?
EP>У Compacting GC выделение памяти на Happy-Path это, фактически, просто увеличение указателя на требуемый размер
Проблема в том, что ты априори недооцениваешь собеседников, при том что сам плаваешь в теме.
VD>Освобождение вообще не просходит.
GC это и есть пляска для освобождения/reclaiming памяти занимаемой мусором.
VD>Так что да, в дотнете используется самый быстрый в мире алгоритм распределения памяти.
Ты сегодня прям отжигаешь, T.G.I.F.
VD>Дефрагментация и тем более обход графа обычно идут в параллельных потоках. Учитывая, что голов у современных процессоров довольно много, это не сильно напрягает рабочие потоки.
Если бы всё было шоколадно, то не было бы этих заморочек с garbage-free design.
VD>Быстрее, как я уже говорил, только пулы (Region-based, если тебе так угодно) которые создаются под группу объектов которые имеют одинаковый срок жизни. При этом можно уничтожить весь пул, а не возиться с каждый отдельным объектом.
Это Region, а не Pool.
VD>По жизни в С++, если нужно строить графы объектов, обычно используют обычную кучу и один из способов полуавтоматического управления памятью (смартуказатели со стратегиями владения или подсчет ссылок). Например, в броузерах обычно используется именно подсчет ссылок. Причем идет тенденция к переходу на GC.
Я же и говорю — есть специфические задачи где возможны жёсткие циклы.
EP>>Да, но используются они совершенно по-разному. EP>>В C++ создавая вектор N объектов конкретного класса происходит ровно одна аллокация (не учитывая внутренние под-объекты в куче). В C# же, а уж тем более в Java, будет N+1 аллокация — одна на массив указателей, и по одной на каждый объект. VD>Ну, это явное заблуждение. В Шарпе (точнее в дотнете) есть варианты. Можно создать структуру и она будет точно так же размещена в массиве.
Ты конечно же не читатель — слово "класс" я для кого подчеркнул? То что в C# возможно использовать структуры это конечно хорошо (поэтому я и сказал "уж тем более в Java"), но это требует дополнительных движений (которые по умолчанию и не делают), т.е. нельзя просто взять и положить любой класс как структуру в массив.
EP>>Самый быстрый аллокатор это Region/Arena/Zone. Аллокация это просто увеличение счётчика текущей позиции в свободной памяти на выделяемый размер, а деалокации нет, то есть бесплатная. EP>>Опять же, по производительности GC и рядом не стоит с регионами, и разница отнюдь не "некоторое количество тактов" — это как небо и земля. VD>Очень смешно. Я тебя расстрою. В GC именно так память и выделяется.
Выделяется она хоть и так, но на этом выделении работа не заканчивается, тормозная часть начинается потом, которой у регионов нет от слова совсем.
VD>Разве что интерлок используется, для потокобезопасности.
Не используется, память берётся из TLS-кусочка, читай ссылку выше.
VD>Region-based (он же пул) без сборки мусора — это очень специфичная штука подходящая не очень часто.
А я разве говорил что она универсальная? Я привёл пример самого быстрого аллокатора, в котором вообще нет освобождения, и никакой другой дополнительной работы
VD>Так что, как говорится, не учи отца ... делать детей.
Пальцы разогни, ок?
VD>GC — это общее решение автоматического проблемы управления памятью. Она тебе просто перестает волновать.
И именно поэтому "не" волнуются об stop-the-world, LOH'ах, и "не" пилят garbage-free.
VD>Основан он на том же пуле.
GC? На пуле?
VD>Подсчет ссылок обычно более медленный механизм нежели GC. Если бы это было не так, то GC и строили на базе подсчета ссылок, так как реализация этого способа элементарна.
Подсчёт ссылок, где при каждой малейшей передачи ссылки происходит передёргивание счётчика, да ещё и встроен алгоритм детекции циклов — действительно не быстрая штука. Только мы здесь обсуждаем не её.
Re[47]: Nemerle через 5 лет - выстрелит или скончается?
как работает GC дотнета. Так что я выбор делал осознанно и знаю о чем говорю. Можешь себя не утруждать безграмотными ликбезами.
Что характерно, в этом самом QuickHeap, который ты пилил 12 лет назад, как раз и можно было использовать Free List, чтобы не тратить дополнительно место под m_pNext в каждом QHBlock, ты тогда этого не знал.
Но и через 12 лет, когда тебе пытаются дать новую информацию, ты её отказываешься усваивать и начинаешь хамить.
Как ты там цитировал
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
Кстати, у Алкесандреску про подобные пулы хорошо описано в Modern C++ Design 2001 года
Он там и использовал free list. Плюс operator delete который принимает size вторым аргументом (а в C++14 появился подобный delete, который ещё и non-member).
Re[47]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
VD>В это главное верить. Иначе тяжело себе объяснить зачем МС переписывает свои компиляторы и IDE на дотнете.
Готовятся к переезду в Индию? ) Там это будет весьма актуально... )
VD>Из МП в Шарпе действительно не густо. Разве что внешние средства и куцие встроенные ДСЛ-и. Но как язык он в разы удобнее С++. Немерл же это квинтесенция удобства и простоты шарпа и возможностей МП сильно превосходящих С++.
Как интересно... Т.е. оказывается для тебя вполне возможна ситуация, когда язык вообще без МП будет предпочтительнее языка с МП при условии наличия пары мелких украшательств? ))) Необычно такое слышать от вечного проповедника МП... )))
Кстати, с таким подходом, в Немерле вообще нет смысла, т.к. кроме МП там нет ничего интересного. Я уже молчу про ограниченность сомнительной .net платформой.
Re[52]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
_>>Для начала тогда уж std::atomic, а не эта хрень из win api. VD>Это важное уточнение .
А ты думаешь разницы нет? )
VD>Как оверхэд может быть нулевым, если есть конструкторы, деструкторы и, тем более, подсчет ссылок?
Конструкторы и деструкторы естественно инлайнятся по полной. Иначе бы эти килобайты высокоуровневых абстракций из boost'a не превращались в пару ассемблерных инструкций в итоге. )
А обязательный подсчёт ссылок ты откуда в C++ взял? ) Ты случаем не путаешь C++ с COM? )
VD>Как бы оверхэд есть оверхэд. В управляемом мире при копировании ссылок никаких затрат нет. Просто указатель переезжает в другую область памяти. Синхронизация если и есть, то только при выделении памяти (для сдвижки указателя хипа), или нет вообще, так как хип локален для потока.
Что за операция такая, "копирование ссылок"? ) Непонятно. )
VD>Про освобождение вообще говорить не чего. Для ЖЦ-объекта понятие "освобождение" нет в принципе. Нет ссылок — значит умер.
Если бы такое написал какой-нибудь новичок в java/c#, то это я бы ещё понял. Но ты же вроде бы разбираешься и вполне представляешь себе какую цену приходится платить за "автоматической управление памятью"... Тогда зачем такое писать? )
Re[60]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
VD>Да вы тут совсем пенсами замедлись бы. Все, блин, эксперты один экспертнее другого. Вот учите плюсам человека который в плюсах собак по больше вашего съел.
VD>Старайтесь! Это повышает ЧСВ!
О, а можешь ответить на один простенький вопросик? ) В каком году ты написал свой последний серьёзный проект на C++? )
Re[47]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
VD>Дык при освобождении ничего и не делается. Точнее даже самого освобождения нет. По графам бегают в других потоках. При этом остальные потоки не останавливаются. И мертвых объектов в этом графе нет. Мир останавливается не всегда. Есть конкурентные GC. А те что останавливают, делают это на очень короткие промежутки времени и исключительно для дефрагментации памяти, о которой в С++ даже мечтать нельзя.
Azul C4 ещё круче. Он даже для дефрагментации памяти потоки не останавливает.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
VD>Плюс все зависит от стиля. Вольфхаунд у нас может месяц не комитить ни фига. Не скажу, что это хоршо. Но это факт.
Вольфхаунду тупо нечего комитить пока он не решит очередную задачку неберучку.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, alex_public, Вы писали:
STD>>Популярность Немерле — это примерно как популярность Линукса. С одно стороны ядро, с другой — куча дистрибутивов. Я полагаю, что делая дистрибутив "шарп с плюшками", сложно придти к популярности. Потому что флагман известен, но цели его не ясны, а добежать туда раньше можно только случайно, но и это не гарантирует успеха. _>Сомнительное сравнение, т.к. Линух уже является явным лидером в нескольких областях.
Линукс — это ядро, на базе которого создаются дистрибутивы для решения конкретных задач. А востребованность дистрибутива зависит от того, как он эти задачи решает. Продолжая аналогию, можно сказать, что займись сообщество созданием дистрибутива, слепо копирующего условную MaсOS, то шансы на лидерство в нескольких областях сильно бы упали.
_>А у Немерле пока что нет ни одной такой области.
Потому что копируя C#, Nemerle попадает в его же ниши и проигрывает конкуренцию. Отсюда и бесконечные вопросы "почему Немерле не совсем C#?" и "на кой ляд он мне сдался Немерле, если мне и в экосистеме C# хорошо?".
Re[47]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, VladD2, Вы писали:
_>>Да, только я там же указал, что на большинстве задач стандартные средства C++ заметно превосходят стандартные средства Java/C#. VD>Это языком если. А на практике плюсовый код все чаще переписывается на Явах с Дотнетами, а плюсовый выкидывается. У плюсов остаются только ниши где за производительность можно заплатить очень дорого, так как затраты на разработку не соизмеримы с доходами. Но это удел высокотиражного софта вроде ОС, офисных приложений и игр-блокбастеров.
Если ты считаешь, что быстродействие языка — это единственное, что определяет его применимость, то ты явно ничего не понимаешь в бизнесе. Фактор возможности использования низкоквалифицированных программистов намного важнее для любых не IT компаний.
VD>Ну, еще ниши где управляемые языки не применимы (драва, например).
Таких ниш очень много. И это связано не только с доступом к железу, но и с быстродействием.
VD>В остальных же процесс перехода на более безопасные языки идет полным ходом. Люди даже тормозной Питон используют лишь бы с плюсами не связываться. Хотя тебя послушать, так питон отдыхает.
Хы, я как раз Питончик люблю и везде его советую. )))
VD>Вот ты над чем на работе работаешь?
C++, спец. язык для SIMD, Python, Prolog, JS и ещё куча всяких узкоспециализированных (типа xslt, wix, plantuml, и т.д.).
VD>Очнись. Переход с С++ на C# шел все прошлое десятилетие. В MS VS объем С++ кода сократился со 100%, то 20. А в скором времени и его не станет.
О да, в фантазия MS. )))
VD>Я как бы не в восторге от того, что в C# нет даже тех возможностей МП, как в С++. Но это не значит, что у Шарпа нет других преимуществ по сравнению с плюсами.
Для профессионала вообще нет никаких преимуществ. В принципе. А вот для бизнеса, у которого it отдел является не профильной деятельностью, преимущества очевидны...
VD>По уму нужно было перейти на новый найтивный язык вроде Ди. Но все носятся вокруг этого пристарелого С++ с писаной торбой и норовят померяться пенисами в каких-то там мелочах.
Никто и не говорит, что C++ — это идеал. Просто ничего лучшего пока не видно. Ну точнее есть D и в перспективе Rust, но они пока хороши только как сами языки, а вот инфраструктуры за ними никакой...
VD>C# — это банально более продуманный и последовательный язык с автоматическим управлением памятью на котором проще писать. Проще и все тут. Достаточно попробовать написать несколько приложений и вопрос отпадет сам собой.
Это не верная формулировка. Для специалиста как раз на C++ может оказаться проще. Правильная формулировка такая: низкоуровневому программисту проще писать на Java/C#, чем на C++. И это действительно чистая правда.
VD>Как бы хаять С++ нет желания. Его используют и будут использовать. У него есть свои ниши. Но и превозносить его тоже не стоит. У языка куча недостатков которые уже вряд ли можно исправить.
Ну так и про C# у меня точно такое же мнение. У него есть своя ниша, в которой он очень хорош. Причём если считать в программистах, а не в инсталляциях софта, эта ниша ещё и побольше чем у C++.
Re[12]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, AndrewVK, Вы писали:
AVK>Он даже не является надмножеством самой самой основы шарпа. В этом и проблема.
Что такое самая основа шарпа? C# — монолитный язык, ниже него только CLI.
AVK>Есть одна проблемка — минималистичный ML нужен только гикам. AVK>Дело не в неумности тех, кто занимается шарпом. Дело в необходимости обеспечения обратной совместимости даже в мелочах. 100% компилируемость старого кода — строгий императив. AVK>так я лет 5 назад предлагал взять шарп, выкинуть из него некоторое количество хвостов и косяков, да добавить туда самые вкусные моменты — ПМ, сахарок разный типа того, что отчасти реализовали, отчасти напредлагали в C# 6 и т.п.
Вот пусть C# старый код на C# и компилирует. Как взять и выкинуть из него хвосты и косяки — непонятно. Как взять нужный только гикам минималистичный ML (содержащий в себе базовые идиомы вроде ПМ, ФВП, классов, макросов) и добавить разный сахарок — понятно лучше. Другой вопрос, что один C# уже есть и нужность второго вызывает сомнения.
STD>>Ну микроядро языка позволяет строить разные языки. AVK>Опять позволяет. Все разговоры в будущем времени. >самые вкусные моменты — ПМ, сахарок разный типа того, что отчасти реализовали, отчасти напредлагали в C# 6 и т.п.
Все это уже есть, но пользоваться этим якобы мешают "отдельные яйца выеденного не стоящие проблемочки".
Я пишу "якобы мешают", потому что считаю "довольно далеко отстоящесть от шарпа" надуманным обоснованием малой популярности Немерла. И вижу 3 варианта:
1. "самые вкусные моменты" не настолько вкусны, чтобы ради них потратить 5 минут на изучение таблички. Это значит, что человека устраивает C#. Ведь, к примеру, языкам под JVM синтаксические различия с Java не мешают, а, наоборот, подаются в качестве достоинства.
2. существуют иные (реальные) технические проблемы.
3. популяризацией Немерле никто не занимается, а само оно что-то не взлетает.
Re[49]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
EP>>Естественно имелась в виду не просто "forward" ссылка, а именно использование. EP>>Если это доступно — то в двух словах какой механизм? WH>Это и шаблоны не могут.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Функция использует шаблон, который вызывает функцию — всё в одном TU, и даже вычисляется на этапе компиляции
Ну и я могу сделать два макроса, которые друг друга вызывают.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[51]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
EP>>Функция использует шаблон, который вызывает функцию — всё в одном TU, и даже вычисляется на этапе компиляции WH>Ну и я могу сделать два макроса, которые друг друга вызывают.
Естественно что аналогичный результат можно получить и другими способами, речь-то не об этом.
Выше было заявлено, что шаблоны это фактически препроцессор, что макросы Nemerle это надмножество шаблонов, и что на них можно сделать всё то, что и на шаблонах.
Я привёл контраргумент, а потом конкретный пример в поддержку этого аргумента. constexpr там лишь усиливает эффект, но грубо говоря не обязателен. И там не два шаблона, а шаблон функции и функция.
Re[15]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, STDray, Вы писали:
STD>Я думал так: when/unless созданы для побочных эффектов, а ifelse — для "чистых" вычислений. Но в этом нет смысла, потому исключительно вопрос вкуса. http://en.wikipedia.org/wiki/Dangling_else
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[52]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>constexpr там лишь усиливает эффект, но грубо говоря не обязателен. И там не два шаблона, а шаблон функции и функция.
Без constexpr получается "forward" ссылка.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[53]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
EP>>constexpr там лишь усиливает эффект, но грубо говоря не обязателен. И там не два шаблона, а шаблон функции и функция. WH>Без constexpr получается "forward" ссылка.
Да, можно и так трактовать, но как раз constexpr и устраняет неоднозначность в трактовке результата. Для этого, собственно, он там и стоит.
Re[54]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Да, можно и так трактовать, но как раз constexpr и устраняет неоднозначность в трактовке результата. Для этого, собственно, он там и стоит.
В этом случае мы имеем два макроса.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[55]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
EP>>Да, можно и так трактовать, но как раз constexpr и устраняет неоднозначность в трактовке результата. Для этого, собственно, он там и стоит. WH>В этом случае мы имеем два макроса.
Почему? constexpr функция тоже макрос?
Buratino можно вызывать с runtime значениями, брать адрес и т.п.
Re[56]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Почему? constexpr функция тоже макрос? EP>Buratino можно вызывать с runtime значениями, брать адрес и т.п.
Буратин два. Один макрос. Второй рантайм функция.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн