WH>>>Объясни, как компилятор поймет, что нужно щелкать счётчиком ссылок 2, а не 4 раза? J>>Почитай что-нибудь про move-конструкторы, знаток вместе взятых. WH>Я знаю, что такое move-конструкторы. Я их еще до С++11 делал. WH>А теперь давай разбери конкретный пример. WH>Как тут поможет move-конструктор. WH>Подсказка: move-конструктор тут использовать нельзя от слова совсем.
"Конкретный пример" по ссылке выше? Я ничего в нем не понял, сорри. Если не секрет, что он делает?
J>>Вот-вот, знакомая песня про мифический софт, который у кого-то (у тебя?) в продакшене падает. J>>У нас вот ничего не падает уже который год, и мы смотрим на тебя с недоумением. J>>Что-то мы явно делаем не так. WH>Тот софт который писал лично я тоже не падает. WH>Но про большинство других разработчиков я это, к сожалению, сказать не могу.
Т.е. смотри — у меня не падает, у тебя не падает, у Евгения не падает, у еще доброго десятка С++ программеров в соответствующем форуме тоже не падает. Но стоит теме С++ всплыть в форуму по Немерле — и всё начинает падать, аки перезрелый виноград.
Здравствуйте, WolfHound, Вы писали:
_>>Собственно ничего. Ну или с другой стороны всё, но в таком случае оно и к C# относится (у нас же там имеется unsafe, не так ли?). WH>Его отдельно включать надо.
Угу, когда не хватает производительности или нужного доступа. А вот мне на C++ включать "режим C" вообще не надо, т.к. всего хватает на нормальном уровне абстракций. )
_>>Для начала тогда уж std::atomic, а не эта хрень из win api. WH>Не важно. Уверен, что std::atomic на винде через эту хрень и работает. WH>Ну, или эту хрень туда тупо скопипастили.
Мдаааааааааа...
А ты например в курсе про x86 инструкцию CMPXCHG и то, как она используется для синхронизации в современном C/C++? )
_>>Ну а потом собственно причём тут это? Мы говори о нулевом оверхеде неких абстракций. А здесь у нас совсем не абстракция, а прямая функциональность — синхронизация. Так что само понятие оверхед тут не применимо, т.к. ресурсы тратятся не на реализацию абстракции, а на "дело". Ну или ты хочешь сказать, что можешь привести случаи, когда в C++ синхронизация нужна, а в том же случае в C# не нужна? ) WH>
Здравствуйте, WolfHound, Вы писали:
EP>>Если прям стоит задача минимизировать лишние передёргивания, то можно запретить неявные копии и оставить только явные move или copy — в любой непонятной ситуации компилятор будет задавать вопрос. WH>Ну, так я и говорю, что тебе придётся всё это руками выписывать.
Не всё, а только в тех вариантах где возможна копия. Там где возможны только move — неявные move пусть вызываются.
EP>>Это уже вопрос к корректности, надёжности, тестированию, а не к производительности. WH>Если на асме каждую инструкцию отполировать будет ещё быстрее.
Да, и?
EP>>Как-будто конкуренция куда-то делась EP>>
EP>>Continuously Concurrent Compacting Collector
WH>Не стоит отвечать на одно слово. WH>В данном случае это слово означает, что stop-the-world не бывает вообще.
Действительно не стоит, речь ведь шла не только про stop-the-world, но и про прочие GC радости
А уж какие там конкретно GC радости в замену нескольких атомарных передёргиваний счётчика — рояли не играет.
EP>>Это опыт реальных проектов. Как ты говорил "уж поверь практикам". WH>У меня С++ного опыта тоже не мало.
И что, прям весь код был заселён ref-counting'ом, и он там был действительно к месту?
EP>>При этом не отрицаю что есть некоторые задачи где время жизни определяется внешними факторами. А иногда даже таким способом, что возможны жёсткие циклы в графе зависимостей. WH>Во-во. Распутать клубок зависимостей в нитре у меня при всём желании не получится. WH>Хотя конечно можно сложить каждый отдельный клубок в собственный пул.
Можно и так, а при желании можно и GC — C++ -то позволяет Для некоторых задач GC действительно удобнее всего, но таких задач крайне мало.
EP>>P.S. Кстати, а есть ли готовая возможность в Nemerle для освобождения ресурса, как только все ссылки на него выйдут из scope? using'и или их аналоги тут не особо помогают: WH>Я и на С++ так никогда не писал.
Конечно здорово, но это не ответ на вопрос. Если ничего готового нет — то ок, с prompt finalization проблемы
Re[57]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, jazzer, Вы писали:
J>"Конкретный пример" по ссылке выше? Я ничего в нем не понял, сорри. Если не секрет, что он делает?
Не понял, а отправляешь меня читать TFM. Не хорошо.
Создаёт локальную переменную и присваивает её полю объекта.
J>Т.е. смотри — у меня не падает, у тебя не падает, у Евгения не падает, у еще доброго десятка С++ программеров в соответствующем форуме тоже не падает. Но стоит теме С++ всплыть в форуму по Немерле — и всё начинает падать, аки перезрелый виноград.
Проблема в том что на предыдущих работах где очень много чего было на С++ у большинства коллег всё регулярно падало.
Я тоже далеко не сразу научился писать, так чтобы не падало.
Тех кто умеет писать на С++ так чтобы не падало очень не много.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[55]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Не всё, а только в тех вариантах где возможна копия. Там где возможны только move — неявные move пусть вызываются.
Их не так много.
1)Передача объекта в функцию. Но для этого обычно используются константные ссылки.
2)Возвращение из функции свеже созданного объекта или локальной переменной.
EP>>>Это уже вопрос к корректности, надёжности, тестированию, а не к производительности. WH>>Если на асме каждую инструкцию отполировать будет ещё быстрее. EP>Да, и?
И сколько времени у тебя на это уйдёт?
EP>Действительно не стоит, речь ведь шла не только про stop-the-world, но и про прочие GC радости EP>А уж какие там конкретно GC радости в замену нескольких атомарных передёргиваний счётчика — рояли не играет.
Это ещё большой вопрос.
EP>И что, прям весь код был заселён ref-counting'ом, и он там был действительно к месту?
Разные проекты были. Был такой, где действительно всё было засалено этой субстанцией. И иначе было нельзя.
EP>Можно и так, а при желании можно и GC — C++ -то позволяет Для некоторых задач GC действительно удобнее всего, но таких задач крайне мало.
Это не ГЦ. Это говно.
Нормальный ГЦ С++ не позволяет.
EP>Конечно здорово, но это не ответ на вопрос. Если ничего готового нет — то ок, с prompt finalization проблемы
Ты первый кто её просит. А раз никто не просит то никто и не делает.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[53]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, alex_public, Вы писали:
_>Угу, когда не хватает производительности или нужного доступа. А вот мне на C++ включать "режим C" вообще не надо, т.к. всего хватает на нормальном уровне абстракций. )
Не правильно. Ты его тупо отключить не можешь.
_>Мдаааааааааа...
Сам такой.
_>А ты например в курсе про x86 инструкцию CMPXCHG и то, как она используется для синхронизации в современном C/C++? )
А интерлокеды что, по-твоему, делают?
_>И что должна означать этот код? ) Я не вижу какое он вообще имеет отношение к вопросам синхронизации.
Прямое. Я посчитал сколько раз С++ щёлкнет счётчиком ссылок.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[58]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, jazzer, Вы писали:
J>>"Конкретный пример" по ссылке выше? Я ничего в нем не понял, сорри. Если не секрет, что он делает? WH>Не понял, а отправляешь меня читать TFM. Не хорошо. WH>Создаёт локальную переменную и присваивает её полю объекта.
И всё? А зачем там тогда вообще локальная переменная? Почему нельзя присвоить/поменять поле объекта напрямую?
Плюс поле у тебя, вроде как, по значению хранит объект, а локальная переменная — по указателю в кучу.
Или там везде указатели на самом деле?
В общем, я не понимаю смысла этого кода. На С++ он смысла не имеет, тупо не скомпилируется. Не хорошо (с).
ЗЫ Раз ты знаешь, что такое move-constructor, то ты ведь и про move-assignment Тоже, наверняка, знаешь?
J>>Т.е. смотри — у меня не падает, у тебя не падает, у Евгения не падает, у еще доброго десятка С++ программеров в соответствующем форуме тоже не падает. Но стоит теме С++ всплыть в форуму по Немерле — и всё начинает падать, аки перезрелый виноград. WH>Проблема в том что на предыдущих работах где очень много чего было на С++ у большинства коллег всё регулярно падало. WH>Я тоже далеко не сразу научился писать, так чтобы не падало. WH>Тех кто умеет писать на С++ так чтобы не падало очень не много.
Ну хз. Мне везет, наверное. К нам один раз только попало такое чудо в команду — его быстро перевели в скрипто-писатели (и при первой же возможности уволили, ессно). Ну так он и на Питоне "с GC и лямбдами" умудрялся так овнокодить, что потом еще пару лет разгребали за ним его скрипты, и они вдруг начинали работать 5 минут вместо 2 часов (серьезно, так и было). Так что, имхо, тут не в языке проблемы обычно. Программер, у которого падают программы на С++, будет генерить глюкалово на любом языке.
Здравствуйте, jazzer, Вы писали:
J>И всё? А зачем там тогда вообще локальная переменная? Почему нельзя присвоить/поменять поле объекта напрямую?
Это минимальный пример воспроизводящий проблему.
В реальности там может быть намного больше кода. Просто я его не написал, ибо к проблеме он отношения не имеет.
Это можно считать профессиональной привычкой. Ибо отладить баг компилятора на маленьком примере намного проще, чем на большом. Так что я сразу сжимаю примеры до минимума.
J>Плюс поле у тебя, вроде как, по значению хранит объект, а локальная переменная — по указателю в кучу. J>Или там везде указатели на самом деле?
В .НЕТ это зависит от типа объекта.
J>ЗЫ Раз ты знаешь, что такое move-constructor, то ты ведь и про move-assignment Тоже, наверняка, знаешь?
Знаю. Но при присвоении одной переменной другой его использовать нельзя.
J>Ну хз. Мне везет, наверное. К нам один раз только попало такое чудо в команду — его быстро перевели в скрипто-писатели (и при первой же возможности уволили, ессно). Ну так он и на Питоне "с GC и лямбдами" умудрялся так овнокодить, что потом еще пару лет разгребали за ним его скрипты, и они вдруг начинали работать 5 минут вместо 2 часов (серьезно, так и было). Так что, имхо, тут не в языке проблемы обычно. Программер, у которого падают программы на С++, будет генерить глюкалово на любом языке.
У меня пока меленький был тоже падали. Уверен, что и у тебя падали.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[54]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, WolfHound, Вы писали:
_>>А ты например в курсе про x86 инструкцию CMPXCHG и то, как она используется для синхронизации в современном C/C++? ) WH>А интерлокеды что, по-твоему, делают?
Для начале это функции win api, со всеми вытекающими последствиями для быстродействия... Ну а внутри там насколько я помню xadd.
_>>И что должна означать этот код? ) Я не вижу какое он вообще имеет отношение к вопросам синхронизации. WH>Прямое. Я посчитал сколько раз С++ щёлкнет счётчиком ссылок.
Ээээ, а там где-то в этом коде находятся сущности работающие по принципу подсчёта ссылок? ) И как я должен был об этом догадаться по такому коду?
И главное, а зачем они там собственно? )
Re[2]: Nemerle через 5 лет - выстрелит или скончается?
А можете пояснить чего вам там не хватало?
Вот очень интересно.
Лично я когда писал диплом, я настолько плохо понимал программирование, что делать какие либо выводы не стал бы.
Хоть к тому времени я уже год как работал, а это отрезвляет после домашнего кодинга.
Re[44]: Nemerle через 5 лет - выстрелит или скончается?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>В вопросах производительности не имеет особого смысла рассматривать выделение памяти отдельно от освобождения.
А что с ним не так? В средах с GC освобождение памяти бесплатно. Наоборот, платить приходится за живые объекты (временем затрачиваемым на построение графа живых объектов и дефрагментацию кучи).
В дотнете и явы ты используешь эдакий универсальный пул. Причем используешь не от случая к случаю, а все время. Следить за тем как ты освобождаешь память не надо.
EP>Но да, есть случаи, как уже выше сказал alex_public, где стандартный аллокатор управляемых языков будет быстрее стандартных new/delete C++
Дык стандартный и используются в 99% случаев. Для отдельных задач конечно можно создать более быстрые решения, но в общем случае они не работают. Разве что межпоточной безопасностью можно пренебречь и выиграть с этого некоторое количество тактов.
EP>Вот только нужно не забывать, что C++ это не только преимущества в скорости, но ещё и в гибкости. EP>На C# — шаг влево, шаг вправо и упираешься в забор
Да, несомненно. Если мериться с C#, то кое какая гибкость есть. Правда платить за это приходится массой неудобств и костылей/велосипедов для решения даже базовых задач вроде передачи ссылки на метод или долгоживущих объектов в функцию.
Но это по сравнению с C#. А Nemerle, который мы тут обсуждаем этих недостатков не имеет. Он значительно гибче плюсов, и за это не нужно платить неудобствами в повседневной жизни. Он более удобен чем C# и гибче чем C++. Проблемы по ссылки выше в Nemerle просто нет. Но это мелочи.
EP>Обобщённый код (это даже не метапрограммирование) на C++ получается разы короче и проще.
Ну, это преувеличение. Проще писать как раз на C#. C# обладает всегда достаточной гибкость. Но случаи когда ее не хватает не так уж часты. И определяются они неализаций дженериков в донтете. В C++ шаблоны — это по сути препроцессор. Работает он на базе АСТ и облачен в форму обобщений, но реализация именно препроцессорая. В дотнете же дженерики — это первокласная сущность доступная в рантайме. Это позволяет хранить обобщенный код в библиотеках.
Недостаток же гибкости компенсируется использованием функций высшего порядка.
У Nemerle же и эти недостатки дотнета компенсируются еще и макросами. Шаблоны C++ можно рассматривать как подмножество макросов Nemerle. На макросах Nemerle можно сделать все что можно сделать на шаблонах C++ и много чего еще, что шаблонам C++ недоступно. Причем даже если одно и то же можно сделать и на шаблонах, и на макроса, то решение на макросах, обычно, будет более качественным за счет более тесной интеграции с компилятором.
EP>Вот например, на Python можно сделать так (будет работать для любых типов имеющих соответствующие операторы):... EP>Аналог на C++: EP>
Забавный финт ушами. Ничего не скажешь. В C# его можно попытаться воспроизвести на dynamic-ах, но там куча проблем, так что оно точно не будет простым и быстрым. Переменное число параметров в дотнете и C# поддерживается, но типы всех параметров должны быть одинаковы. Кроме того есть проблемы с приведением методов к делегатам. Это надо делать явно.
Вот только это довольно надуманный пример. На практике он мало что дает.
На Nemerle он воспроизводится без малейших проблем и даст решение очень близкое к C++-ному (так как макросы, как и шаблоны, работают во время компиляции).
В макросах тоже поддерживается список параметров, но типы аргументов не важны, так как в данном случае работа идет с кодом (AST-ом), а не со значениями. Таким образом, как и в C++, в Nemerle apply "раскроется" во время компиляции и породит нужный код.
EP>И, что-то мне подсказывает, если это и получится на Nemerle, то не так складно, ибо система типов .NET — примитивней EP>Ожидаю блаб-объяснений что это и не нужно, потому что можно без этого
Ну, тебе все время что-то подсказывает не верные выводы. Ты бы лучше меньше слушал бы это что-то.
Я не просто так говорю, что Nemerle мощнее C++ и всех остальных мэйнстрим-языков. Я бы не сменил C++ на C#, а потом C# на Nemerle, если бы на то не было бы весомых оснований. Так что лучше пытаться тягаться длинной пенисов (у меня все равно он длиннее окажется ), а заняться изучением того что ты решил покритиковать. По крайней мере критика станет конструктивнее, да интересные знания лишними не бывают.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Nemerle через 5 лет - выстрелит или скончается?
Сорри что встреваю, но вот как раз что то количество коммитов совсем не впечатляет. Для сранения коммиты по rsdn.ru с начала сентября (для информации — занимаюсь сайтом только я в свободное от работы время по чуть чуть).
Скрытый текст
Tuesday, October 7, 2014
New quota format in testbed
ad8d70 by andrewvk <avk@rsdn.ru>, Tuesday
Monday, October 6, 2014
New quota format in testbed
0eb55c by andrewvk <avk@rsdn.ru>, Monday
Sunday, October 5, 2014
Linq2db update
498a3a by andrewvk <avk@rsdn.ru>, Sunday
Friday, October 3, 2014
Fix poll list
a47728 by andrewvk <avk@rsdn.ru>, 10/3/2014
Fix subscription, fix broken links
5a7a9d by andrewvk <avk@rsdn.ru>, 10/3/2014
Working on NNTP provider update
438089 by andrewvk <avk@rsdn.ru>, 10/3/2014
Thursday, October 2, 2014
Update Nemerle.xml
99431d by andrewvk <avk@rsdn.ru>, 10/2/2014
Fix subscription
1c6848 by andrewvk <avk@rsdn.ru>, 10/2/2014
Wednesday, October 1, 2014
Fix subscription
b89f74 by andrewvk <avk@rsdn.ru>, 10/1/2014
Tuesday, September 30, 2014
Activate new poll list
743a69 by andrewvk <avk@rsdn.ru>, 9/30/2014
Fix title script
2edabc by andrewvk <avk@rsdn.ru>, 9/30/2014
Fix RSDN-37
3e1004 by andrewvk <avk@rsdn.ru>, 9/30/2014
Sunday, September 28, 2014
Fix script
66f6ee by andrewvk <avk@rsdn.ru>, 9/28/2014
Block title update for side frames
3651ff by andrewvk <avk@rsdn.ru>, 9/28/2014
Limit posting by user rate
844e4f by andrewvk <avk@rsdn.ru>, 9/28/2014
Fix moderator UI. Working on new poll list
df4e00 by andrewvk <avk@rsdn.ru>, 9/28/2014
Saturday, September 27, 2014
Replace Vote.aspx by new poll control.
1b1968 by andrewvk <avk@rsdn.ru>, 9/27/2014
Sort in poll control
657e41 by andrewvk <avk@rsdn.ru>, 9/27/2014
Sort in poll control
75bdbe by andrewvk <avk@rsdn.ru>, 9/27/2014
Sort in poll control
0f9a93 by andrewvk <avk@rsdn.ru>, 9/27/2014
Sort in poll control
fdb8aa by andrewvk <avk@rsdn.ru>, 9/27/2014
Replace Vote.aspx by new poll control.
b1f7e8 by andrewvk <avk@rsdn.ru>, 9/27/2014
Poll control improvements. Replace Vote.aspx by new poll control.
145348 by andrewvk <avk@rsdn.ru>, 9/27/2014
Friday, September 26, 2014
New format testbed
5f3284 by andrewvk <avk@rsdn.ru>, 9/26/2014
Table styles
3fb019 by andrewvk <avk@rsdn.ru>, 9/26/2014
New format testbed
57238e by andrewvk <avk@rsdn.ru>, 9/26/2014
Fix formatter bug on empty links
f9426c by andrewvk <avk@rsdn.ru>, 9/26/2014
Thursday, September 25, 2014
Quotations in format testbed
bd1739 by andrewvk <avk@rsdn.ru>, 9/25/2014
Quotations in format testbed
c90a8e by andrewvk <avk@rsdn.ru>, 9/25/2014
Fix mod bug
55950d by andrewvk <avk@rsdn.ru>, 9/25/2014
Moderator UI separation from admin
cd071d by andrewvk <avk@rsdn.ru>, 9/25/2014
Moderator UI separation from admin
008c93 by andrewvk <avk@rsdn.ru>, 9/25/2014
New format testbed
7825ce by andrewvk <avk@rsdn.ru>, 9/25/2014
Wednesday, September 24, 2014
Moderator UI separation from admin
8e2ef2 by andrewvk <avk@rsdn.ru>, 9/24/2014
Small fixes
556563 by andrewvk <avk@rsdn.ru>, 9/24/2014
Tuesday, September 23, 2014
Hot tab in mainlist
badf09 by andrewvk <avk@rsdn.ru>, 9/23/2014
Mainlist improvements.
11f9e9 by andrewvk <avk@rsdn.ru>, 9/23/2014
Monday, September 22, 2014
Virtual keyboard
1ab4d8 by andrewvk <avk@rsdn.ru>, 9/22/2014
Fix editor script
d11d42 by andrewvk <avk@rsdn.ru>, 9/22/2014
Update frameset title in all new pages layout, refactoring
c70722 by andrewvk <avk@rsdn.ru>, 9/22/2014
Fix caching issue in IE
5a8155 by andrewvk <avk@rsdn.ru>, 9/22/2014
Small fix
07f980 by andrewvk <avk@rsdn.ru>, 9/22/2014
Fix script
1e316a by andrewvk <avk@rsdn.ru>, 9/22/2014
Fix urls, drop old mainlist
372d86 by andrewvk <avk@rsdn.ru>, 9/22/2014
Sunday, September 21, 2014
Mainlist improvements.
8e47ae by andrewvk <avk@rsdn.ru>, 9/21/2014
Script fix
eb1cf9 by andrewvk <avk@rsdn.ru>, 9/21/2014
Mainlist improvements.
2a0bd2 by andrewvk <avk@rsdn.ru>, 9/21/2014
Working on new poll list
510234 by andrewvk <avk@rsdn.ru>, 9/21/2014
Working on new poll list
9a1520 by andrewvk <avk@rsdn.ru>, 9/21/2014
Working on new poll list, mainlist fix
f779a4 by andrewvk <avk@rsdn.ru>, 9/21/2014
Working on new poll list
6509b9 by andrewvk <avk@rsdn.ru>, 9/21/2014
Small mainlist fix
87b164 by andrewvk <avk@rsdn.ru>, 9/21/2014
Fix poll edit bug
5256e1 by andrewvk <avk@rsdn.ru>, 9/21/2014
Saturday, September 20, 2014
Small fixes
8c3b5f by andrewvk <avk@rsdn.ru>, 9/20/2014
Mainlist autorefresh
881ffc by andrewvk <avk@rsdn.ru>, 9/20/2014
Admin UI improvements, dbproj update
9548fb by andrewvk <avk@rsdn.ru>, 9/20/2014
Mainlist autorefresh
116617 by andrewvk <avk@rsdn.ru>, 9/20/2014
Mainlist autorefresh
cb8912 by andrewvk <avk@rsdn.ru>, 9/20/2014
Preview in mainlist
614564 by andrewvk <avk@rsdn.ru>, 9/20/2014
Alt + number guard in message editor
4216fb by andrewvk <avk@rsdn.ru>, 9/20/2014
SiteSubj/NotSiteSubj tabs in mainlist
9098e4 by andrewvk <avk@rsdn.ru>, 9/20/2014
Track ajax by ga
b32f7e by andrewvk <avk@rsdn.ru>, 9/20/2014
Forum filter UI improvements
5acd07 by andrewvk <avk@rsdn.ru>, 9/20/2014
Mistyping
03d153 by andrewvk <avk@rsdn.ru>, 9/20/2014
Forum filter UI in mainlist
7e989d by andrewvk <avk@rsdn.ru>, 9/20/2014
Flag styles
608274 by andrewvk <avk@rsdn.ru>, 9/20/2014
Friday, September 19, 2014
Colors in mainlist
45330c by andrewvk <avk@rsdn.ru>, 9/19/2014
Colors in mainlist
549bdb by andrewvk <avk@rsdn.ru>, 9/19/2014
Fix script
421eff by andrewvk <avk@rsdn.ru>, 9/19/2014
Page size in mainlist
37bef2 by andrewvk <avk@rsdn.ru>, 9/19/2014
Fix editor tooltips
cab160 by andrewvk <avk@rsdn.ru>, 9/19/2014
New mainlist improvements. Redirect from old MainList.
d5e1d3 by andrewvk <avk@rsdn.ru>, 9/19/2014
Admin UI improvements
aba6f2 by andrewvk <avk@rsdn.ru>, 9/19/2014
Thursday, September 18, 2014
Update dbproj
7fd304 by andrewvk <avk@rsdn.ru>, 9/18/2014
Здравствуйте, WolfHound, Вы писали:
WH>>>>>И не дай байт написать это лишний раз. EP>>>>Это уже вопрос к корректности, надёжности, тестированию, а не к производительности. WH>>>Если на асме каждую инструкцию отполировать будет ещё быстрее. EP>>Да, и? WH>И сколько времени у тебя на это уйдёт?
В разы, а то и на порядок больше чем если бы не было полировки, так как код C++ — optimization-friendly, после прохода оптимизатора остаётся не так много возможностей для улучшения
К чему вопрос-то?
Неужели ты считаешь цену ручной оптимизации ASM кода сопоставимой с ценой правильной расстановкой move/copy?
Или это как-то сравнимо с тем, когда для производительности полностью отказываются от GC, а-ля garbage-free?
EP>>Действительно не стоит, речь ведь шла не только про stop-the-world, но и про прочие GC радости EP>>А уж какие там конкретно GC радости в замену нескольких атомарных передёргиваний счётчика — рояли не играет. WH>Это ещё большой вопрос.
Поделись соображениями. С одной стороны у нас редкие wait-free inc/dec, с другой — конкурентная-пакость, которая параллельно основным потокам шарит по их данным и делает какие-то манипуляции, хорошо ещё если lock-free.
EP>>И что, прям весь код был заселён ref-counting'ом, и он там был действительно к месту? WH>Разные проекты были. Был такой, где действительно всё было засалено этой субстанцией. И иначе было нельзя.
А хотя бы чем было обусловлено? Какими-то алгоритмическими/прикладными особенностями? Или возможно каким-то interop'ом?
EP>>Можно и так, а при желании можно и GC — C++ -то позволяет Для некоторых задач GC действительно удобнее всего, но таких задач крайне мало. WH>Это не ГЦ. Это говно. WH>Нормальный ГЦ С++ не позволяет.
Нормальный это какой?
В стандарте есть интерфейс для для консервативного GC.
Есть точные GC — но они менее автоматизированные чем консервативные. При использовании точных нужно заменять T* на gc_ptr<T> и т.п. При решении каких-то затейливых задач с жёсткими циклами — вполне себе вариант.
EP>>Конечно здорово, но это не ответ на вопрос. Если ничего готового нет — то ок, с prompt finalization проблемы WH>Ты первый кто её просит. А раз никто не просит то никто и не делает.
Хотя бы как тогда разруливается ситуация с IDisposable? Например — один метод поставил using скобки на объект, передал его в другой метод, который втихую сохранил его до лучших времён — в итоге у него окажется ссылка на disposed объект. Фейерверк?
Здравствуйте, jazzer, Вы писали:
J>В этом смысле Немерле по отношению к шарпу точно в такой же позиции находится, имхо: шарп + макросы.
К сожалению это не так. В Немерле есть много (относительно шарпа) странностей — другие скобки для дженериков, последнее выражение в блоке как return, да даже обязательная необходимоть писать else у if. Каждая по отдельность проблемочка — яйца выеденного не стоит, но в комплексе оно все делает язык довольно далеко отстоящим от шарпа.
Что самое печальное, вместо того чтобы попытаться как то поправить странности, пусть даже и с потерей некоторой абстрактной стройности концепций (хотя ряд фич там не из за концепций, а просто потому что захотелось так изначальным полякам), на практике мы видим попытки нас убедить, что это наоборот, все зашибись, просто мы не прониклись.
А так я лет 5 назад предлагал взять шарп, выкинуть из него некоторое количество хвостов и косяков, да добавить туда самые вкусные моменты — ПМ, сахарок разный типа того, что отчасти реализовали, отчасти напредлагали в C# 6 и т.п. Тогда, особенно на фоне микроизменений в C# 4 и 5, у языка были бы шансы. А Немерле нет, никогда не станет существенно популярным, увы.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, _NN_, Вы писали:
_NN>Компилятор Nemerle умеет компилировать C# . ( Не все фишки и есть некоторые нюансы )
Ага. Вот еще новое навигационное дерево для rsdn.ru. Тоже практически работает, но есть некоторые нюансы.
Есть только одна закавыка — я тут сел и за час на голом JS (ок, на TS) написал это проклятущее дерево. Пусть без модных фишек типа запинивания, зато на 100% вписывающееся в существующую серверную инфраструктуру. И, что характерно, никаких "это невозможно в нашей концепции".
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>К сожалению это не так. В Немерле есть много (относительно шарпа) странностей — другие скобки для дженериков, последнее выражение в блоке как return, да даже обязательная необходимоть писать else у if.
Немерл не является надмножеством шарпа. Это другой язык с иными приоритетами и синтаксисом.
AVK>...делает язык довольно далеко отстоящим от шарпа.
Далеко отстоящим от шарпа язык делает не набор синтаксических отличий, а концепции положенные в основу.
Надо понимать, что ядро Немерле — минималистичный ML, но возможности его макросистемы позволяют создать диалект достаточно близкий к C#.
AVK>Что самое печальное, вместо того чтобы попытаться как то поправить странности, пусть даже и с потерей некоторой абстрактной стройности концепций (хотя ряд фич там не из за концепций, а просто потому что захотелось так изначальным полякам), на практике мы видим попытки нас убедить, что это наоборот, все зашибись, просто мы не прониклись.
Если странности — это синтаксис "относительно шарпа", то см. выше, иначе надо более развернуто.
AVK>А так я лет 5 назад предлагал взять шарп, выкинуть из него некоторое количество хвостов и косяков, да добавить туда самые вкусные моменты — ПМ, сахарок разный типа того, что отчасти реализовали, отчасти напредлагали в C# 6 и т.п.
Это, имхо, знатное чсв, что можно взять шарп и что-то там убрать или добавить. Шарп делают умнейшие люди, которые ищут локальный максимум в пространстве с осями: обратная совместимость, интероперабельность в рамках CLR/Mono и, конечно, фичи/хотелки. Может, я утрирую, и там еще сложней.
AVK> Тогда, особенно на фоне микроизменений в C# 4 и 5, у языка были бы шансы.
Ну микроядро языка позволяет строить разные языки. То что стандартная библиотека изображает из немерла шарп еще не значит, что это единственный путь развития.
AVK> Немерле нет, никогда не станет существенно популярным, увы.
Популярность Немерле — это примерно как популярность Линукса. С одно стороны ядро, с другой — куча дистрибутивов. Я полагаю, что делая дистрибутив "шарп с плюшками", сложно придти к популярности. Потому что флагман известен, но цели его не ясны, а добежать туда раньше можно только случайно, но и это не гарантирует успеха.
Здравствуйте, DarthSidius, Вы писали:
DS>- четвертый, что: КАК-ТАК! Здесь же IO и код не анемичный DS>Ну и где конструктив?
Претензии были к тому, что невозможно оценить преимущества языка, используя не идиоматичные конструкции. В данном конкретном случае код императивный с побочными эффектами. Для его понимания _необходимо_ прочитать все ветки (неважно, как они организованы и какой там сахар) и внимательно изучить. На мой взгляд, этот пример ничего не демонстрирует.
> код не анемичный
Ну да. После override все остальное читать желания нет — очевидно, что часть контекста "скромно" отсутствует.