Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
maytonВообще у меня сложилось стойкое впечатление что в форуме мало людей которые по существу могут пояснить, а зачем им собственно вообще нужен реал-тайм. Обычно в 99% бизнес задач такой вопрос вообще не стоит.Так уж устроена жизнь, что большинство подсистем либо одновременно детерминированы и по времени, и по памяти, либо одновременно недетерминированы. Скажем, очень нечасто увидишь софтинку, которая за предопределённое время на одном и том же объёме данных отожрёт непредсказуемо большой объём памяти, но при этом работает стабильно :) Поэтому "покупая" ради отсутствия деградации по памяти детерминизм по этой самой памяти, детерминизм по времени получаешь в подарок. Скажем, по временным характеристикам нас вполне устраивает и обычный линуксовый аллокатор, но нас не устраивает его фрагментация памяти на больших аптаймах, поэтому мы используем свой карманный TLSF. Если при этом у нас и время стабильнее, это "приятный необязательный пустячок", не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 09:21 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
maytonDima Tпропущено... Пользы от него ноль. Какие претензии могут быть к бесполезному? Ты можешь на C# написать пример как-бы ты хотел использовать финалайзер по "полезному" ? Как полноценный деструктор. Например закрыть открытые ресурсы ОС (файлы, мутексы и т.д.). Деструктор С++ полезен потому что однозначно определен момент его запуска, а финализер гарантирует только "когда-нибудь точно сработаю" и это делает его бесполезным. Как уже выше написал 20679521 в C# для эмуляции деструктора изобрели интерфейс IDisposable и оператор using(). Для большинства случаев этого достаточно. Спорить тут особо не о чем. Финализер вместо деструктора это побочный эффект сборки мусора, т.к. в коде никак не контролируется выход объектов за область видимости, т.е. не отслеживается момент когда объект стал мусором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 09:23 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruС другой стороны, если учесть, что у нас своё --- управление памятью --- управление сокетами --- кластерный IPC --- диспетчеризация доступа к дискам ... и даже, к примеру, поддержка нитей на том железе, где OS их не имеет, а при этом нам надо не "настоящий" реал-тайм, а interactive/near-interactive, то QNX нам вовсе не обязателен.... то вам уже можно просто сделать свою операционку и не заморачиваться с другими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 09:35 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
CEMbiv_an_ruС другой стороны, если учесть, что у нас своё --- управление памятью --- управление сокетами --- кластерный IPC --- диспетчеризация доступа к дискам ... и даже, к примеру, поддержка нитей на том железе, где OS их не имеет, а при этом нам надо не "настоящий" реал-тайм, а interactive/near-interactive, то QNX нам вовсе не обязателен.... то вам уже можно просто сделать свою операционку и не заморачиваться с другими.Для операционки надо добавить бутявку, HAL + драйверы, консоль и кучу мелкой пофигени, вроде таблиц маршрутизации или часовых поясов. Лучше уж заморачиваться с одной готовой операционкой, чем с уймой этих мелочей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 09:45 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Dima T, Так в c# с областью видимости — напряжёнка — нету её ( разве что оптимизатор может узреть) Не надо механически привычки с с++ переносить на шарп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 09:48 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
ИзопропилТак в c# с областью видимости — напряжёнка — нету её ( разве что оптимизатор может узреть) Область видимости объекта - это места в коде где может встречаться его имя. Если областей видимости нет это значит что в шарпе можно снаружи функций обращаться к ее локальным переменным, и много других приколов. Лучше перефразируйте что вы хотели сказать, а то пока получается какая-то бессмыслица )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 12:21 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
maytondbpatchпри этом отдельный ржач - в продакшине есть даже методика, когда выключают принудительно очистку old-generation, дескать дешевле просто на выходных приложение рестартовать и заново загрузить кеши из базы данных. вполне себе подход, чо Вы наверное не в курсе. Вы просто не разрабатывали подобные приложения. Например ПО обработки equities, options имеет ярко выраженный сутошный лайф-цикл. Биржа открывается в определённое время суток. А потом закрывается. На момент закрытия приложение никому не нужно. И его можно ребутнуть. Какую из этого можно получить пользу? Я думаю - очевидно. тебе-то из подвала оно конечно виднее. из суточных лайф циклов - про good till cancel/day ты тоже уже в курсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 13:24 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли областей видимости нет это значит что в шарпе можно снаружи функций обращаться к ее локальным переменным, и много других приколов. можно. Через замыкания, например( которые не требуют явной спецификации) попавши в замыкание, локальная (с лексической точки зрения ) становится глобальной и живёт своей жизнью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 13:34 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
maytonПо поводу QNX. Иван решил отмолчаться. Ну ОК. Из топиков по сабж я могу вспомнить только мой спор с неким Petrav на тему ПО и самолетов. А также с Базистом по поводу создания СУБД с нулевым откликом. Вообще у меня сложилось стойкое впечатление что в форуме мало людей которые по существу могут пояснить, а зачем им собственно вообще нужен реал-тайм. Обычно в 99% бизнес задач такой вопрос вообще не стоит. Этот аспект может быть описан так называемых NFR (Non functional requirements) где-то одим из подпунктов. Там может быть что flow, заявки на покупку или продажу акций должен быть отработан не более чем за 300 мс. Но это будет требование только для нашей системы. Не для внешних микросервисов. Они могут лагать как им удобно. Жесткий риалтайм в большинстве случаев это действительно не обязательное требование даже если его явно выдвигают. Тут больше из отряда обеспечения запаса прочности. Я в бытность потратил месяца два, чтоб обеспечить гарантированные 30к записей в секунду в default СУБД в продакшине. Заказчик так захотел. А на реальных продакшинах у него практически никогда не было больше 2к. В среднем. А вот в пике - доходило до 20к. А подобное разгильдяйское отношение к времени отклика оно куммулятивное - тут ты не обеспечил, там не обеспечил, а в результате хрясь, в определенной ситуации у тебя и до time-out дошло, клиент потерял деньги, и тому подобное. Потому если есть возможность выбрать третьесторонний базовый компонент с минимальным временем отклика - то почему и нет? Своих лагов мы всегда допишем сверху сами, зачем-же прям на старте брать чужие оные? maytonПо поводу UI для систем с MM (managed memory). Для UI приложений написанных на Java, есть коробочная рекомендация - включать +UseConcMarkSweepGC. Навскиду не помню но кажется эта опция включена во все дефолтные конфигурации пусковых скриптиков bash для продуктов комании Jetbrains. Этого достаточно чтобы комфортно работать и не видеть т.н. stop-the-world о которых так много говорят в топике. P.S. Я прошу прощения что пишу только по Java. C .Net я давно не работал и не в курсе как там и чего. Если кто в теме - то дополните. Да, продукты Jetbrains выглядят "повеселее" в плане отзывчивости и незалипаемости. Хотя у них проблемы спонтанных тормозов все равно остаются, хотя как говорят наши джависты - это уже проблема не самой JVM, а уже непосредственно кода IDE. Тем не менее, сравнение с Visual Studio или Delphi IDE они до сих пор не выдерживают. Но, как говорят джависты - привыкнуть можно. Угум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 13:37 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
ИзопропилЧерез замыкания, например( которые не требуют явной спецификации) попавши в замыкание, локальная (с лексической точки зрения ) становится глобальной и живёт своей жизнью Вы путаете область видимости и время жизни. Замыкание находися внутри функции, поэтому оно может ссылаться на ее переменные. А время жизни захваченных переменных продлевается естественно. Ну и не становится в шарпе (и нигде) захваченная переменная глобальной, ее область видимости - замыкание ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 13:43 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА время жизни захваченных переменных продлевается естественно. но эта "локальная" переменная - уже не может жить на стеке. ничего я не путаю. лексическая область видимости - локальная, время жизни - может превышать время жизни активации. хорошая такая "локальная переменная." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 14:28 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Ставлю вопрос о переносе топика в Программирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 17:30 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Изопропилно эта "локальная" переменная - уже не может жить на стеке. Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 18:13 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИзопропилно эта "локальная" переменная - уже не может жить на стеке. Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке хранение объектов на стеке - это "фича" C++, мало кто еще так делает. обычно на стеке хранятся лишь ordinals - int, pointer. в этом ключе реализация замыкания довольно проста - ordinals просто копируются по значению, а объекты - т.к. все равно в куче, мы копируем лишь указатель-ссылку на них тут другое интереснее - переменные могут и на стеке не храниться, а прямо в регистрах исполняться, в т.ч. параметры функций. недавно люди из мира Java получили разрыв шаблона, когда узнали, что первые параметры функции передаются не через стек, а через регистры, но, как оказалось, в их мире не все так радужно впрочем, какая разница откуда копировать... Модератор: Тема перенесена из форума "C++". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 19:14 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
dbpatchТем не менее, сравнение с Visual Studio или Delphi IDE они до сих пор не выдерживают. Но, как говорят джависты - привыкнуть можно. Угум. Я не думаю что продукт из семейства Delphi IDE можно ставить в сравнение. Он очень нишевый и опции autocompletition там будут определены только в узком сегменте языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 21:38 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
dbpatchДа, продукты Jetbrains выглядят "повеселее" в плане отзывчивости и незалипаемости. Хотя у них проблемы спонтанных тормозов все равно остаются, хотя как говорят наши джависты - это уже проблема не самой JVM, а уже непосредственно кода IDE. Да. Спонтанные тормоза могут быть. Но я здесь откомментарю. Я часто из за плеча замечал как мои коллеги инсталлируют среды разработки. Красивый и красочные мастер установки предлагает тонну всяких фич типа там фреймворки и языки. Коллеги не глядя тынцают "выбрать все". А потом гневно отшвыривают от себя клавиатуру и бубнят дескыть чего это "оно" затупило? Вобщем-то каждый случай надо разбирать отдельно. Может быть даже и активность антивируса создала траблы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 21:43 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruОдин ньюанс. Статистику по нашим процессам top запросто показывает с суффиксом не "m", и не "g", а "t". Ни один GC не будет вести себя прилично, если в колонках VIRT и RES маячат суффиксы "t" Я понял. Спасибо Иван. Я думаю что как раз тот самый компромисс о котором я говорил - это MM + неуправляемая куча. И экспертный вопрос - какому приложению и в какой пропорции сколько отдать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 21:48 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Dima TAnatoly MoskovskyА в джаве еще к тому же и отсутсвие деструкторов (по выходу из области видимости). В C# та же проблема, там порешали интерфейсом IDisposable и оператором using() КМК в Java есть шаблон try-finally или try-with-resources который создан для отбивания подобных ситуаций. Я имею в виду немедленное освобождение native ресурсов ОС таких как файлы, сокеты, мьютексы используя кастомный API. Но опять-же ... если вы играете в парадигме языка то вам нет острой необходимости это использовать. Стандартные либы покрывают 99.9% кейсов. Что у вас там? Я навскидку могу вспомнить разве что интерфейс RS-232 который действительно не суппортился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 21:53 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
iv_an_ruТак уж устроена жизнь, что большинство подсистем либо одновременно детерминированы и по времени, и по памяти, либо одновременно недетерминированы. Скажем, очень нечасто увидишь софтинку, которая за предопределённое время на одном и том же объёме данных отожрёт непредсказуемо большой объём памяти, но при этом работает стабильно :) Поэтому "покупая" ради отсутствия деградации по памяти детерминизм по этой самой памяти, детерминизм по времени получаешь в подарок. Скажем, по временным характеристикам нас вполне устраивает и обычный линуксовый аллокатор, но нас не устраивает его фрагментация памяти на больших аптаймах, поэтому мы используем свой карманный TLSF. Если при этом у нас и время стабильнее, это "приятный необязательный пустячок", не более. Я еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если не в рамках этого топика то в других мы дойдем до обсуждения. Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс аллокатора то почему его не сделали дефолтным для Linux/FreeBSD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 22:01 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Dima Tmaytonпропущено... Ты можешь на C# написать пример как-бы ты хотел использовать финалайзер по "полезному" ? Как полноценный деструктор. Например закрыть открытые ресурсы ОС (файлы, мутексы и т.д.). Деструктор С++ полезен потому что однозначно определен момент его запуска, а финализер гарантирует только "когда-нибудь точно сработаю" и это делает его бесполезным. Как уже выше написал 20679521 в C# для эмуляции деструктора изобрели интерфейс IDisposable и оператор using(). Для большинства случаев этого достаточно. Спорить тут особо не о чем. Финализер вместо деструктора это побочный эффект сборки мусора, т.к. в коде никак не контролируется выход объектов за область видимости, т.е. не отслеживается момент когда объект стал мусором. Дима. Еще добавлю. КМК именно буферизация (или отложенная деаллокация) дает преимущества. Это как в БД и файловых системах. Если ты делаешь батчинг с умным предвариельным анализм батча - то можешь здорово сэкономить на всем объеме операций. И поэтому КМК сиюминутное пожелание срочно отработать "деструктор" приводит к ненужной суетливой активности и потере общего КПД. И еще раз. Я ратую за компромисс а не за "священную войну против GC и MM". Ну ты как? ОК? Не ОК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 22:06 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
dbpatchAnatoly Moskovskyпропущено... Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке хранение объектов на стеке - это "фича" C++, мало кто еще так делает. обычно на стеке хранятся лишь ordinals - int, pointer. в этом ключе реализация замыкания довольно проста - ordinals просто копируются по значению, а объекты - т.к. все равно в куче, мы копируем лишь указатель-ссылку на них Я прошу прощения. Я уже достаточно зафлудил топик. Но кину еще 5 копеек. Один чел мне рассказывал про Rust. В Rust используется интересная модель уборки мусора основанная на анализе переменых на стеке и на формальном доказательстве в фазе компиляции того что наши ссылки не задействованы и в последующей деаллокацией. Я пока за этот факт ничего не знаю т.к. с растом не знаком и ожидаю что кто-то подтвердит или даст пруфы или краткую резюмирующую инфу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 22:13 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
Чё-то здесь про QNX говорили. Он дорого стоит - поэтому "распил" называется. А про количество строк - ху кновс. В Ассемблере всё с новой строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 22:17 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
maytonЯ еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если не в рамках этого топика то в других мы дойдем до обсуждения. Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс аллокатора то почему его не сделали дефолтным для Linux/FreeBSD?TLSF в среднем медленнее Дугласа Ли раза в два. Да, в очень редком плохом случае Дуглас Ли протормозит в _сто_ раз дольше TLSF, но это не каждый день случается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 23:13 |
|
||
|
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
|
|||
|---|---|---|---|
|
#18+
iv_an_rumaytonЯ еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если не в рамках этого топика то в других мы дойдем до обсуждения. Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс аллокатора то почему его не сделали дефолтным для Linux/FreeBSD?TLSF в среднем медленнее Дугласа Ли раза в два. Да, в очень редком плохом случае Дуглас Ли протормозит в _сто_ раз дольше TLSF, но это не каждый день случается. Получил разрыв шаблона. Douglas «Doug» S. Lea это известная личность среди создателей Пакета java.concurrency. Но вы очевидно имели в виду другое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2017, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39496927&tid=1340092]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 267ms |

| 0 / 0 |
