powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / На чём лучше писать код при одинаковом количестве строк: на C или на C++?
474 сообщений из 474, показаны все 19 страниц
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490430
log_here
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490438
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereКто что думает?Смотря, что потом с этим кодом будет, и для чего он нужен.
Если себе удобнее и на один раз или самому пользоваться дальше - тогда С и С++, в зависимости от того, что тобой предпочитается.
Если потом работать другим людям, то брать среднее арифметическое от С и С++ по количеству людей и задач.

В общем, вопрос сильно вакуумный, так-то.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490460
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereпонятность тоже не отличается.Это означает, что или программа 100% детская, Hello world, или плюсы используются неправильно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490498
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше ни на чем не писать, пока не уяснишь разницу между C/С++ и разницу между процедурным программированием и ООП.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490526
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Никто не мешает писать на c++ в процедурном стиле
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490542
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилrdb_dev,
Никто не мешает писать на c++ в процедурном стилеКонечно! Но разницу понимать необходимо, так как в Си и C++ даже синтаксис условных директив компилятора несколько отличается, так как С++ практически полностью наследует синтаксис Си, добавляя свои прибамбасы (++). Можно не парится с выбором и использовать синтаксис и все прелести C++, если... Если не пишешь что-нибудь опенсорсное под Линух, ибо сообщество может не оценить такого высокого порыва. Как говорится - "в каждой избушке свои погремушки".
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490548
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЕсли не пишешь что-нибудь опенсорсное под Линух, ибо сообщество может не оценить такого высокого порыва
так в этом случае "собщество" и задаёт ограничения.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490579
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилrdb_dev,

Никто не мешает писать на c++ в процедурном стиле

Никто не мешает писать на C, используя принципы ООП
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490598
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiНикто не мешает писать на C, используя принципы ООПЭто как? Ну, с инкапсуляцией понятно, а как быть с полиморфизмом, наследованием и виртуальными методами? Писать всё ручками в соответствии с ABI C++? Это шутка такая?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490651
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.

Кто что думает?

Да нет, на С++ надо писать.
С вообще устаревший язык, кроме как для написания ядра Linux ни на что уже не нужный.
С++ тоже подходит для этой цели, он не используется для ядра только по одной известной всем причине.

log_hereПреимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).


Нет ни того, ни другого преимущества. У С чуть более большая переносимость всвязи с тем, что компилятор проще в разы и
что С++ меняется в данный период истории.

log_hereПреимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.


С++ строже (хотя последние компиляторы С -- это уже далеко не K&R style), и всё же обладает большим спектром инструментальных возможностей, чем С, причём в С во многих его применениях, что я знаю, упорно используют ООП, сделанное, естественно, "на спичках и замазке".

Конечно, вопрос выбора языка -- очень сложный, и давать советы я бы не стал, но поскольку всё равно тебе решать, то я бы рекомендовал С++. В крайности ты можешь не использовать ни новые фичи С++11, ни шаблоны, но всё равно будет лучше.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490654
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилrdb_dev,

Никто не мешает писать на c++ в процедурном стиле

Никто не мешает писать на С в ООП-стиле, но...

Всё же на ноги удобнее одевать штаны, а не футболку, а футболку удобнее на торс...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490656
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivС вообще устаревший язык, кроме как для написания ядра Linux ни на что уже не нужный.

YouTube Video
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490657
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devschiНикто не мешает писать на C, используя принципы ООПЭто как? Ну, с инкапсуляцией понятно, а как быть с полиморфизмом, наследованием и виртуальными методами? Писать всё ручками в соответствии с ABI C++? Это шутка такая?

Да нет, не шутка, многие пишут. Существует порядка 5-6 способов изображать ООП в языке С.
Вон, Иван (iv_an_ru) подтвердит, в их Virtuoso почти все используются...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490661
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivrdb_devпропущено...
Это как? Ну, с инкапсуляцией понятно, а как быть с полиморфизмом, наследованием и виртуальными методами? Писать всё ручками в соответствии с ABI C++? Это шутка такая?

Да нет, не шутка, многие пишут. Существует порядка 5-6 способов изображать ООП в языке С.
Вон, Иван (iv_an_ru) подтвердит, в их Virtuoso почти все используются...

А, так вроде ООП-подходы даже в ядре Linux присутствует в каком-то виде.
WIndows же вообще вся на ООП.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490669
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devschiНикто не мешает писать на C, используя принципы ООПа как быть с полиморфизмом, наследованием и виртуальными методами?Ручками пишете таблички виртуальных функций, явно их заполняете, явно прописываете указатели на вирттаблицы в "классы" и явно инициализируете эти указатели в "конструкторах", явно передаёте "this". Всё элементарно, особенно если сравнивать этот гемор не с нынешними плюсами под линуксом, а с полурабочими плюсами 2000-го года где-нибудь под AIX-ом.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490674
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДа нет, не шутка, многие пишут. Существует порядка 5-6 способов изображать ООП в языке С.
Вон, Иван (iv_an_ru) подтвердит, в их Virtuoso почти все используются...Проктостоматология...
Можно, конечно, описать структуру базового класса с первым членом в виде указателя на массив указателей к виртуальным методам, каждый из которых будет принимать в первом параметре указатель на структуру, в области видимости структуры хранить enum с порядком виртуальных методов... Но как быть с new/delete, наследованием, приведением указателей? Даже если попытаться максимально повторить весь функционал C++ в своей обертке структур для симуляции классов, всё равно это будет выглядеть также ужасно, как шасси авиалайнера, примотанное к несущему каркасу фюзеляжа скотчем.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490691
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можете кинуть в меня камушком, но виртуальные методы - это не капец какая нужная штука, без них можно в большинстве случаев обойтись. Вот инкапсуляция - это бОльшая часть ООПы. А полиморфизм - это когда:
- у вас есть набор объектов разных классов
- все свалены в одну кучу
- и вы понятия не имеете, кто из ни кто, на тот момент когда с ними вдруг понадобилось что-то сделать.

... да это бардак какой-то!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490694
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devMasterZivДа нет, не шутка, многие пишут. Существует порядка 5-6 способов изображать ООП в языке С.
Вон, Иван (iv_an_ru) подтвердит, в их Virtuoso почти все используются...Проктостоматология...
Можно, конечно, описать структуру базового класса с первым членом в виде указателя на массив указателей к виртуальным методам, каждый из которых будет принимать в первом параметре указатель на структуру, в области видимости структуры хранить enum с порядком виртуальных методов... Но как быть с new/delete, наследованием, приведением указателей? Даже если попытаться максимально повторить весь функционал C++ в своей обертке структур для симуляции классов, всё равно это будет выглядеть также ужасно, как шасси авиалайнера, примотанное к несущему каркасу фюзеляжа скотчем.
Руками надо делать, а не как детей...

И все будет выглядеть читаемо.
Весь функционал зачем пытаться повторять?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490708
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на мой взгляд в плюсах реально удобные вещи это только автовызовы деструкторов и конструкторов, но они же и основной источник проблем у начинающих

а виртуальность и полиморфизм повторяются элементарно, в инете есть варианты автоматизации этого на макросах
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglРуками надо делать, а не как детей...

И все будет выглядеть читаемо.
Весь функционал зачем пытаться повторять?

Ну, с другой стороны, руками детей и не сделаешь...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490719
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)на мой взгляд в плюсах реально удобные вещи это только автовызовы деструкторов и конструкторов, они же и основной источник проблем у начинающихну это проблема на неделю-две. Так что не проблема.
move-семантика тоже удобная вещь
все stl-ные контейнеры и макросы тоже
да там много удобного, так-то
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490723
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbможете кинуть в меня камушком, но виртуальные методы - это не капец какая нужная штука, без них можно в большинстве случаев обойтись.Не скажи... Я, к примеру, в некоторых своих библиотеках использую API на виртуальных методах. Очень удобно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490724
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devCEMbможете кинуть в меня камушком, но виртуальные методы - это не капец какая нужная штука, без них можно в большинстве случаев обойтись.Не скажи... Я, к примеру, в некоторых своих библиотеках использую API на виртуальных методах. Очень удобно. их интерфейсами обычно называют
так же элементарно делается
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490753
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)их интерфейсами обычно называют
так же элементарно делаетсяДа! Вначале, в заголовочном файле описывается интерфейсный класс с pure virtual методами, который, затем, наследуется классом библиотеки, где осуществляется реализация виртуальных методов класса и эта библиотека экспортирует Си функцию, возвращающую указатель на экземпляр класса с реализацией. Приложение инклюдит заголовочный файл и дергает виртуальные методы. Вот и вся технология.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490767
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНе скажи... Я, к примеру, в некоторых своих библиотеках использую API на виртуальных методах. Очень удобно.я и не говорил, что не удобно. Весь COM на интерфейсах сделан, очень удобно.
Но в большинстве случаев полиморфизм можно не использовать. Даже так: лучше не использовать, если можно не использовать. Всё, что может быть сразу посчитано, должно быть сразу посчитано.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490799
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbя и не говорил, что не удобно. Весь COM на интерфейсах сделан, очень удобно.
Но в большинстве случаев полиморфизм можно не использовать. Даже так: лучше не использовать, если можно не использовать. Всё, что может быть сразу посчитано, должно быть сразу посчитано.COM, кстати, никакого отношения к ООП, по большому счету, не имеет. В COM, это соглашение и при написании COM объектов без труда и лишний костылей можно использовать процедурное программирование. Для интересующихся есть прекрасная книга по основам COM ( Inside COM ) Дейла Роджерсона, которую, также, можно найти в хорошем русском переводе на просторах рунета.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490803
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devв Си и C++ даже синтаксис условных директив компилятора несколько отличается
А можно как-то увидеть чем именно несколько отличается? Чисто для поднятия уровня эрудиции.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490806
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яrdb_devв Си и C++ даже синтаксис условных директив компилятора несколько отличается
А можно как-то увидеть чем именно несколько отличается? Чисто для поднятия уровня эрудиции.

:) ну, в ANSI C89 таки нет #if defined
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490809
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яА можно как-то увидеть чем именно несколько отличается? Чисто для поднятия уровня эрудиции. Всё здесь .
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490812
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devschiНикто не мешает писать на C, используя принципы ООПЭто как? Ну, с инкапсуляцией понятно, а как быть с полиморфизмом, наследованием и виртуальными методами? Писать всё ручками в соответствии с ABI C++? Это шутка такая?

начем с того, что полиморфизм, наследование и виртуальные методы - они в большинстве случаев реально мало нужны, если починить проблему ООП головного мозга и правильно проектировать архитектуру решения.

где они еще с натяжкой применимы как must have - это вские виджеты или UI контролы, но и там - все достижимо - см. реализацию GTK+
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490816
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchгде они еще с натяжкой применимы как must have - это вские виджеты или UI контролы, но и там - все достижимо - см. реализацию GTK+GTK+, это процедурное API.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490819
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?

я в бытность купился на то, чтобы писать исключительно на C, а не на C++, ибо так завещал великий Торвальдс, да и изучать гигазы "рулеза" вроде STL/Boost откровенно не хотелось.

в принципе о принятом решении я нисколько не жалею, но нужно понимать, что ты будешь вынужден писать свой собственный
велосипед как раз на тему того, что уже делает (хоть и плохо) STL и Boost

а это плохо, ибо велосипед - его будет знать и развивать ну очень ограниченное сообщество.

меня пока сдерживает только перспектива "новой парадигмы" - в собственном "STL" я в принципе ушел от понятия heap (malloc/free прикладному программисту у меня недоступны, все ловко сделано аля Java GC с поколениями и стек-контекстами), и еще пару идей

но начинающим подобное строго противопоказано.

P.S. А вот что действительно недостает в C - так это параметров по умолчанию, перегруженных функций и возможности явно скрывать поля в структурах, оставляя RTTI о размере объекта в целом.
решается это все конечно макросами и прочими _Generic, но какой ценой....

в общем без реально веских на то причин и без 10+ лет опыта подсаживаться на Pure C - не стоит
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490822
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchну япропущено...

А можно как-то увидеть чем именно несколько отличается? Чисто для поднятия уровня эрудиции.

:) ну, в ANSI C89 таки нет #if defined
Пруф, видимо, при передаче в интернет утратился?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490824
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яПруф, видимо, при передаче в интернет утратился?Какой тебе еще пруф? напиши в заголовочном файле какой-нибудь программы на Си #if defined() и попробуй компильнут на "Гнусе". Вот и весь пруф!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490829
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devdbpatchгде они еще с натяжкой применимы как must have - это вские виджеты или UI контролы, но и там - все достижимо - см. реализацию GTK+GTK+, это процедурное API.

и что с того? внутри лежит именно компонентная ООП модель.

восприятие ООП на С начни с простого факта, что функционально нет никакой разницы между

Код: plaintext
1.
object->method(params) и 



Код: plaintext
1.
CLASS_method(object, params)



все остальное это лишь визуально-синтаксический сахарок. при должном навыке на C можно писать точно такой-же, в т.ч. и по компактности в строках код. выглядеть будет непривычно, но это будет точно такой-же по возможностям ООП язык
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490835
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devну яПруф, видимо, при передаче в интернет утратился?Какой тебе еще пруф? напиши в заголовочном файле какой-нибудь программы на Си #if defined() и попробуй компильнут на "Гнусе". Вот и весь пруф!

Я потом проверю.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490839
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devну яПруф, видимо, при передаче в интернет утратился?Какой тебе еще пруф? напиши в заголовочном файле какой-нибудь программы на Си #if defined() и попробуй компильнут на "Гнусе". Вот и весь пруф!
Ну зачем же "еще", мне б хоть какой-то увидеть, а то все никак ничего добиться не получается.
Вот открыл навскидку что болтается под рукой из гнусного - sha1.c
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
#if defined(__i386__) || defined(__x86_64__)
  #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val))
#elif defined(__GNUC__) && defined(__arm__)
  #define setW(x, val) do { W(x) = (val); __asm__("":::"memory"); } while (0)
#else
  #define setW(x, val) (W(x) = (val))
#endif
...


И где тут не работают #if defined() ?

Так где пруфчик-то насчет "синтаксис условных директив компилятора" С и С++?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490845
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devну яПруф, видимо, при передаче в интернет утратился?Какой тебе еще пруф? напиши в заголовочном файле какой-нибудь программы на Си #if defined() и попробуй компильнут на "Гнусе". Вот и весь пруф!

ну, справделивости ради - GNU C вполне себе поддерживает #if defined даже в режиме -ansi -pedantic

честно говоря уже не помню, на именно каком C компиляторе я на это наступил
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490846
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchну япропущено...

А можно как-то увидеть чем именно несколько отличается? Чисто для поднятия уровня эрудиции.

:) ну, в ANSI C89 таки нет #if defined

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
6.10.1  Conditional inclusion
Constraints
1
The expression that controls conditional inclusion shall be an integer constant expression
except that: identifiers (including those lexically identical to keywords) are interpreted as
described below;
166)
and it may contain unary operator expressions of the form
defined
identifier
or
defined (
identifier
)
which evaluate to 1 if the identifier is currently defined as a macro name (that is, if it is
166) Because  the  controlling  constant  expression  is  evaluated  during  translation  phase  4,  all  identifiers
either are or are not macro names — there simply are no keywords, enumeration constants, etc.
162                                                          Language
§6.10.1
N1570 
Committee Draft — April 12, 2011
ISO/IEC 9899:201x
predefined or if it has been the subject of a
#define
preprocessing directive without an
intervening
#undef
directive with the same subject identifier), 0 if it is not
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490848
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchи что с того?Ничего. Просто уточнил.
dbpatchвнутри лежит именно компонентная ООП модель.Как это реализовано, для "внешнего наблюдателя" не имеет значения.

dbpatchвосприятие ООП на С начни с простого факта, что функционально нет никакой разницы между

Код: plaintext
1.
object->method(params) и 



Код: plaintext
1.
CLASS_method(object, params)



все остальное это лишь визуально-синтаксический сахарок. при должном навыке на C можно писать точно такой-же, в т.ч. и по компактности в строках код. выглядеть будет непривычно, но это будет точно такой-же по возможностям ООП языкЯ в курсе, что вызов метода объекта, это вызов обычной функции с передачей в параметре this указателя на экземпляр класса, который, в большинстве случаев, содержит в качестве первого члена указатель на таблицу виртуальных методов. Собственно, указатель на экземпляр класса можно интерпретировать как указатель на указатель к массиву указателей на функции, каждая из которых в качестве первого параметра принимает указатель на экземпляр класса. Нам-то с тобой понятно, что я написал, а новичок будет долго фтыкать и курить ABI.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490851
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devdbpatchи что с того?Ничего. Просто уточнил.
dbpatchвнутри лежит именно компонентная ООП модель.Как это реализовано, для "внешнего наблюдателя" не имеет значения.

dbpatchвосприятие ООП на С начни с простого факта, что функционально нет никакой разницы между

Код: plaintext
1.
object->method(params) и 



Код: plaintext
1.
CLASS_method(object, params)



все остальное это лишь визуально-синтаксический сахарок. при должном навыке на C можно писать точно такой-же, в т.ч. и по компактности в строках код. выглядеть будет непривычно, но это будет точно такой-же по возможностям ООП языкЯ в курсе, что вызов метода объекта, это вызов обычной функции с передачей в параметре this указателя на экземпляр класса, который, в большинстве случаев, содержит в качестве первого члена указатель на таблицу виртуальных методов. Собственно, указатель на экземпляр класса можно интерпретировать как указатель на указатель к массиву указателей на функции, каждая из которых в качестве первого параметра принимает указатель на экземпляр класса. Нам-то с тобой понятно, что я написал, а новичок будет долго фтыкать и курить ABI .

не будет, ибо он понятия не имеет, что это такое и зачем это ему нужно.

новичок обычно начинает с зачитывания какого Страустрап за 21 день и дальше начинает просто подражать другим.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490853
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot dbpatch]rdb_devвосприятие ООП на С начни с простого факта, что функционально нет никакой разницы между

Код: plaintext
1.
object->method(params) и 



Код: plaintext
1.
CLASS_method(object, params)



все остальное это лишь визуально-синтаксический сахарок. при должном навыке на C можно писать точно такой-же, в т.ч. и по компактности в строках код. выглядеть будет непривычно, но это будет точно такой-же по возможностям ООП язык
А нельзя ли раскрыть по "все остальное" к примеру про эксепшены и деструкторы, про выход из области видимости и деструкторы. Как это написать на С при должном навыке, покажите?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490870
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbможете кинуть в меня камушком, но виртуальные методы - это не капец какая нужная штука, без них можно в большинстве случаев обойтись. Вот инкапсуляция - это бОльшая часть ООПы. А полиморфизм - это когда:
- у вас есть набор объектов разных классов
- все свалены в одну кучу
- и вы понятия не имеете, кто из ни кто, на тот момент когда с ними вдруг понадобилось что-то сделать.

... да это бардак какой-то! Угу, бардак. Только иногда неизбежный. Например, ваш экзешник прилинковывает к себе чужие плагины... причём с двунаправленным импортом таблиц функций... причём на операционке, которая не поддерживает двунаправленный импорт (т.е. после работы системного линковщика функции DLL могут быть вызваны из экзешника, но не наоборот). И внезапно двум плагинам хочется использовать функции _друг_друга_, да ещё подгрузить свои карманные DLL-ки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490871
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яА нельзя ли раскрыть по "все остальное" к примеру про эксепшены и деструкторы, про выход из области видимости и деструкторы. Как это написать на С при должном навыке, покажите?

1) exceptions как концепция - это очень большая ошибка индустрии, ибо это лишь завуалированная форма GOTO, причем за область видимости функции. породила намного, намного больше проблем, чем решила.

я вот за многие уже десятки лет так и не понял, на кой хрен они вообще были придуманы. как способ возврата кодов ошибки - возможно, хоть и криво, а так, в большинстве случаев они лишь используются для неперехватываемого проброса наверх для генерации call-stack trace и dump. ну так последнее в C можно делать и обычным способом - backtrace и вперед.

в общем на кой нужны эти ваши Exceptions - для меня лично есть большая загадка.

а за программировать "логику" на исключениях - и это все признают, нужно руки отбивать.

кроме того, есть прицип live-to-die, "падай как можно раньше", см. PHP, Erlang и подобное - там никакие "пробросы и обработка исключений" не нужны, любое необработанное исключение априори приводит к завершению процесса и уведомлению об том клиента

2) деструкторы нужны только для "эстестично глазоприятного" освобождения ресурсов, вроде файловых хендлов, или дерганий free()
аналогично про области видимости. в остальном это просто вызовы функций - бери и вызывай их явно, в чем проблема?


лично меня подобная проблема (освобождение ресурсов) вообще не парит - я давно пришел к пониманию "контекста" - к примеру времени жизни веб запроса.
прикладному программисту вообще не нужно париться про все эти освобождения, у него программа живет пару миллисекунд всего.
все вызовы на открытие файлов и аллокации памяти можно "оборачивать" и "коллекционировать", а после завершения запроса / контекста
(отдачи результата клиенту) централизованно и неявно, через собственный менеджер ресурса - освобождать,
тем самым проблема утечек памяти и невнимательности прикладного кодера уходит как класс, и деструкторы в принципе не нужны
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490878
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruCEMbможете кинуть в меня камушком, но виртуальные методы - это не капец какая нужная штука, без них можно в большинстве случаев обойтись. Вот инкапсуляция - это бОльшая часть ООПы. А полиморфизм - это когда:
- у вас есть набор объектов разных классов
- все свалены в одну кучу
- и вы понятия не имеете, кто из ни кто, на тот момент когда с ними вдруг понадобилось что-то сделать.

... да это бардак какой-то! Угу, бардак. Только иногда неизбежный. Например, ваш экзешник прилинковывает к себе чужие плагины... причём с двунаправленным импортом таблиц функций... причём на операционке, которая не поддерживает двунаправленный импорт (т.е. после работы системного линковщика функции DLL могут быть вызваны из экзешника, но не наоборот). И внезапно двум плагинам хочется использовать функции _друг_друга_, да ещё подгрузить свои карманные DLL-ки.

пример неудачный.

ясен пончик, что если ты решился взять в зависимости чужие благоглупости - то ты будешь вынужден брать в арсенал и на обслуживание весь накопленный бардак, соглашения и прочие принципы и правила.

мы говорим больше про идеализированного коня в вакууме - пишем с нуля, выбрасываем все ненужное и лишнее
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490879
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яНу зачем же "еще", мне б хоть какой-то увидеть, а то все никак ничего добиться не получается.
Вот открыл навскидку что болтается под рукой из гнусного - sha1.c
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
#if defined(__i386__) || defined(__x86_64__)
  #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val))
#elif defined(__GNUC__) && defined(__arm__)
  #define setW(x, val) do { W(x) = (val); __asm__("":::"memory"); } while (0)
#else
  #define setW(x, val) (W(x) = (val))
#endif
...


И где тут не работают #if defined() ?

Так где пруфчик-то насчет "синтаксис условных директив компилятора" С и С++?Какой стандарт Си задал компилятору? С99?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490880
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchлично меня подобная проблема (освобождение ресурсов) вообще не парит - я давно пришел к пониманию "контекста" - к примеру времени жизни веб запроса.Десяток взаимодействий с дефицитными "долгоживущими" разделяемыми ресурсами, использующими что-то вроде AddRef() и Release(), которые в силу дефицитности не могут ждать даже до конца вот этого коротенького "контекста" --- и вот тут-то вы и начнёте мечтать о плюсах :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490883
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchлично меня подобная проблема (освобождение ресурсов) вообще не парит - я давно пришел к пониманию "контекста" - к примеру времени жизни веб запроса.Десяток взаимодействий с дефицитными "долгоживущими" разделяемыми ресурсами, использующими что-то вроде AddRef() и Release(), которые в силу дефицитности не могут ждать даже до конца вот этого коротенького "контекста" --- и вот тут-то вы и начнёте мечтать о плюсах :)

пример сугубо гипотетический, и тем самым неактуальный.

из моей практики были примеры "долгоживущих" - в тех же самых контекстах стоит задача интеграции со сторонними вебсервисами и прочими базами данных,
условно 100500 клиентских коннекшинов одномоментно делают запросы, а количество соединений к внешней базе данных ограничено (не более 10 за раз, к примеру).

и?

да никакого и - опять на сцену выходит централизованный менеджер ресурсов, под названием POOLер, все 100500 клиентов сидят в очереди к условно 10 операционистам со своими билетиками электронной очереди, ничего нового, теорию массового обслуживания никто не отменял.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490884
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruУгу, бардак. Только иногда неизбежный. Например, ваш экзешник прилинковывает к себе чужие плагины... причём с двунаправленным импортом таблиц функций... причём на операционке, которая не поддерживает двунаправленный импорт (т.е. после работы системного линковщика функции DLL могут быть вызваны из экзешника, но не наоборот). И внезапно двум плагинам хочется использовать функции _друг_друга_, да ещё подгрузить свои карманные DLL-ки.Для этого, обычно, делают прокси библиотеку сопряжения, в которую "экзешник", при инициализации библиотеки, передаёт указатели на реализованные в нем функции, что могут быть вызваны другими библиотеками через прокси библиотеку. По такому принципу, к примеру, сервер FirebirdSQL позволяет UDF библиотекам выделять память в своей куче для возвращения ему некоторых параметров из функций UDF библиотек.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490885
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchiv_an_ruпропущено...
Угу, бардак. Только иногда неизбежный. Например, ваш экзешник прилинковывает к себе чужие плагины... причём с двунаправленным импортом таблиц функций... причём на операционке, которая не поддерживает двунаправленный импорт (т.е. после работы системного линковщика функции DLL могут быть вызваны из экзешника, но не наоборот). И внезапно двум плагинам хочется использовать функции _друг_друга_, да ещё подгрузить свои карманные DLL-ки.

пример неудачный.

ясен пончик, что если ты решился взять в зависимости чужие благоглупости - то ты будешь вынужден брать в арсенал и на обслуживание весь накопленный бардак, соглашения и прочие принципы и правила.

мы говорим больше про идеализированного коня в вакууме - пишем с нуля, выбрасываем все ненужное и лишнееНаша Виртуоза, как и любая другая толстая СУБД --- это тот самый конь и есть, не только написанный с нуля, но и настолько "в вакууме", что, в принципе, незначительными добавками программа может быть превращена в операционную систему (Достаточно вкорячить немного HAL и бутявку, а остальное и так всё своё, включая раздатчики памяти, сеть и кластерные IPC, планировщик файловой подсистемы и т.п.) И тем не менее, мы с нетерпением ждём подходящего момента для полноценной миграции с голых сей на плюсы.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490889
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruИ тем не менее, мы с нетерпением ждём подходящего момента для полноценной миграции с голых сей на плюсы.

вы наверное еще не пробовали почитать/понять написанное из .hpp-ек в современных STL/Boost, совсем нет?


оценить надажность/рискованность?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490893
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch1) exceptions как концепция - это очень большая ошибка индустрии, ибо это лишь завуалированная форма GOTO, причем за область видимости функции. породила намного, намного больше проблем, чем решила.


Дурак ты. Если не понимаешь, не неси околесицу.
Иди на GO программируй, там тебя ждут, "ошибка индустрии"...

Во ВСЕХ современных языках ЕСТЬ обработка исключений. Там, где их не было -- они появляются.
Это тебе ни о чём не говорит ?
Не, как бы говорит, что все вокруг идиоты, ага...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490896
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ну я]dbpatchпропущено...

А нельзя ли раскрыть по "все остальное" к примеру про эксепшены и деструкторы, про выход из области видимости и деструкторы. Как это написать на С при должном навыке, покажите?

эксепшены -- longjump,
деструкторы -- никак, только руками.
про выход из области видимости и деструкторы -- тоже никак, только руками и силой воли. Можно ещё макроязык с компиляцией в С, но зачем, если есть С++ -- не понятно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490897
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДурак ты. Если не понимаешь, не неси околесицу.
Иди на GO программируй, там тебя ждут, "ошибка индустрии"...

Во ВСЕХ современных языках ЕСТЬ обработка исключений. Там, где их не было -- они появляются.
Это тебе ни о чём не говорит ?
Не, как бы говорит, что все вокруг идиоты, ага...Воу-воу-воу!... Не надо так резко руль вправо! :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490900
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev Не надо так резко руль вправо! :)

Да надо, надо.
Идиотизм надо на корню убивать.
Если чел не осилил исключения, это совсем не значит, что они не нужны.
Вон, БелыйФилин тоже не осилил, но даже он всё же не бухтит, что исключения не нужны.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490902
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivdbpatch1) exceptions как концепция - это очень большая ошибка индустрии, ибо это лишь завуалированная форма GOTO, причем за область видимости функции. породила намного, намного больше проблем, чем решила.


Дурак ты. Если не понимаешь, не неси околесицу.
Иди на GO программируй, там тебя ждут, "ошибка индустрии"...

Во ВСЕХ современных языках ЕСТЬ обработка исключений. Там, где их не было -- они появляются.
Это тебе ни о чём не говорит ?
Не, как бы говорит, что все вокруг идиоты, ага...

твое утверждение сомнительно, ибо ты похоже даже не смог понять мною сказанное, а из "опровержений" лишь привел "все делают так, а ты что, сильно умнее остальных?"

напоминает ту самую историю про клетку обезьян, апельсин и бранспойт, когда все делают вот так, наказывают тех, кто так не делает, но никто не знает, почему они вообще начали делать вот именно так изначально.

так что пройдите, уважаемый, в 95%, вы шаблонны, тем неактуальны :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490909
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchтвое утверждение сомнительно, ибо ты похоже даже не смог понять мною сказанное, а из "опровержений" лишь привел "все делают так, а ты что, сильно умнее остальных?"


Я и не собирался убеждать тебя в чём-то, или опровергать. Не, если ты сам не понимаешь, то бесполезно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490910
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivrdb_dev Не надо так резко руль вправо! :)

Да надо, надо.
Идиотизм надо на корню убивать.
Если чел не осилил исключения, это совсем не значит, что они не нужны.
Вон, БелыйФилин тоже не осилил, но даже он всё же не бухтит, что исключения не нужны.

кто сказал, что я не осилил?
еще раз, для тех, кто трудно догоняет с первого раза - я нигде не говорил, что придя в сообщество со устоявшимися правилами нужно всех переучивать на какие-то свои правила.

если в библиотеке/решении все построено на исключениях, то ты вынужден с ними работать так, как это предписано авторами этого "творения", тщательно соблюдая все Style Guide и не только.

я же говорил про ситуацию - ты никому ничем не обязан, стоишь перед новым решением и выбираешь технологический стек.

так вот - я продолжаю утверждать, что исключения в принципе - не нужны, ибо изначально концептуально ошибочны.
и что вполне можно писать код вообще без них и есть масса примеров успешных проектов на миллионы строк, построенных вообще без них.


потому начни убивать что-то в себе, можешь начать прямо сейчас.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490912
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivdbpatchтвое утверждение сомнительно, ибо ты похоже даже не смог понять мною сказанное, а из "опровержений" лишь привел "все делают так, а ты что, сильно умнее остальных?"


Я и не собирался убеждать тебя в чём-то, или опровергать. Не, если ты сам не понимаешь, то бесполезно.

да, я не понимаю, на тему чего ты тут развыступался. ценность твоих "мессаджей" стремится к нулю.
ты вообще что сказать хочешь? что нужно просто тупо делать как все, как принято? ну ок, тебя услышали, дальше что?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490915
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchтак вот - я продолжаю утверждать, что исключения в принципе - не нужны, ибо изначально концептуально ошибочны.
и что вполне можно писать код вообще без них и есть масса примеров успешных проектов на миллионы строк, построенных вообще без них.


Исключения были в технологиях IT с самого начала, вся вычислительная математика, вычислительные машины изначально строились с этой идеей. Ты не можешь так вот прийти через 70 лет в индустрию, и сказать, что "это было ошибкой".
Ну, т.е. ты можешь, но просто тебе будут вертеть пальцем у виска в ответ, и правильно будут делать...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490918
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivИсключения были в технологиях IT с самого начала, вся вычислительная математика, вычислительные машины изначально строились с этой идеей. Ты не можешь так вот прийти через 70 лет в индустрию, и сказать, что "это было ошибкой".
Ну, т.е. ты можешь, но просто тебе будут вертеть пальцем у виска в ответ, и правильно будут делать...Ну, изначально, исключение это, всего-лишь, вектор прерывания процессора, а как там дальше - решать разработчику софта.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490921
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivdbpatchтак вот - я продолжаю утверждать, что исключения в принципе - не нужны, ибо изначально концептуально ошибочны.
и что вполне можно писать код вообще без них и есть масса примеров успешных проектов на миллионы строк, построенных вообще без них.


Исключения были в технологиях IT с самого начала, вся вычислительная математика, вычислительные машины изначально строились с этой идеей. Ты не можешь так вот прийти через 70 лет в индустрию, и сказать, что "это было ошибкой".
Ну, т.е. ты можешь, но просто тебе будут вертеть пальцем у виска в ответ, и правильно будут делать...

т.е. ты хочешь сказать, что Exceptions в ЯП были уже 70 лет назад? прямо в 1947-м году, да?

а ты смешной
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490931
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devMasterZivИсключения были в технологиях IT с самого начала, вся вычислительная математика, вычислительные машины изначально строились с этой идеей. Ты не можешь так вот прийти через 70 лет в индустрию, и сказать, что "это было ошибкой".
Ну, т.е. ты можешь, но просто тебе будут вертеть пальцем у виска в ответ, и правильно будут делать...Ну, изначально, исключение это, всего-лишь, вектор прерывания процессора, а как там дальше - решать разработчику софта.

да ладно, забей.

обычно программист эволюционирует примерно так

10 лет - изучит Basic/Scratch
15 лет - изучил Pascal, но взрослые сказали, что нужно изучать ООП ибо зарплаты не будет
18 лет - изучил Delphi/Java/JavaScript/PHP/C++, устроился джуниором
25 лет - изучил паттерны, шматтерны, скрам, аджайл и так научился мастерски подражать "взрослым", что меня произвели в "синиоры"
30 лет - после 12 лет ООП понял бессмысленность жизни, прочитал на хабре о том, что 15 лет назад меня возможно несколько обманули, но пока не понял в чем, и по советом "взрослых" начал изучать ФП
35 лет - изучив ФП понял, что меня опять обманули
36 лет - понял, что в индустрии все совсем не так, и нужно возвращаться к ANSI C, т.е. начинать заново изучать то, над чем все смеялись в 15 лет
40 лет - пусть автор виртуозы допишет сам

а наш "мастер" видимо безнадежно застрял между 25 и 30
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490932
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot MasterZiv]ну япропущено...


эксепшены -- longjump,
деструкторы -- никак, только руками.
про выход из области видимости и деструкторы -- тоже никак, только руками и силой воли. Можно ещё макроязык с компиляцией в С, но зачем, если есть С++ -- не понятно.
Ну, лично мне - для эрудиции. Человек же написал что все можно при должном навыке.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39490994
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchт.е. ты хочешь сказать, что Exceptions в ЯП были уже 70 лет назад? прямо в 1947-м году, да?

а ты смешной
В PL/1 уже были
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491002
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchMasterZivпропущено...


Исключения были в технологиях IT с самого начала, вся вычислительная математика, вычислительные машины изначально строились с этой идеей. Ты не можешь так вот прийти через 70 лет в индустрию, и сказать, что "это было ошибкой".
Ну, т.е. ты можешь, но просто тебе будут вертеть пальцем у виска в ответ, и правильно будут делать...

т.е. ты хочешь сказать, что Exceptions в ЯП были уже 70 лет назад? прямо в 1947-м году, да?

а ты смешной

В ассемблере, в машинных кодах уже были.
Об этом уже упомянули в топике.
Ну посмейся, я буду только рад.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491011
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchда ладно, забей.

обычно программист эволюционирует примерно так

10 лет - изучит Basic/Scratch
15 лет - изучил Pascal, но взрослые сказали, что нужно изучать ООП ибо зарплаты не будет
18 лет - изучил Delphi/Java/JavaScript/PHP/C++, устроился джуниором
25 лет - изучил паттерны, шматтерны, скрам, аджайл и так научился мастерски подражать "взрослым", что меня произвели в "синиоры"
30 лет - после 12 лет ООП понял бессмысленность жизни, прочитал на хабре о том, что 15 лет назад меня возможно несколько обманули, но пока не понял в чем, и по советом "взрослых" начал изучать ФП
35 лет - изучив ФП понял, что меня опять обманули
36 лет - понял, что в индустрии все совсем не так, и нужно возвращаться к ANSI C, т.е. начинать заново изучать то, над чем все смеялись в 15 лет
40 лет - пусть автор виртуозы допишет сам


У меня всё не так
Ровно наоборот

dbpatchа наш "мастер" видимо безнадежно застрял между 25 и 30

Я прошу мой ник так не склонять, либо целиком, либо уж по имени, к слову "мастерство" он не имеет (почти) никакого отношения.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491019
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ прошу мой ник так не склонять, либо целиком, либо уж по имени, к слову "мастерство" он не имеет (почти) никакого отношения.

Человек, который считает, что вправе других прямо и неаргументированног называть идиотами (а вот просто так захотелось!)
- уже никаких прав иметь не может, кроме права публичной порки.
Странно, что ты до сих пор этого не понял. Но ты продолжай, продолжай.

И ладно бы ты что по теме сказал ценного, так нет же - залез на березу, покричал, всех позабавил, слез, справился :)

А смысл где?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491025
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivrdb_dev Не надо так резко руль вправо! :)

Да надо, надо.
Идиотизм надо на корню убивать.
Если чел не осилил исключения, это совсем не значит, что они не нужны.
Вон, БелыйФилин тоже не осилил, но даже он всё же не бухтит, что исключения не нужны.Я просто не успел к началу этого топика. :)
И я не бухчу, а прямо говорю что исключения это зло и дурное изобретение. Оно возвращает нас во времена спагетти-кода.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491031
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot ну я]dbpatchпропущено...

А нельзя ли раскрыть по "все остальное" к примеру про эксепшены и деструкторы, про выход из области видимости и деструкторы. Как это написать на С при должном навыке, покажите?
https://github.com/psevon/exceptions-and-raii-in-c

еще есть boehm GC, alloca, VLA

exceptions это и есть сишная setjump в одном из вариантов реализации
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491035
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИ я не бухчу, а прямо говорю что исключения это зло и дурное изобретение.
то ли дело проверка кодов возврата в каждой строке - никакой лапши
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491051
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite OwlИ я не бухчу, а прямо говорю что исключения это зло и дурное изобретение.
то ли дело проверка кодов возврата в каждой строке - никакой лапши
Никакой. В самом коде достаточно проверить на "ошибка или нету", а потом перепрыгнуть на более вдумчивый разбор ошибки. Зато после каждой строки уже заранее известно в какой именно строке ошибка произошла.

Ну вот примерно так я и пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	if (verbose) write_to_log("Attempting to initialise ODBC");
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	if (!SQL_SUCCEEDED(retcode)) finish_process("Failed to initialize ODBC interface", 1);

	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_ENV, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);

	if (verbose) write_to_log("Connection sucessfull");
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491058
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite OwlИ я не бухчу, а прямо говорю что исключения это зло и дурное изобретение.
то ли дело проверка кодов возврата в каждой строке - никакой лапши

так никто уже не делает. проверка кода возвратов в современном С осуществляется примерно так:

Код: plaintext
1.
VERIFY_OS(fopen(filename, mode))



смысл - макрос проверяет всякие errno, делает backtrace() и прочие log_fatal вызовы

если говорить про пример выше - то наличие файла нужно проверять отдельно выше, а все остальное в любом случае неожидамое, и падать нужно немедленно.


ну или вот так
https://github.com/vrogier/ocilib/blob/master/src/ocilib_checks.h

примеры чекалок показаны там-же в .c файлах рядом. никакой лапши, все культурно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491071
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилпропущено...

то ли дело проверка кодов возврата в каждой строке - никакой лапши
Никакой. В самом коде достаточно проверить на "ошибка или нету", а потом перепрыгнуть на более вдумчивый разбор ошибки. Зато после каждой строки уже заранее известно в какой именно строке ошибка произошла.

Ну вот примерно так я и пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	if (verbose) write_to_log("Attempting to initialise ODBC");
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	if (!SQL_SUCCEEDED(retcode)) finish_process("Failed to initialize ODBC interface", 1);

	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_ENV, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);

	if (verbose) write_to_log("Connection sucessfull");



фу, таки говнокод. это все отлично заворачивается в макро

и превращается в

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    if (verbose) write_to_log("Attempting to initialise ODBC");

    SQL_CALL(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv),                                        finish_process("Failed to initialize ODBC interface", 1))
    SQL_CALL(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0),                      print_odbc_error(SQL_HANDLE_ENV, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc),                                                   print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0),                print_odbc_error(SQL_HANDLE_DBC, TRUE))
    SQL_CALL(SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT), print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt),                                                 print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0),          print_odbc_error(SQL_HANDLE_STMT, TRUE));

    if (verbose) write_to_log("Connection sucessfull");



читабельность повышается в разы - причем и вторую колонку можно решительно сократить
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491078
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?

Замечательный критерий выбора ЯП - число строк и "понятность".
Предлагаю:
Например: f1(ln(число строк кода)) + f2(критерий понятности, от 1 до 10)
меньше 1 - C, больше 1 - C++, а если единица - пиши на ассемблере.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491088
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Addxlog_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?

Замечательный критерий выбора ЯП - число строк и "понятность".
Предлагаю:
Например: f1(ln(число строк кода)) + f2(критерий понятности, от 1 до 10)
меньше 1 - C, больше 1 - C++, а если единица - пиши на ассемблере.

Предложение неверное.

C это и есть современный кроссплатформенный оптимизирующий "ассемблер".

Под конкретный процессор в ассемблерных/машинных кодах уже мало кто что пишет, ибо для всяких извращенств вроде atomic или SSE/AVX понапридумывали интринзиков и built-inов. Только когда последних нет - вот тогда да.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491089
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилпропущено...

то ли дело проверка кодов возврата в каждой строке - никакой лапши
Никакой. В самом коде достаточно проверить на "ошибка или нету", а потом перепрыгнуть на более вдумчивый разбор ошибки. Зато после каждой строки уже заранее известно в какой именно строке ошибка произошла.

Ну вот примерно так я и пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	if (verbose) write_to_log("Attempting to initialise ODBC");
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	if (!SQL_SUCCEEDED(retcode)) finish_process("Failed to initialize ODBC interface", 1);

	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_ENV, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);

	if (verbose) write_to_log("Connection sucessfull");



Я бы посоветовал последовательность retcode = .. ; if (!SQL_SUCCEEDED(..)) print (...) обернуть в что-то типа assert, привычнее выглядит.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491092
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchфу, таки говнокод. это все отлично заворачивается в макро
и превращается в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    if (verbose) write_to_log("Attempting to initialise ODBC");

    SQL_CALL(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv),                                        finish_process("Failed to initialize ODBC interface", 1))
    SQL_CALL(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0),                      print_odbc_error(SQL_HANDLE_ENV, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc),                                                   print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0),                print_odbc_error(SQL_HANDLE_DBC, TRUE))
    SQL_CALL(SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT), print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt),                                                 print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0),          print_odbc_error(SQL_HANDLE_STMT, TRUE));

    if (verbose) write_to_log("Connection sucessfull");



читабельность повышается в разы - причем и вторую колонку можно решительно сократитьвернёмся к теме топика
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    try {
       if (verbose) write_to_log("Attempting to initialise ODBC");
       SQL sql;
       sql.allocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);                                       
       sql.setEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
       sql.allocHandle(SQL_HANDLE_DBC, henv, &hdbc);
       sql.setConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);                
       sql.driverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
       sql.allocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
       sql.setStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);

       if (verbose) write_to_log("Connection sucessfull");
   }
    catch( interface_exeption &e ) {
        finish_process("Failed to initialize ODBC interface", 1);
    }
    catch( odbc_exeption &e ) {
        print_odbc_error( e.handle, true );
    }
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491096
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилпропущено...

то ли дело проверка кодов возврата в каждой строке - никакой лапши
Никакой. В самом коде достаточно проверить на "ошибка или нету", а потом перепрыгнуть на более вдумчивый разбор ошибки. Зато после каждой строки уже заранее известно в какой именно строке ошибка произошла.

Ну вот примерно так я и пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	if (verbose) write_to_log("Attempting to initialise ODBC");
	retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	if (!SQL_SUCCEEDED(retcode)) finish_process("Failed to initialize ODBC interface", 1);

	retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_ENV, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_DBC, TRUE);

	retcode = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);
	if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);

	if (verbose) write_to_log("Connection sucessfull");



Кстати, непонятно написано. По логике работы с ODBC, если какой-то из важных вызовов завершился неудачно, в дальнейших вызовах смысла нет. А в приведенном коде первое впечатление, что выполняется вывод ошибки и погнали дальше вызывать. А если print_odbc_error вызывает полный останов, то имя лучше другое придумать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491122
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Siemargl]ну япропущено...

https://github.com/psevon/exceptions-and-raii-in-c

еще есть boehm GC, alloca, VLA

exceptions это и есть сишная setjump в одном из вариантов реализации
Сенкс, познавательно. В принципе, там есть что доработать до красивой автоматики, но уровень уже вполне сносный.

Интерес представляют пары конструктор-деструктор, чтобы как код дошел до объявленной пары то выполнил конструктор и внес деструктор в финализатор. А если управление не дошло до выполнения конструктора то и деструктор не вызывать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491125
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
dbpatchAddxпропущено...


Замечательный критерий выбора ЯП - число строк и "понятность".
Предлагаю:
Например: f1(ln(число строк кода)) + f2(критерий понятности, от 1 до 10)
меньше 1 - C, больше 1 - C++, а если единица - пиши на ассемблере.

Предложение неверное.

C это и есть современный кроссплатформенный оптимизирующий "ассемблер".

Под конкретный процессор в ассемблерных/машинных кодах уже мало кто что пишет, ибо для всяких извращенств вроде atomic или SSE/AVX понапридумывали интринзиков и built-inов. Только когда последних нет - вот тогда да.

Т.е. других претензий к формуле нет? ))
Кроссплатформенного ассемблера не может быть в принципе, и как минимум, ядро компилятора можно написать только на нем.

schi По логике работы с ODBC, если какой-то из важных вызовов завершился неудачно, в дальнейших вызовах смысла нет. А в приведенном коде первое впечатление, что выполняется вывод ошибки и погнали дальше вызывать.

Абсолютно согласен. В отличии от ситуации с исключениями, где это видно сразу.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491128
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxТ.е. других претензий к формуле нет? ))
Кроссплатформенного ассемблера не может быть в принципе, и как минимум, ядро компилятора можно написать только на нем.

чушь какая-то. прямо дилема курицы и яйца, что появилось первее.

это проблема лишь нулевого цикла - т.е. для языка, не знаю, G нужно написать первый компилятор (версия 0.1) на C, а уже потом - отбустрапиться и переписать компилятор на G, перед релизом

Т.е. предыдущая (и текущая) версия компилятора G (номер версии >= 1) должна компилировать весь исходный текст компилятора G.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491130
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxКроссплатформенного ассемблера не может быть в принципеПрям сейчас в фоновом режиме пописываю фиговинку для _SimpleCortex_, щёлкая мышой по _виндовому_ IDE ;)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491133
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Addx, нет ничего более понятного, чем ассемблер! Там всё чётко - никаких неопределенностей из-за перегрузок операторов. Есть еще Instruction List.примерно той же степени чёткости.
Это не шутка.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491138
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychdbpatchфу, таки говнокод. это все отлично заворачивается в макро
и превращается в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    if (verbose) write_to_log("Attempting to initialise ODBC");

    SQL_CALL(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv),                                        finish_process("Failed to initialize ODBC interface", 1))
    SQL_CALL(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0),                      print_odbc_error(SQL_HANDLE_ENV, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc),                                                   print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0),                print_odbc_error(SQL_HANDLE_DBC, TRUE))
    SQL_CALL(SQLDriverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT), print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt),                                                 print_odbc_error(SQL_HANDLE_DBC, TRUE));
    SQL_CALL(SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0),          print_odbc_error(SQL_HANDLE_STMT, TRUE));

    if (verbose) write_to_log("Connection sucessfull");



читабельность повышается в разы - причем и вторую колонку можно решительно сократитьвернёмся к теме топика
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    try {
       if (verbose) write_to_log("Attempting to initialise ODBC");
       SQL sql;
       sql.allocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);                                       
       sql.setEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
       sql.allocHandle(SQL_HANDLE_DBC, henv, &hdbc);
       sql.setConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);                
       sql.driverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
       sql.allocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
       sql.setStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);

       if (verbose) write_to_log("Connection sucessfull");
   }
    catch( interface_exeption &e ) {
        finish_process("Failed to initialize ODBC interface", 1);
    }
    catch( odbc_exeption &e ) {
        print_odbc_error( e.handle, true );
    }



у тебя строчек кода больше. и читабельность хромает.

вот смотрю я на твой код и начинаю туда-сюда прыгать глазами - может вон та хвунция выздвать ексепшин или нет, а что если, а что не если, а может ли write_to_log че-то бросить или нет.
вот такой он ваш C++ (вернее весь ООП) - читаешь код, и никогда не можешь быть уверен, что там ото понаписано и как оно себя поведет.


то ли дело C- если написано, что b = a + 1; то ты уверен, что там просто непроверяемое на переполнение сложение, а никак не вызов через перегруженный оператор форматирования диска C, с неожиданным бросанием необрабатываемой исключительной ситуации в виде zero divizor


а вот только два дня назад думал - а не начать ли мне писать на C++ ... не, наверное не в этом году :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491154
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchegorychпропущено...
вернёмся к теме топика
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    try {
       if (verbose) write_to_log("Attempting to initialise ODBC");
       SQL sql;
       sql.allocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);                                       
       sql.setEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
       sql.allocHandle(SQL_HANDLE_DBC, henv, &hdbc);
       sql.setConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);                
       sql.driverConnect(hdbc, 0, (SQLCHAR*)connection_string, SQL_NTS, 0, 0, 0, SQL_DRIVER_NOPROMPT);
       sql.allocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
       sql.setStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY , 0);

       if (verbose) write_to_log("Connection sucessfull");
   }
    catch( interface_exeption &e ) {
        finish_process("Failed to initialize ODBC interface", 1);
    }
    catch( odbc_exeption &e ) {
        print_odbc_error( e.handle, true );
    }



у тебя строчек кода больше. и читабельность хромает.

вот смотрю я на твой код и начинаю туда-сюда прыгать глазами - может вон та хвунция выздвать ексепшин или нет, а что если, а что не если, а может ли write_to_log че-то бросить или нет.
вот такой он ваш C++ (вернее весь ООП) - читаешь код, и никогда не можешь быть уверен, что там ото понаписано и как оно себя поведет.



Зачем нужно туда-сюда глазами прыгать?!
Мы рассматриваем одинаковый код, нигде там ничего лишнего смотреть не надо.
Но вот в строчке:
Код: plaintext
1.
SQL_CALL(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt),                                                 print_odbc_error(SQL_HANDLE_DBC, TRUE));


мне, например, совершенно непонятно сходу, прерывается ли в этом месте выполнение при ошибке, или оно продолжается, каков критерий ошибки и что происходит при ее возникновении.
В то же время я четко понимаю, что если в одной из функций возникает исключение определенного типа (а они известны), процесс прерывается, и осуществляется переход к блоку обработки ошибки этого типа.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491162
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Addxdbpatchпропущено...


у тебя строчек кода больше. и читабельность хромает.

вот смотрю я на твой код и начинаю туда-сюда прыгать глазами - может вон та хвунция выздвать ексепшин или нет, а что если, а что не если, а может ли write_to_log че-то бросить или нет.
вот такой он ваш C++ (вернее весь ООП) - читаешь код, и никогда не можешь быть уверен, что там ото понаписано и как оно себя поведет.



Зачем нужно туда-сюда глазами прыгать?!
Мы рассматриваем одинаковый код, нигде там ничего лишнего смотреть не надо.
Но вот в строчке:
Код: plaintext
1.
SQL_CALL(SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt),                                                 print_odbc_error(SQL_HANDLE_DBC, TRUE));


мне, например, совершенно непонятно сходу, прерывается ли в этом месте выполнение при ошибке, или оно продолжается, каков критерий ошибки и что происходит при ее возникновении.
В то же время я четко понимаю, что если в одной из функций возникает исключение определенного типа (а они известны), процесс прерывается, и осуществляется переход к блоку обработки ошибки этого типа.

не надо юлить. если ты один раз понял принцип верификации кодов возврата макросом (проверяется все, что не успех, любой неуспех репортится, и дампится если все совсем плохо, выполненине процесса останавливается, ресурсы чистит
менеджер процессов и операционка), то ты довольно быстро начинаешть привыкать к такому подходу -
что у тебя или выполняется успешно вызов или вот тут падаем и дальше уже никуда не идем, третьего не дано

а в случае исключений мне нужно каждый раз при чтении кода напрягаться - ходить смотреть в свой блок catch, а потом еще ходить смотреть кто меня вызывает, и там тоже смотреть, а что если (или вообще не смотреть - как это обычно и происходит).

при этом я никогда не могу быть уверен, что я покрыл все возможные виды Exceptions и новая версия сторонней библиотеки
не разорвет мне все в клочья на непойманной ситуации.

т.е. область верификации расползается от одной строки кода "тут и сейчас" на неопределенное количество строк кода, которые реально никак не могут быть верифицированы.

именно потому писать на C++ промышленно отказоустойчивый код в принципе не есть возможно - именно из-за этих неявных longjmp, к тому же непредсказуемых в новых версиях

кстати, в MISRA эти все ваши set/longjmp ЯВНО запрещены. Возможно в MISRA C++ запрещены и исключения, не читал (ибо это бессмыслица полная, читать подобное). Но если в C++ запретить исключения, тогда у тебя автоматом отваливается даже STL,
и какой тогда смысл в этом вашем C++ остается?

Впрочем, это уже риторический вопрос.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491173
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devТам всё чётко - никаких неопределенностей из-за перегрузок операторов.
прозрачно далеко не для всех систем команд, особенно RISC
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491183
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatchименно потому писать на C++ промышленно отказоустойчивый код в принципе не есть возможно - именно из-за этих неявных longjmp, к тому же непредсказуемых в новых версиях

кстати, в MISRA эти все ваши set/longjmp ЯВНО запрещены. Возможно в MISRA C++ запрещены и исключения, не читал (ибо это бессмыслица полная, читать подобное) . Но если в C++ запретить исключения, тогда у тебя автоматом отваливается даже STL,
и какой тогда смысл в этом вашем C++ остается?

Бессмыслица читать MISRA, а чего вы тогда на него ссылаетесь, чтобы быть последовательным и логичным?

Кстати, MISRA C++:2008 Guideline s - Pages 186 - 187:
http://frey.notk.org/books/MISRA-Cpp-2008.pdf
Exception handling — General
Rule 15–0–1 (Document) Exceptions shall only be used for error handling.
Rule 15–0–2 (Advisory) An exception object should not have pointer type.
Rule 15–0–3 (Required) Control shall not be transferred into a try or catch block using a gotoor a switch statement.

Throwing an exception
Rule 15–1–1 (Required) The assignment-expression of a throw statement shall not itself cause an exception to be thrown.
Rule 15–1–2 (Required) NULL shall not be thrown explicitly.
Rule 15–1–3 (Required) An empty throw (throw;) shall only be used in the compound-statement of a catch handler.

Handling an exception
Rule 15–3–1 (Required) Exceptions shall be raised only after start-up and before termination of the program.
Rule 15–3–2 (Advisory) There should be at least one exception handler to catch all otherwise unhandled exceptions
Rule 15–3–3 (Required) Handlers of a function-try-block implementation of a class constructor or destructor shall not reference non-static members from this class or its bases.
Rule 15–3–4 (Required) Each exception explicitly thrown in the code shall have a handler of a compatible type in all call paths that could lead to that point.
Rule 15–3–5 (Required) A class type exception shall always be caught by reference.Rule 15–3–6 (Required) Where multiple handlers are provided in a single try-catch statement or function-try-block for a derived class and some or all of its bases, the handlers shall be ordered most-derived to base class.
Rule 15–3–7 (Required) Where multiple handlers are provided in a single try-catch statement or function-try-block, any ellipsis (catch-all) handler shall occur last.

Exception specifications
Rule 15–4–1 (Required) If a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids.

Exception handling — Special functions
Rule 15–5–1 (Required) A class destructor shall not exit with an exception.
Rule 15–5–2 (Required) Where a function’s declaration includes an exception-specification, the function shall only be capable of throwing exceptions of the indicated type(s).
Rule 15–5–3 (Required) The terminate() function shall not be called implicitly.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491192
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинdbpatchименно потому писать на C++ промышленно отказоустойчивый код в принципе не есть возможно - именно из-за этих неявных longjmp, к тому же непредсказуемых в новых версиях

кстати, в MISRA эти все ваши set/longjmp ЯВНО запрещены. Возможно в MISRA C++ запрещены и исключения, не читал (ибо это бессмыслица полная, читать подобное) . Но если в C++ запретить исключения, тогда у тебя автоматом отваливается даже STL,
и какой тогда смысл в этом вашем C++ остается?

Бессмыслица читать MISRA, а чего вы тогда на него ссылаетесь, чтобы быть последовательным и логичным?

Кстати, MISRA C++:2008 Guideline s - Pages 186 - 187:
http://frey.notk.org/books/MISRA-Cpp-2008.pdf Exception handling — General
Rule 15–0–1 (Document) Exceptions shall only be used for error handling.
Rule 15–0–2 (Advisory) An exception object should not have pointer type.
Rule 15–0–3 (Required) Control shall not be transferred into a try or catch block using a gotoor a switch statement.

Throwing an exception
Rule 15–1–1 (Required) The assignment-expression of a throw statement shall not itself cause an exception to be thrown.
Rule 15–1–2 (Required) NULL shall not be thrown explicitly.
Rule 15–1–3 (Required) An empty throw (throw;) shall only be used in the compound-statement of a catch handler.

Handling an exception
Rule 15–3–1 (Required) Exceptions shall be raised only after start-up and before termination of the program.
Rule 15–3–2 (Advisory) There should be at least one exception handler to catch all otherwise unhandled exceptions
Rule 15–3–3 (Required) Handlers of a function-try-block implementation of a class constructor or destructor shall not reference non-static members from this class or its bases.
Rule 15–3–4 (Required) Each exception explicitly thrown in the code shall have a handler of a compatible type in all call paths that could lead to that point.
Rule 15–3–5 (Required) A class type exception shall always be caught by reference.Rule 15–3–6 (Required) Where multiple handlers are provided in a single try-catch statement or function-try-block for a derived class and some or all of its bases, the handlers shall be ordered most-derived to base class.
Rule 15–3–7 (Required) Where multiple handlers are provided in a single try-catch statement or function-try-block, any ellipsis (catch-all) handler shall occur last.

Exception specifications
Rule 15–4–1 (Required) If a function is declared with an exception-specification, then all declarations of the same function (in other translation units) shall be declared with the same set of type-ids.

Exception handling — Special functions
Rule 15–5–1 (Required) A class destructor shall not exit with an exception.
Rule 15–5–2 (Required) Where a function’s declaration includes an exception-specification, the function shall only be capable of throwing exceptions of the indicated type(s).
Rule 15–5–3 (Required) The terminate() function shall not be called implicitly.



MISRA есть для C, это тру документ
есть и для C++, совсем другой документ, и я сказал - что вот его я его принципиально не читал, ибо это бессмысленно, понятие надежный софт и C++ не совместимо просто по причине фундаментальных компромисов и ограничений, заложенных в язык и среду выполнения (эти ваши new/delete/STL и иже).

в той-же MISRA C довольно четко сказано, что вся память должна быть (статически) аллоцирована при старте и при runtime никакие malloc/free не допускаются.

а эти ваши STL контейнеры и строки реально работают исключительно на динамической куче, и? т.е. MISRA C++ уже на старте несовместима с принципами, заложенными в MISRA C, и ее можно просто даже не пытаться читать.

они конечно пытаются что-то сказать в разделе 6.18.4, но это уже просто несерьезно, какой такой это C++ без new/delete?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491202
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchне надо юлить. если ты один раз понял принцип верификации кодов возврата макросом (проверяется все, что не успех, любой неуспех репортится, и дампится если все совсем плохо, выполненине процесса останавливается, ресурсы чистит
менеджер процессов и операционка), то ты довольно быстро начинаешть привыкать к такому подходу -
что у тебя или выполняется успешно вызов или вот тут падаем и дальше уже никуда не идем, третьего не дано
Ну если программе на любой чих позволяется падать, то это серьезное ограничение на решаемый круг задач. Как минимум сразу отпадают интерактивные задачи (GUI и т.п.).

А исключения позволяют выбрать на каком уровне абстракции происходит принятие решения о том, насколько важна произошедшая ошибка и что с ней делать.

Каждый раз когда в этом форуме начинался срач исключения против кодов, противники исключений приводили примеры где буквально заменялась проверка кодов обработкой исключений в каждой строчке. Естественно в реальном коде никто так не делает. Даже в той же функции редко обрабатываются исключения. Но я верю что именно так многие хейтеры исключений и добивались у себя лапшеобразного кода ))
Другое наблюдение: против исключений высказываются в основном С-шники, которые всю жизни писали на С, другими словами ни в одном реальном проекте с использованием исключений не участвовали, или участвовали на уровне джуниора. И вот эти люди считают что они имеют достаточно опыта чтобы понять что исключения не только не нужны, но и вредны ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491206
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatchВася Уткинпропущено...


Бессмыслица читать MISRA, а чего вы тогда на него ссылаетесь, чтобы быть последовательным и логичным?

Кстати, MISRA C++:2008 Guideline s - Pages 186 - 187:
пропущено...


MISRA есть для C, это тру документ
есть и для C++, совсем другой документ, и я сказал - что вот его я его принципиально не читал, ибо это бессмысленно, понятие надежный софт и C++ не совместимо просто по причине фундаментальных компромисов и ограничений, заложенных в язык и среду выполнения (эти ваши new/delete/STL и иже).

в той-же MISRA C довольно четко сказано, что вся память должна быть (статически) аллоцирована при старте и при runtime никакие malloc/free не допускаются.

а эти ваши STL контейнеры и строки реально работают исключительно на динамической куче, и? т.е. MISRA C++ уже на старте несовместима с принципами, заложенными в MISRA C, и ее можно просто даже не пытаться читать.

они конечно пытаются что-то сказать в разделе 6.18.4, но это уже просто несерьезно, какой такой это C++ без new/delete?
То что вы говорите - это ваша теория.
"Rocket science" считается одной из самых требовательных к надежности отраслей.
На практике - одна из топовых аэрокосмических компаний SpaceX использует только C++ в ракете и системах обслуживающих полет .
https://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_software_engineers_we_launch/c8bpr00/ The rocket is all C++
The rocket and spacecraft are all C++.
On the ground, we use National Instruments LabVIEW extensively.
И уже в 2016 году она сделала невозможное для других компаний: https://www.commerce.senate.gov/public/_cache/files/8a62dd3f-ead6-42ff-8ac8-0823a346b926/7F1C5970AE952E354D32C19DDC9DDCCB.mr.-tim-hughes-testimony.pdf

В полёте и системах, обслуживающих полёт, используется С++ и Linux. В менее критичных системах широко используется Python и другие языки.

Ну у меня STL работает без new/delete, на моем кастомном аллокаторе, который использует преалоцированную память.
Мало того, даже там, где нет необходимости в MISRA, well-formed C++ никогда явно не использует new/delete, а использует только контейнеры и смарт-поинтеры.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491225
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,
>>у тебя строчек кода больше. и читабельность хромает.
однообразные SQL_CALL(SQL... технично замыливают содержательную часть, зато выглядят красиво, да. Выравнивание второго столбца - вообще отличный пример прокрастинации для перфекционистов, бессмысленно потерянное время на расстановку правильного количества пробелов. Но твой вариант, конечно, лучше выглядит, чем исходный от WhiteOwl

>>вот смотрю я на твой код и начинаю туда-сюда прыгать глазами ...
почитай вот , очень полезная книжка, развлекательная, в целом)

>>то ли дело C- если написано, что b = a + 1;
а если a и b - структуры, то так и написать нельзя, удобно чё))

>>а вот только два дня назад думал - а не начать ли мне писать на C++ ... не, наверное не в этом году :)
да и в следующем не надо, дождить какой-нибудь круглой даты )
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491231
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинВ полёте и системах, обслуживающих полёт, используется С++ и Linux. В менее критичных системах широко используется Python и другие языки.
Это все слухи. Использовать для управляющей системы Linux, который ни разу не real time - как минимум странно, при том, что есть 100500 реализаций RTOS, в т.ч. очень хороших.

В остальном - что именно там используется и как пишется - это еще тот вопрос, без исходников этот спор беспредметен

С with Objects (С++ без STL/Boost) это совсем не современный C++

Вася УткинНу у меня STL работает без new/delete, на моем кастомном аллокаторе, который использует преалоцированную память.
Мало того, даже там, где нет необходимости в MISRA, well-formed C++ никогда явно не использует new/delete, а использует только контейнеры и смарт-поинтеры.

в том то и дело, что понятие well-formed это некие условные соглашения, которые ты даже
сам не всегда готов выполнять - нет нет и наваляешь говнокода побыстрому.

в этом плане для меня выбор Pure C был как раз этим и продиктован - даже если мне
захочется вывалить нечто, то сама среда мне не позволит, плюс статический анализатор еще по голове надает.

а перспектива делать парсер еще и для плюсов, чтоб кастомные правила чекать... э нет, пожалуй как нибудь потом.

хотя да, стоит признать - современный C слишком убог синтаксически, иногда просто руки опускаются (к примеру вкрутить checked integer arithmetic - вместо +-/* видеть ADD(x, y) - это не всякая психика выдержит)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491239
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskydbpatchне надо юлить. если ты один раз понял принцип верификации кодов возврата макросом (проверяется все, что не успех, любой неуспех репортится, и дампится если все совсем плохо, выполненине процесса останавливается, ресурсы чистит
менеджер процессов и операционка), то ты довольно быстро начинаешть привыкать к такому подходу -
что у тебя или выполняется успешно вызов или вот тут падаем и дальше уже никуда не идем, третьего не дано
Ну если программе на любой чих позволяется падать, то это серьезное ограничение на решаемый круг задач. Как минимум сразу отпадают интерактивные задачи (GUI и т.п.).
Да, именно так. Но писать GUI на С/C++ - это надо иметь очень серьезные на то причины ("не знаю C#/Java/Delphi/HTML/JavaScript" к ним не относится).

Назвать QT/GTK+/wxWidgets универсальным UI решением я бы вот не решился, это ни разу не мейнстрим

Anatoly MoskovskyА исключения позволяют выбрать на каком уровне абстракции происходит принятие решения о том, насколько важна произошедшая ошибка и что с ней делать.

Каждый раз когда в этом форуме начинался срач исключения против кодов, противники исключений приводили примеры где буквально заменялась проверка кодов обработкой исключений в каждой строчке. Естественно в реальном коде никто так не делает. Даже в той же функции редко обрабатываются исключения. Но я верю что именно так многие хейтеры исключений и добивались у себя лапшеобразного кода ))
Еще раз - ясен пончик, что если ты себя затянул в зависимости проекта всякую ерунду, написанную с применением исключений - то ты уже вынужден играть по этим правилам,
без исключений (каламбур).

Наверное глупо купить BMW X5 и пытаться заливать в него ракетное топливо.
Чревато - может и проедет пару километров, но потом или капремонт, или просто взорвется.


Anatoly MoskovskyДругое наблюдение: против исключений высказываются в основном С-шники, которые всю жизни писали на С, другими словами ни в одном реальном проекте с использованием исключений не участвовали, или участвовали на уровне джуниора. И вот эти люди считают что они имеют достаточно опыта чтобы понять что исключения не только не нужны, но и вредны ))

Вообще мимо.

Понимание того, что исключения и надежный код суть не совместимые понятия довольно быстро приходит, если тебе приходится писать системные службы - роботов, которые должны
отказоустойчиво и без ежедневной перезагрузки системы работать месяцами.

Здорово прочищает мозги.

И да, да, да, там live-to-die и process monitor, категорический no-threads и прочие весьма серьезные ограничения (копаем архитектуру Oracle RDBMS), но тем не менее
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491243
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchПонимание того, что исключения и надежный код суть не совместимые понятия довольно быстро приходит, если тебе приходится писать системные службы - роботов, которые должны
отказоустойчиво и без ежедневной перезагрузки системы работать месяцами.
Обоснуй
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491247
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatchВася УткинВ полёте и системах, обслуживающих полёт, используется С++ и Linux. В менее критичных системах широко используется Python и другие языки.
Это все слухи. Использовать для управляющей системы Linux, который ни разу не real time - как минимум странно, при том, что есть 100500 реализаций RTOS, в т.ч. очень хороших.

в том то и дело, что понятие well-formed это некие условные соглашения, которые ты даже
сам не всегда готов выполнять - нет нет и наваляешь говнокода побыстрому.

в этом плане для меня выбор Pure C был как раз этим и продиктован - даже если мне
захочется вывалить нечто, то сама среда мне не позволит, плюс статический анализатор еще по голове надает.
Если ты предлагаешь оценивать качество кода по вероятности нет-нет и написать new/delete или malloc/calloc/free, то ты живешь прям в яме с говнокодом А учитывая, что твой выбор этим и был продиктован, то это уже фетишь.
Ну и естественно в Space X все врут :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491249
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychвернёмся к теме топикаДа, в данном случае перевести на исключения было просто.
А вот другой кусок из того-же исходника:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
	/// And now execute the actual query
	SQLLEN rowcount=0;
	retcode=SQLExecDirect(hstmt, query_string, SQL_NTS);
	if(!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);
	if(verbose && retcode == SQL_SUCCESS_WITH_INFO) print_odbc_error(SQL_HANDLE_STMT, FALSE);
	SQLSMALLINT column_count = 0;

	while(column_count==0) {
		retcode=SQLNumResultCols(hstmt, &column_count);
		if(!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);
		if(verbose && retcode == SQL_SUCCESS_WITH_INFO) print_odbc_error(SQL_HANDLE_STMT, FALSE);

		/// MS SQL can return some information before the actual resultset
		if(column_count==0) {
			retcode = SQLMoreResults(hstmt);
			if(!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);
			if(verbose) {
				print_odbc_error(SQL_HANDLE_STMT, FALSE);
				SQLRowCount(hstmt, &rowcount);
				if(rowcount != -1) { // select statement returns -1
					sprintf(buf, "%ld rows affected", rowcount);
					write_to_log(buf);
				}
			}
			continue;
		}
		if(verbose) {
			sprintf(buf, "Query returned %d columns", column_count);
			write_to_log(buf);
		}
	}


Обрати внимание что все ODBC вызовы могут возвращать два "хороших" сообщения SQL_SUCCESS и SQL_SUCCESS_WITH_INFO (ну и множество "нехороших" естественно). Как ты собираешься сделать это на исключениях?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491250
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiКстати, непонятно написано. По логике работы с ODBC, если какой-то из важных вызовов завершился неудачно, в дальнейших вызовах смысла нет. А в приведенном коде первое впечатление, что выполняется вывод ошибки и погнали дальше вызывать. А если print_odbc_error вызывает полный останов, то имя лучше другое придумать.
Да, у данной функции заголовок такой:
Код: plaintext
1.
void print_odbc_error(SQLSMALLINT handle_type, int critical);


Соответственно если второй параметр FALSE, то ошибка печатается, но выполнение не прерывается.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491251
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemargldbpatchПонимание того, что исключения и надежный код суть не совместимые понятия довольно быстро приходит, если тебе приходится писать системные службы - роботов, которые должны
отказоустойчиво и без ежедневной перезагрузки системы работать месяцами.
Обоснуй

в случае исключений это вопрос формальной верификации кода на предмет неожиданного поведения. разновидность контрактного программирования..

в случае механизма исключений ты априори не знаешь, какая хрень выстрелит в новой версии сторонней библиотеки или в следующей версии твоего-же говнокода.

т.е. лапшекод на исключениях порождает бесконечно сложный граф возможных путей исполнния (code-flow), который верифицировать техническими средствами просто невозможно. особенно радует то, что в самих блоках обработки исключений могут возникать исключения - особо клинический случай - исключения в методах-функциях логгирования (когда даже записать о проблеме посмертный мессадж не получится).

в случае же кодов возвратов есть хоть какая-то гарантия соблюдения контрактов, и то - вот только в прошлом году пришлось пободаться и писать обертку, страшно сказать, над write() - эта хрень в новых версиях линукса (и только там) совершенно неожиданно на блокирующихся сокетах возвращала EWOULDBLOCK и нулевой результат, и это оказывается было очень даже нормальное поведение (хоть и недокументированное) пришлось написать workaround (декоратор в "новомодных" понятиях).

и таких случаев можно наприводить массу.

подобные неверифицируемые хрени приводят к "хрупким" решениям и деградациям проекта.
отсуствие сколько-то заметных и устойчивых в runtime демонов, написанных на C++ (сравнимых с apache/nginx/haproxy) - только подтверждает эти наблюдения
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491252
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchвот смотрю я на твой код и начинаю туда-сюда прыгать глазами - может вон та хвунция выздвать ексепшин или нет, а что если, а что не если, а может ли write_to_log че-то бросить или нет.Когда пишешь с исключениями - автоматически думаешь: "это функция, значит она может бросить исключение". Никаких вопросов "может или не может бросить" просто не возникает.
Другое дело что при этом можно забыть сделать перехват... Тут стоить поклониться в сторону Java и посетовать что в С++ нету требования явно пробрасывать исключения на уровень выше. Это серьезно помогает не терять беглые исключения. С другой стороны, если какая-то функция может теоретически бросить исключение, но ты знаешь что в этом конкретном случае исключения быть не может (или его просто можно проигнорировать безопасно для алгоритма), то в Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491253
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Твой код нагоняет древнерусскую тоску (с)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491254
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинdbpatchпропущено...

Это все слухи. Использовать для управляющей системы Linux, который ни разу не real time - как минимум странно, при том, что есть 100500 реализаций RTOS, в т.ч. очень хороших.

в том то и дело, что понятие well-formed это некие условные соглашения, которые ты даже
сам не всегда готов выполнять - нет нет и наваляешь говнокода побыстрому.

в этом плане для меня выбор Pure C был как раз этим и продиктован - даже если мне
захочется вывалить нечто, то сама среда мне не позволит, плюс статический анализатор еще по голове надает.
Если ты предлагаешь оценивать качество кода по вероятности нет-нет и написать new/delete или malloc/calloc/free , то ты живешь прям в яме с говнокодом А учитывая, что твой выбор этим и был продиктован, то это уже фетишь.
Ну и естественно в Space X все врут :)

чувак, у тебя явные проблемы с формальной логикой. если я не пишу явные формальные правила против говнокода, то я живу в яме с говнокодом? атас, приплыли. если у меня так все базнадежно, то зачем я их пишу? чтоб увидеть 100500 сообщений в статиканализаторе и просто подавить этот warning?

не писать new/delete - я говорил вовсе не об этом, это довольно простое правило, которое можно вписать в статический анализатор и он тебя будет каждый раз тыкать в это теплое мягкое.

в современном C++ есть штуки куда более страшные, чем new/delete, которые так и тянется рука заюзать, ибо очень дешево же - и случаи бездумных объявлений векторов в куче вместо статических массивов на стеке - это лишь самая вершина айсберга.

самая мякотка в перегруженных операторах, вот там полный жескач - их и человек порой не всегда раскурит, а научить статик аналайзер понимать, что это оператор не сложения, а вызов форматирования диска C - это никакие современные AI не могут

а написать статик аналайзер на ваши просто адские темплейты с их SFINAE ? да ну... в сад, сад, сад
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491256
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owldbpatchвот смотрю я на твой код и начинаю туда-сюда прыгать глазами - может вон та хвунция выздвать ексепшин или нет, а что если, а что не если, а может ли write_to_log че-то бросить или нет.Когда пишешь с исключениями - автоматически думаешь: "это функция, значит она может бросить исключение". Никаких вопросов "может или не может бросить" просто не возникает.
И что? каждый вызов метода оборачивать в свой собственный блок try {}? да ну да, щас, кто так делает?

и да - никто там ни о чем не думает, не надо врать самому себе. все тестируют исключительно "беспроблемное" поведение, никто сейчас не пытается задуматься даже на такие случаи, как out-of-memory или out-of-disk space, зачем?

и ладно бы - у всех бы стояли обертки над malloc()/free()/write(), которые бы не бросали в юзера неожиданный Out exception/errno, а просто бы переводили приложение в suspend state пока админ-юзер не прочистит всякое, так нет - почти все просто аварийно и непредсказуемо - и нетестировано (!) фейлятся, с корраптом и потерей данных и прочим подобным разным - никто тестов на аварийное завершение ведь не делает, а зачем?

так что не надо ляля, думают они. щазззз...


White OwlДругое дело что при этом можно забыть сделать перехват... Тут стоить поклониться в сторону Java и посетовать что в С++ нету требования явно пробрасывать исключения на уровень выше.
Ты устарел, эту ерунду уже выбросили из Java, ибо она так там и не заработала.

White OwlЭто серьезно помогает не терять беглые исключения. С другой стороны, если какая-то функция может теоретически бросить исключение, но ты знаешь что в этом конкретном случае исключения быть не может (или его просто можно проигнорировать безопасно для алгоритма), то в Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.

просто забываешь - может стоит выходу в штопор, перегреву или сваливанию в кювет.
в сад.

язык, который изначально стимулирует писать только неверифицируемый код (говнокод), и - это какое-то просто издевательство над человечеством
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491257
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,

Не вижу разницы между возвратом набора результкодов и выбросом фиксированного набора типов исключений.
И то и то надо обрабатывать.

Вот только в С++ нет явно прописанного fn() throws AA, BB, XUXU или nothrows - это появилось в более поздних языках.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491258
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итого, это на верифицирование и надежность не влияет.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491260
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargldbpatch,

Не вижу разницы между возвратом набора результкодов и выбросом фиксированного набора типов исключений.
И то и то надо обрабатывать.

См. выше пример вызова макроса VERIFY_OS() - вся обработка сидит вообще в одной строке и только там.

для более кустистых случаев - в случае кода возврата обработка просто гарантированно не выходит за пределы вызываемой функции (если конечно правильно писать обработчики), а необработанный ексепшин начинает лететь наверх, и куда и как он там прилетит - а вот полный ХЗ - и что хуже - обычно никто не делает даже простейшее тестирование покрытием кода.

говоря проще - меня статический анализатор ткнет носом в то, что я не включил вот такое-то новое значение кода возврата в блоки switch(), иди дописывай, а в случае exception он не имеет такой информации - может это не мой косяк а такой вот хитрый план - бросать это недоразумение наверх, дескать пусть юзер его сам почитает.

так понятнее? привинтить статик аналайзер на исключения не есть возможно в принципе

SiemarglВот только в С++ нет явно прописанного fn() throws AA, BB, XUXU или nothrows - это появилось в более поздних языках.

эту штуку выпилили в Java (судя по постам на хабре), ибо неработоспособно это все.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491261
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglИтого, это на верифицирование и надежность не влияет.

походу у тебя под вечер мысли туго вертятся, раз такие выводы делаешь
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491264
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlКак ты собираешься сделать это на исключениях?
если прям совсем в лоб, то как-то так ( тупой способ, я знаю. тут дизайн всего решения неплохо было бы поменять, конечно ) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
    void print_odbc_message( SQLSMALLINT handle_type )
    {
	print_odbc_error( handle_type, false );
    }

    .....

    try {
	/// And now execute the actual query
	SQLLEN rowcount=0;
	// хотя я бы эту ботву запихнул непосредственно в SQLExecDirect, возможно. 
	if( SQLExecDirect( hstmt, query_string, SQL_NTS ) == SQL_SUCCESS_WITH_INFO && verbose ) 
		print_odbc_message( SQL_HANDLE_STMT );

	SQLSMALLINT column_count = 0;
	while( column_count == 0 ) {
		if( SQLNumResultCols( hstmt, &column_count ) == SQL_SUCCESS_WITH_INFO && verbose ) 
			print_odbc_message( SQL_HANDLE_STMT );

		/// MS SQL can return some information before the actual resultset
		if( column_count == 0 ) {
			SQLMoreResults( hstmt );
			if( verbose ) {
				print_odbc_message( SQL_HANDLE_STMT );
				SQLRowCount( hstmt, &rowcount );
				if( rowcount != -1 ) { // select statement returns -1
					sprintf( buf, "%ld rows affected", rowcount );
					write_to_log( buf );
				}
			}
			continue;
		}
		if(verbose) {
			sprintf(buf, "Query returned %d columns", column_count);
			write_to_log(buf);
		}
	}
    }
    catch( odbc_exception &e ) {
	print_odbc_error( e.handle, true );
    }
    catch(...) {
	sprintf( buf, "unexpected exception detected. Call to dbpatch for more instructions how you to will be live more =))" );
	write_to_log( buf );
	exit( -1 );
    }

я надеюсь, ты понимаешь, что исключения не исключают кодов возврата? ( о, я тоже умею каламбурить )
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491269
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlв Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.Вот это очень полезная штука в яве. Я не осилил перечитывать три страницы, но лучше, для структуры кода и читаемости, выкидывать исключения на одном уровне, а ловить на том же или следующем, и если надо, прокидывать (своё, новое) дальше. И в заголовке и теле функции писать, что она (не) выкидывает. С++ не обязует это делать, но позволяет. Тогда не надо будет лазить по всей иерархии классов и искать, какая зараза его бросила. Иначе исключениями код можно запутать гораздо хитрее, чем этими всеми вашими goto-ами. По сути, это те же goto, только в одну сторону, зато скакануть можно как угодно далеко.

А СОМ - это просто был пример полиморфизма, который в свою очередь - кусок ООП :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491327
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb..но лучше, для структуры кода и читаемости, выкидывать исключения на одном уровне, а ловить на том же или следующем, и если надо, прокидывать (своё, новое) дальше. И в заголовке и теле функции писать, что она (не) выкидывает. С++ не обязует это делать, но позволяет. Тогда не надо будет лазить по всей иерархии классов и искать, какая зараза его бросила. ..Именно так.

http://en.cppreference.com/w/cpp/language/noexcept
http://en.cppreference.com/w/cpp/language/noexcept_spec
http://en.cppreference.com/w/cpp/language/except_spec было

Статические анализаторы тоже что то умеют контролировать в плане исключений
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491329
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если бы ещё ошибок не было в приведённых примерах с тучей макросов и проверок
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491355
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlКогда пишешь с исключениями - автоматически думаешь: "это функция, значит она может бросить исключение". Никаких вопросов "может или не может бросить" просто не возникает.Да. Из-за этого иногда возникает необходимость писать try...finally.
White OwlДругое дело что при этом можно забыть сделать перехват...Ну в прикладном коде иногда перехватываешь исключения, про которые точно знаешь. Остальные уходят "наверх". И где-то "совсем сверху", в системном коде, есть место, в котором перехватываются ВСЕ исключения, с целью логирования.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491356
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
dbpatch
а в случае исключений мне нужно каждый раз при чтении кода напрягаться - ходить смотреть в свой блок catch, а потом еще ходить смотреть кто меня вызывает, и там тоже смотреть, а что если (или вообще не смотреть - как это обычно и происходит).

при этом я никогда не могу быть уверен, что я покрыл все возможные виды Exceptions и новая версия сторонней библиотеки
не разорвет мне все в клочья на непойманной ситуации.


Если ты знаешь, какие исключения вызываются, и как их нужно обрабатывать, то не нужно бегать туда-сюда.
Есть стандартный подход - написал код, обработал исключения.
Идея с новой версией библиотеки, которая "разорвет в клочья" очень странная. Ты обрабатываешь все исключения, и неизвестный тип/код исключения просто говорит о том, что операция прошла с ошибкой. Аналогично коду возврата - неизвестный код - неизвестная ошибка.

dbpatchт.е. область верификации расползается от одной строки кода "тут и сейчас" на неопределенное количество строк кода, которые реально никак не могут быть верифицированы.


Как это не могут? try ... код ... catch. Попадание в блок catch - неуспешное завершение. То же само, что и с кодами, только там нужно каждую строчку обернуть в макрос, который делает то же самое, что и блок catch.
Если важна для логики программы причина ошибки - обрабатывай типы и коды ошибок, если нет (что обычно о требуется) - обрабатывай единообразно.

dbpatchименно потому писать на C++ промышленно отказоустойчивый код в принципе не есть возможно


... но вполне этим занимаются. Просто нужно понимать, где исключения можно использовать, а где нет. В коде, где идут подряд операторы, проверяющие код, пишущие в лог, и осуществляющие возврат - без проблем. Там где нужно обработать код по схеме конечных автоматов - не подходят, впрочем, как и подобные макросы.
В общем - Вы не любите кошек? Вы просто не умеете их готовить!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491377
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdxКак это не могут? try ... код ... catch. Попадание в блок catch - неуспешное завершение. То же само, что и с кодами, только там нужно каждую строчку обернуть в макрос, который делает то же самое, что и блок catch.

Если важна для логики программы причина ошибки - обрабатывай типы и коды ошибок, если нет (что обычно о требуется) - обрабатывай единообразно.



Какие-то вы право странные, прямо.

Если в случае VERIFY_OS(fopen()) - я в этом макросе имею строго определенный и документированный блок кодов возврата какой-то строго одной системной функции, и не ожидаю там всякой левой хрени, которая не относится к fopen(), то в случае исключительной ситуации на типовой ООП хрени, особенно на чуть более высоких уровнях - я вообще не уверен в том, кто и что мне может прислать, особенно в новых редакциях кода или библиотек.

Это может сделать уже к примеру write() или какой блок логгирования, при том, что я изначально этого эффекта там не ожидал ни разу.

О какой блин уверенности тут может идти речь? Мне нужно гарантированно не выпускать исключительные ситуации дальше той функции, где они возникают, но в случае типового ООП подхода (пробрасывай наверх все то, что не смог сам) - это уже не работает, так просто не принято делать, принято все необработанное бросать вышестоящим товарищам, авось они там разберутся.

И это и есть концептуальный "сдвиг по фазе". Это все равно что сантехник, который не смог закрутить кран - сбрасывал бы свои проблемы в виде аварийного потока воды на электрика, просто потому что электрик позвал этого сантехника выключить воду.

Adxdbpatchименно потому писать на C++ промышленно отказоустойчивый код в принципе не есть возможно


... но вполне этим занимаются. Просто нужно понимать, где исключения можно использовать, а где нет. В коде, где идут подряд операторы, проверяющие код, пишущие в лог, и осуществляющие возврат - без проблем. Там где нужно обработать код по схеме конечных автоматов - не подходят, впрочем, как и подобные макросы.
В общем - Вы не любите кошек? Вы просто не умеете их готовить!

Ой, я вас умоляю. Нет проблем на написании в лог. Вы попробуйте там создать проблему, нехватку места на диске или памяти, и попробуйте посмотреть к чему это в итоге приведет.

И что значит не умеете их готовить? Их вообще никто не умеет готовить, ибо сама концепция исключительных ситуаций - она изначально концептуально неверна.

Идея делать longjmp в неопределенные места при необработанных кодах возврата у любого C программиста вызовет лишь покручивание пальцем у виска, но для ООП программиста это полный нормуль, и никто не задумывается, что это же просто невероятная глупость.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491381
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КWhite OwlДругое дело что при этом можно забыть сделать перехват...Ну в прикладном коде иногда перехватываешь исключения, про которые точно знаешь. Остальные уходят "наверх". И где-то "совсем сверху", в системном коде, есть место, в котором перехватываются ВСЕ исключения, с целью логирования.

в том-то и проблема, что возникшая исключительная (аварийная) ситуация, прямо как сошедший с рельсов поезд - начинает мчаться по блокам кода, дескать давайте, сделайте там очистки ресурсов, закрытие файлов и что там еще нужно сделать.

при том что нет никакой гарантии, что вообще что-то сейчас удастся исправить, и что это "исправление" хоть как-то когда-то тестировали.

хотя наиболее правильным подходом было бы - обнаружил необрабатываемую ситуацию - ничего не пытайся исправлять, выдай стектрейс, попробуй залогироваться и просто помри прям тут и сейчас всем процессом, даже не пытайся что-то там закрывать и флашить.

но подобное сейчас архитектурно невозможно - пока не пройдешься по всему стеку вызовов обработчиков наверх - не поймешь, обработают тебя или нет.

и это и есть фундаментальная концептуальная дыра. дырища. в головах
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491395
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchхотя наиболее правильным подходом было бы - обнаружил необрабатываемую ситуацию - ничего не пытайся исправлять, выдай стектрейс, попробуй залогироватьсяНу да.
dbpatchи просто помри прям тут и сейчас всем процессомТак умирать сразу, или сначала логировать? :-)
dbpatchдаже не пытайся что-то там закрывать и флашитьtry...finally можно и не писать...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491428
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

finally нет в С++. Это так, к слову

dbpatch,

Ну так никто тебе не мешает залогироваться и свалиться в первом же catch. Проблема в головах, да
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491444
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch ..., но в случае типового ООП подхода (пробрасывай наверх все то, что не смог сам) - это уже не работает, так просто не принято делать, принято все необработанное бросать вышестоящим товарищам, авось они там разберутся. ...

Кто Вас заставляет так делать? Перехватите и обработайте все и верните true/false.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491456
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот по поводу STL в RT-системах у меня сомнения есть.

Существуют ли метрики, что

а) конкретный метод STL исполняется "не более чем", т.е имеет четко прогнозируемый по исходным данным верхний предел времени

б) конкретный метод STL потребляет "не более чем" кол-ва стека и динамической памяти ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491485
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_here ...большая универсальность (C понимают и некоторые другие языки).
Как интересно...
Какие такие языки понимают С?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491495
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglАлексей К,

finally нет в С++. Это так, к словуНу finally вроде как можно имитировать макросами, плюс ещё деструкторы вызываются при выходе из области видимости переменных, не суть. Главное, что никто не заставляет в обязательном порядке этим пользоваться.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491497
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchЧеловек, который считает, что вправе других прямо и неаргументированног называть идиотами (а вот просто так захотелось!)


Я тебя не идиотом обозвал.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491498
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилпропущено...

то ли дело проверка кодов возврата в каждой строке - никакой лапши
Никакой. В самом коде достаточно проверить на "ошибка или нету", а потом перепрыгнуть на более вдумчивый разбор ошибки. Зато после каждой строки уже заранее известно в какой именно строке ошибка произошла.

Ну вот примерно так я и пишу:


Ну, пиши, пиши.
Одно только спрошу: на ноль как делить будем, какой код возврата проверять будем, или может быть аргументы проверять будем ?
Как вообще ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491500
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch
фу, таки говнокод. это все отлично заворачивается в макро

и превращается в

Код: plaintext
1.
2.
3.
    if (verbose) write_to_log("Attempting to initialise ODBC");

    SQL_CALL(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv),                                        finish_process("Failed to initialize ODBC interface", 1))



читабельность повышается в разы - причем и вторую колонку можно решительно сократить



А ты не безнадёжен...
Теперь подумай, и ответь себе на вопрос: чем твои макросы лучше исключений.
Чем исключения лучше -- я тебе потом расскажу, ну, или прочитай где-нибудь.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491503
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlа потом перепрыгнуть на более вдумчивый разбор ошибки.
каким способом перепрыгивать?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491519
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДругое наблюдение: против исключений высказываются в основном С-шники, которые всю жизни писали на С, другими словами ни в одном реальном проекте с использованием исключений не участвовали, или участвовали на уровне джуниора. И вот эти люди считают что они имеют достаточно опыта чтобы понять что исключения не только не нужны, но и вредны ))


Ну вот именно. Неосилянты как раз и против.
Т.е. они против все.
Кое-какие осилянты тоже против, типа WO (я не думаю, что он неосилил EH за столько лет стажа в специальности).


Я ещё раз повторяю, ислючения были в IT ВСЕГДА, с момента ЗАРОЖДЕНИЯ индустрии.
Это те же деления на ноль, потери значимости, обращения по несуществующему или нулевому адресу и т.д.
Раньше это называлось системные прерывания. Иногда ещё как-то по-другому, не важно.
Теперь просто таких случаев стало больше, появилась возможность ими управлять, появилась возможность
их обрабатывать, и они стали определяться не на низшем уровне абстракции, а на более высоких.
Суть от этого не меняется -- мы определяем операции, которые в каких-то случаях невозможно выполнить,
и продолжать процесс вычисления после них невозможно.

Так что в принципе даже обсуждать тут нечего. Исключения были, есть и будут, и вредны они для отрасли или полезны, были ли они ошибкой или не были, -- спорить бессмысленно. Они были, есть и будут, и с ними нужно уметь жить и работать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491525
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Тут стоить поклониться в сторону Java и посетовать что в С++ нету требования явно пробрасывать исключения на уровень выше. Это серьезно помогает не терять беглые исключения. С другой стороны, если какая-то функция может теоретически бросить исключение, но ты знаешь что в этом конкретном случае исключения быть не может (или его просто можно проигнорировать безопасно для алгоритма), то в Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.

Я хочу напомнить, что в Java исключения делятся на два класса -- контролируемые исключения и исключения времени выполнения (неконтролируемые) (может использую немного другие термины), и только контролируемые исключения программист ОБЯЗАН поймать или объявить выбрасываемым. Неконтролируемые исключения также как и в С++ не контролируются, и их нужно обрабатывать и перехватывать. В С++ же просто все исключения неконтролируемые, не обязательны к перехвату или описанию, тут более свободная форма.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491587
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchДа, именно так. Но писать GUI на С/C++ - это надо иметь очень серьезные на то причины ("не знаю C#/Java/Delphi/HTML/JavaScript" к ним не относится).
Да мы поняли уже. То нельзя, это вредно, на все нужны причины.
Да, есть такие люди которые предпочитают ставить себя раком в рамки и писать на С.
А есть просто С++, где можно делать все то же самое что и в С, но рамок нет, и ты делаешь такой дизайн приложения который диктуется предметной областью, а не ограничениями синтаксиса.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491604
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА есть просто С++, где можно делать все то же самое что и в С, но рамок нет, и ты делаешь такой дизайн приложения который диктуется предметной областью, а не ограничениями синтаксиса.

Да все можно, кто спорит? Можно даже web серверы писать на bash, почему и нет?

Жизнь она у тебя одна, и ты волен распоряжаться ей как тебе самому угодно.

Просто в определенный момент ты доходишь до того момента, когда быть конформистом "будь как все, не спорь, не выделывайся, просто закрывай таски в джире и улыбайся на скрам-стандапе, за тебя уже подумали" тебе откровенно надоедает, и хочется сделать правильно, грамотно и хорошо.

А копнув практически в любое фундаментальное место современного IT (даже не в наслоения прикладного кода сверху) - ты видишь, что там лежат кучи, которые там навалены абы как просто по историческим причинам поиска компромисов, и кучи эти не только выглядят не очень, но и работают откровенно плохо.

Даже простой пример - типовой PHP веб сервер жужжит ну 50, ну 100 запросов в секунду, хотя какой-то непонятный GWAN может 800к запросов - уже заставляет задуматься, а чем объясняется разница в три порядка, и почему так? И почему не взлетает GWAN в массах в т.ч.?

А в остальном ты прав. Предметная область диктует дизайн, блаблабла - это все выглядит привлектельно когда тебе лет так 20 и ты толком ничего не умеешь, но потом это просто надоедает и хочется сотворить что-то действительно значимое. Просто ради фана.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491674
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchДаже простой пример - типовой PHP веб сервер жужжит ну 50, ну 100 запросов в секунду, хотя какой-то непонятный GWAN может 800к запросов http://gwan.com/download › Windows Sep 9 2009
G-WAN v1.0.4 – Discontinued.
Linux was found to be much faster.И вот так у вас всё - сначала вы строите самих себя, а потом - всех окружающих.
Может, всё-таки, надо быть аккуратнее с категоричностью и кванторами всеобщности?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491700
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovdbpatchДаже простой пример - типовой PHP веб сервер жужжит ну 50, ну 100 запросов в секунду, хотя какой-то непонятный GWAN может 800к запросов http://gwan.com/download › Windows Sep 9 2009
G-WAN v1.0.4 – Discontinued.
Linux was found to be much faster.И вот так у вас всё - сначала вы строите самих себя, а потом - всех окружающих.
Может, всё-таки, надо быть аккуратнее с категоричностью и кванторами всеобщности?

честно говоря не понял, о чем ты сейчас? автор GWAN отказался от Windows в пользу Linux, и? там не сказано, что проект закрыт вообще.

а так - мне он был интересен только тем, что он смог добиться каких-то невероятных rps (которые подтвердились на его бинариках).
т.е. просто фактом того, что такое технически возможно.

в остальном это closed-source проект, которым занимается похоже только один человек (могу ошибаться),
без передачи исходников в public domain переспектив у этого всего нет по определению
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491777
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite OwlКак ты собираешься сделать это на исключениях?
если прям совсем в лоб, то как-то так ( тупой способ, я знаю. тут дизайн всего решения неплохо было бы поменять, конечно ) :Ну так поменяй. Ты же не забыл итоговую цель? Показать что ту-же самую задачу с исключениями решать проще, элегантнее, короче, и тп чем с кодами возврата. Пока это не было продемонстрировано.
Я показал кусок реального кода решающего простую задачу. Покажите мне более удобное решение той же задачи в парадигме исключений и я перестану плеваться в их сторону.

egorychя надеюсь, ты понимаешь, что исключения не исключают кодов возврата? ( о, я тоже умею каламбурить )Не исключают.
Но комбинирование парадигм, это комбинирование, а не превосходство одного подхода над другим. Практически, ты только что признался что для удобства решения задачи, ты вынужден поступиться своей любимой техникой исключений. Ты уже не уверен в ее превосходстве?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491786
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОдно только спрошу: на ноль как делить будем, какой код возврата проверять будем, или может быть аргументы проверять будем ?
Как вообще ?Как вообще? Да элементарно! Проверим делитель перед арифметикой и будем иметь возможность либо просто задать результат в одну из констант (ноль или бесконечность, смотря что нужно по логике расчетов) или выругаемся юзеру на экран, мол дай правильное значение для делителя.
Все очень просто: я, зная что вот тут могут быть проблемы, изначально пытаюсь их минимизировать. А ты, привыкнув к подходу: "проблема? Потом поймаем", борешься со следствием проблемы. Мы в итоге просто по разному мыслим.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491791
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchчестно говоря не понял, о чем ты сейчас? автор GWAN отказался от Windows в пользу Linux, и?"Я смог только вот здесь, но всё остальное никому и не нужно".а так - мне он был интересен только тем, что он смог добиться каких-то невероятных rps (которые подтвердились на его бинариках)Помню, в начале нулевых, перец, который был продвинут в программировании под винду, получил "какие-то невероятные rps" используя TDI и прочие низкоуровневые вещи Win API.
Только что это доказывает?
Что к любому высосанному из пальца утверждению можно подобрать такой же аргумент?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491803
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКое-какие осилянты тоже против, типа WO (я не думаю, что он неосилил EH за столько лет стажа в специальности).Ах! Ну хоть кто-то в меня верит :)


MasterZivЯ ещё раз повторяю, ислючения были в IT ВСЕГДА, с момента ЗАРОЖДЕНИЯ индустрии.
Это те же деления на ноль, потери значимости, обращения по несуществующему или нулевому адресу и т.д.
Раньше это называлось системные прерывания. Иногда ещё как-то по-другому, не важно.
Теперь просто таких случаев стало больше, появилась возможность ими управлять, появилась возможность
их обрабатывать, и они стали определяться не на низшем уровне абстракции, а на более высоких.
Суть от этого не меняется -- мы определяем операции, которые в каких-то случаях невозможно выполнить,
и продолжать процесс вычисления после них невозможно.Ты путаешь исключения и исключения .
То что ты описал, что было всегда, это аварийные ситуации и они действительно были всегда и будут всегда и их до сих пор сложно ловить на прикладном уровне. Но исключения на которые я плююсь это исключения порождаемые программистом, уже на прикладном уровне.
Это действительно два разных типа исключений и они даже синтаксически в С++ обрабатываются по разному, да еще и ОС-зависимо.
Да, исключения которые ловятся через __try{}__catch(){} или sigaction() это действительно "исключения которые были всегда". И это действительно настоящие исключения.
Но дизайн приложения основанный на throw()+try{}catch(){}... это плохая идея ведущая к нечитаемому и соответственно трудно поддерживаемому коду.


MasterZivТак что в принципе даже обсуждать тут нечего. Исключения были, есть и будут, и вредны они для отрасли или полезны, были ли они ошибкой или не были, -- спорить бессмысленно. Они были, есть и будут, и с ними нужно уметь жить и работать.Аварийные ситуации были есть и будут... Но так ли уж надо их еще и вручную создавать?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491810
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovdbpatchчестно говоря не понял, о чем ты сейчас? автор GWAN отказался от Windows в пользу Linux, и?"Я смог только вот здесь, но всё остальное никому и не нужно".а так - мне он был интересен только тем, что он смог добиться каких-то невероятных rps (которые подтвердились на его бинариках)Помню, в начале нулевых, перец, который был продвинут в программировании под винду, получил "какие-то невероятные rps" используя TDI и прочие низкоуровневые вещи Win API.
Только что это доказывает?
Что к любому высосанному из пальца утверждению можно подобрать такой же аргумент?

я так и не понимаю, что ты пытаешься сказать.

пример GWAN я привел как пример критичного восприятия человеком устоявшихся реализаций и подходов.

он вполне наглядно показал, что в современном мире не умеют проектировать БЫСТРЫЕ решения, наслаивая все больше и больше луковиц этого вашего bloatware. и что если копнуть - можно добиться качественных показателей (в разы, а то и десятки, сотни раз, а не какие то несчастные +5%)

но лично меня и вовсе - интересует не сколько скорость, сколько вопрос надежности и отказоустойчивости сетевых служб-сервисов
особенно в unmanaged средах, правила написания оных.

собственно больше вопрос из отряда - как писать прикладной код на C (не буду говорить на C++), так, чтоб он мог работать месяцами, без утечек, дыр и зависаний, и так, чтоб не надо было делать review по 5-10 человек на строчку кода каждого нового комитта, и привлекать аутсорсинговую компанию раз в год для тотального аудита.


ибо ответа на этот вопрос в публичном доступе нет, а закрытые документы вроде MISRA они покрывают лишь 0.1% проблемных вопросов.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491853
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchпример GWAN я привел как пример критичного восприятия человеком устоявшихся реализаций и подходов.

он вполне наглядно показал, что в современном мире не умеют проектировать БЫСТРЫЕ решения
"Редкая профессия"Опыт общения с западными специалистами по ПО, как достаточно известными и уважаемыми, так и рядовыми программистами, убедил в одной простой вещи: практически никому не интересны те проблемы и трудности, с которыми ты сталкиваешься в процессе реализации того или иного проекта; мало кого интересуют пути и способы их преодоления. Важен и интересен прежде всего результат! Об этом образно сказал нам один коллега, эмигрировавший в Швейцарию лет пятнадцать назад.
- Вот ваш "Буран", - сказал он (дело было больше двух лет назад), удобно расположившись в кресле на открытой террасе Политехнического института в Лозанне с видом на Женевское озеро.- Программа вроде бы завершилась единственным полетом в беспилотном режиме. Наверняка в процессе его разработки конструкторы продемонстрировали высокую квалификацию, нашли какие-то интересные нестандартные решения, придумали и отработали технологию, решили уйму проблем и т.д. и т.д. Но... - заключил он с ехидцей в голосе,- не летает! Не делает то, для чего был предназначен! А значит, и говорить о нем бессмысленно. Его нет, и это главное.
собственно больше вопрос из отряда - как писать прикладной код на C (не буду говорить на C++), так, чтоб он мог работать месяцами, без утечек, дыр и зависанийПрикладной код, работающий месяцами, без утечек, дыр и зависаний, обзора кода и прочей тряхомудии может быть написан на чём угодно - от REXX до Java.
Поэтому, когда читаешь о д'Артаньяне, вокруг которого одни недоумки, сразу вспоминается классическое "Не верю!".
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491858
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то есть два пути написания надежных программ:

-берем обычный язык (С, неважно) и накладываем на него кучу правил-ограничений и науськиваем программу-проверялку их выполнения
-берем язык, в котором изначально эти ограничения встроены (Java, Rust, D) и боремся с ними в попытке сделать что то полезное =)

Похоже, на мой вопрос 20657004 ответа никто не знает....
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491865
Andrej_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?Это религиозный вопрос. Не разжигай.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491866
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВообще то есть два пути написания надежных программ:

-берем обычный язык (С, неважно) и накладываем на него кучу правил-ограничений и науськиваем программу-проверялку их выполнения
-берем язык, в котором изначально эти ограничения встроены (Java, Rust, D) и боремся с ними в попытке сделать что то полезное =)Ну да, где-то так. Но ...
Если человек сам сознательно наложил на себя кучу ограничений - это одно. А если эти наложения наложили на него другие - это уже ущемление прав и человек будет стремиться сорвать оковы. Чистая психология :)

SiemarglПохоже, на мой вопрос 20657004 ответа никто не знает....Почему-же, знаем. Просто он слишком простой.
STL была изобретена убежденным апологетом обобщенного программирования и в первой реализации она действительно следовала заявленным O(x) для всех имеющихся там шаблонов. Прошли годы, и спустя многие реализации (и переписывания с нуля) она в основном продолжает следовать заявленным характеристикам. А в частности, в той инсталляции библиотеки которая у тебя есть - ты вряд-ли сможешь найти расхождение с заявленной в документации производительностью. Но в паре-тройке функций может быть и проседание (от ошибок никто не застрахован, в том числе и люди пишущие библиотеки).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491868
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юникс и его потроха написаны на С, работают месяцами, исходники доступны, книгу (очень неплохую) о том, как писать такое, написал Эрик Реймонд, "Искусство программирования для Unix"
https://www.ozon.ru/context/detail/id/2317804/
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491906
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВот по поводу STL в RT-системах у меня сомнения есть.

Существуют ли метрики, что

а) конкретный метод STL исполняется "не более чем", т.е имеет четко прогнозируемый по исходным данным верхний предел времени

б) конкретный метод STL потребляет "не более чем" кол-ва стека и динамической памяти ?
Суть в том, что всего не учтешь, все равно нужен фидбек от объекта, а там где есть фидбек требования RT избыточны.
Вот человек, например, далеко не RTOS. Время реакции произвольное. И тем не менее, люди широко используются во всех сферах жизни и производства.
Так что это ваше RT никому вобщем-то не нужно, даже там под что оно специально создавалось.
Учите лучше ТАУ ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491909
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky...Суть в том, что всего не учтешь, все равно нужен фидбек от объекта, а там где есть фидбек требования RT избыточны.
Вот человек, например, далеко не RTOS. Время реакции произвольное. И тем не менее, люди широко используются во всех сферах жизни и производства.
Так что это ваше RT никому вобщем-то не нужно, даже там под что оно специально создавалось....
Ты на машине то ездишь?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491911
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

>>Ну так поменяй.
написать быстренько, на форуме, объектную библиотеку для работы с ODBC? мило)

>>Показать что ту-же самую задачу с исключениями решать проще, элегантнее, короче, и тп чем с кодами возврата. Пока это не было продемонстрировано.
код, очищенный от if (!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE); после каждой второй строчки программы менее элегантен, чем с ними. Ну ок, бывает. Я надеюсь только, что это библиотечный код, и ты его не пишешь для каждого запроса в приложении.

>>Практически, ты только что признался что для удобства решения задачи, ты вынужден поступиться своей любимой техникой исключений. Ты уже не уверен в ее превосходстве?
не не, догматик у нас тут один - это ты, и вот ещё dbpatch добавился ещё ))
меня не пугает ни ООП, ни исключения, ни шаблоны. Даже процедурный код, вроде представленного тобой, не пугает. Более того, я вынужден его использовать, потому что норвежские самоделкины из Qt очень постарались сделать exception safety библиотеку и превратили C++ в C.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491912
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЮникс и его потроха написаны на С, работают месяцами, исходники доступны, книгу (очень неплохую) о том, как писать такое, написал Эрик Реймонд, "Искусство программирования для Unix"
https://www.ozon.ru/context/detail/id/2317804/ и?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491913
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglВот по поводу STL в RT-системах у меня сомнения есть.
Существуют ли метрики, что
а) конкретный метод STL исполняется "не более чем", т.е имеет четко прогнозируемый по исходным данным верхний предел времени
б) конкретный метод STL потребляет "не более чем" кол-ва стека и динамической памяти ?

Не уверен, что эти метрики в готовом виде существуют, проще взять и посчитать для конкрекных инстанциаций SSTL-Евских темплетов с конкретным RT-friendly аллокатором (какой-нибудь любимый TLSF и т.п.) и прочими подробностями.
Особенно не уверен про время, так как дёрганье из кэша и дёргание из основной памяти без префетча --- запросто почти на два порядка разные времена.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491914
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,

>>Ну так поменяй.
написать быстренько, на форуме, объектную библиотеку для работы с ODBC? мило)
...А разве в MFC нет?

Кстати, я тоже не понял, print_odbc_error() прибивает программу или нет. Похоже что да.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491917
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,
>>А разве в MFC нет?
хз, я им не пользуюсь ))

>>Кстати, я тоже не понял, print_odbc_error() прибивает программу или нет. Похоже что да.
прибивает, если вторым параметром TRUE написать, WhiteOwl писал это где здесь, затерялось в бурных водах)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491922
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglВот по поводу STL в RT-системах у меня сомнения есть.
Существуют ли метрики, что
а) конкретный метод STL исполняется "не более чем", т.е имеет четко прогнозируемый по исходным данным верхний предел времени
б) конкретный метод STL потребляет "не более чем" кол-ва стека и динамической памяти ?

Не уверен, что эти метрики в готовом виде существуют, проще взять и посчитать для конкрекных инстанциаций SSTL-Евских темплетов с конкретным RT-friendly аллокатором (какой-нибудь любимый TLSF и т.п.) и прочими подробностями.
Особенно не уверен про время, так как дёрганье из кэша и дёргание из основной памяти без префетча --- запросто почти на два порядка разные времена.
Смысл не в скорости, а в детерминированности. Пусть даже 1с на 1мил элементов, но гарантированно.

Меня больше стек и память волнуют. В скорости большой запас на текущем железе (а реально РТ надо укладываться кроме спец.задач в 50-100мс), а вот если крешнется по памяти, будет опа.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491923
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТы на машине то ездишь?
Я не отвечаю на наводящие вопросы.
Если есть что спросить спрашивайте прямо, без лирических отступлений.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491925
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

А я не спрашиваю. Я говорю что РТ есть там, где ты не видишь. И не должен видеть )

Так что отрицать его необходимость - глупо.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491952
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchно потом это просто надоедает и хочется сотворить что-то действительно значимое. Просто ради фана.Ну так сотвори, что мешает? Судя по всему, ты пока не творил для фана :) Но обязательно сотвори, и ты обнаружишь одну удивительную штуку.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491962
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы же не забыл итоговую цель? Показать что ту-же самую задачу с исключениями решать проще, элегантнее, короче, и тп чем с кодами возврата. Пока это не было продемонстрировано.



не элегантнее, а вообще не невозможно по другому.

я же писал, как на ноль делить будем с кодами возврата? как память по невалидому указателю будем читать? как выходы за границы массива контролировать будем?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491963
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivОдно только спрошу: на ноль как делить будем, какой код возврата проверять будем, или может быть аргументы проверять будем ?
Как вообще ?Как вообще? Да элементарно! Проверим делитель перед арифметикой и будем иметь возможность либо просто задать результат в одну из констант (ноль или бесконечность, смотря что нужно по логике расчетов) или выругаемся юзеру на экран, мол дай правильное значение для делителя.
Все очень просто: я, зная что вот тут могут быть проблемы, изначально пытаюсь их минимизировать. А ты, привыкнув к подходу: "проблема? Потом поймаем", борешься со следствием проблемы. Мы в итоге просто по разному мыслим.

ну, кодик напиши с исключениями и с кодами возврата и сравни, чтобы вычислялась какая-то вменяемая реальная формула с делением.

я найду пример потом.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491964
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
MasterZivТак что в принципе даже обсуждать тут нечего. Исключения были, есть и будут, и вредны они для отрасли или полезны, были ли они ошибкой или не были, -- спорить бессмысленно. Они были, есть и будут, и с ними нужно уметь жить и работать.Аварийные ситуации были есть и будут... Но так ли уж надо их еще и вручную создавать?

если вы подумаете, а не будете жить в парадигме, что кто то когда-то ошибся и все пошло не так, то поймёте ви конце концов, что это все одно и то же. Исключение - это и есть аварийная ситуация и способ ее обработки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39491984
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...Не уверен, что эти метрики в готовом виде существуют, проще взять и посчитать для конкрекных инстанциаций SSTL-Евских темплетов с конкретным RT-friendly аллокатором (какой-нибудь любимый TLSF и т.п.) и прочими подробностями.
Особенно не уверен про время, так как дёрганье из кэша и дёргание из основной памяти без префетча --- запросто почти на два порядка разные времена.
Смысл не в скорости, а в детерминированности. Пусть даже 1с на 1мил элементов, но гарантированно.

Меня больше стек и память волнуют. В скорости большой запас на текущем железе (а реально РТ надо укладываться кроме спец.задач в 50-100мс), а вот если крешнется по памяти, будет опа.Ну я потому и пишу TLSF как пример, что с ним хорошо оценивать гарантированные поедания памяти и времена. С другой стороны, на практике интересует оценка поточнее, чем "длина бороды Мафусаила", поэтому смотрят и на средние времена плюс сколько-то сигм.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492021
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...

Смысл не в скорости, а в детерминированности. Пусть даже 1с на 1мил элементов, но гарантированно.

Меня больше стек и память волнуют. В скорости большой запас на текущем железе (а реально РТ надо укладываться кроме спец.задач в 50-100мс), а вот если крешнется по памяти, будет опа.Ну я потому и пишу TLSF как пример, что с ним хорошо оценивать гарантированные поедания памяти и времена. С другой стороны, на практике интересует оценка поточнее, чем "длина бороды Мафусаила", поэтому смотрят и на средние времена плюс сколько-то сигм.Это только верх айсберга - позволит использовать malloc в С-RT приложениях, но не в С++.

Вопрос - сколько malloc'ов (new) и стека например в std::sort ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492024
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я посмотрю - здесь каждый первый разрабатывает реалтаймсистемы
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492097
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилКак я посмотрю - здесь каждый первый разрабатывает реалтаймсистемыТак понимаешь, если ресурсов валом, то берется наждачка покрупнее, я например беру С# (да и ту сломал 20592132 ).

А когда у тебя какая то серверная хрень с сотнями процессов (для чего и применяют Схх), то она хоть и не РТ, но с ростом все больше и больше начинает по требованиям ее напоминать...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492182
Adx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Adx
Гость
[quot SiemarglТак понимаешь, если ресурсов валом, то берется наждачка покрупнее, я например беру С# (да и ту сломал 20592132 ).

А когда у тебя какая то серверная хрень с сотнями процессов (для чего и применяют Схх), то она хоть и не РТ, но с ростом все больше и больше начинает по требованиям ее напоминать...[/quot]

В том же C# просадка по ресурсам вполне предсказуема, нормально оценивается. Никакой проблемы писать под C# "серверную хрень с сотнями процессов" нет, просто нужно аккуратнее управлять ресурсами. На том же ASP пишутся большие сайты с немаленькой нагрузкой.
Суть реалтайма не в повышенной нагрузке, а в гарантированном времени отклика. Естественно, что это распространяется только на управляющие контуры, а интерфейсную часть можно писать на С, C++, Java, C#, Python - не проблема.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492235
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglА я не спрашиваю. Я говорю что РТ есть там, где ты не видишь. И не должен видеть )

Так что отрицать его необходимость - глупо.
Чего вдруг нельзя отрицать.
То что где-то применяется какая-то фича, не значит что в этом была необходимость.
Может просто разраб - идиот ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492262
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Ну я потому и пишу TLSF как пример, что с ним хорошо оценивать гарантированные поедания памяти и времена. С другой стороны, на практике интересует оценка поточнее, чем "длина бороды Мафусаила", поэтому смотрят и на средние времена плюс сколько-то сигм.Это только верх айсберга - позволит использовать malloc в С-RT приложениях, но не в С++.

Вопрос - сколько malloc'ов (new) и стека например в std::sort ?Кто вам запрещает в плюсах отнаследовать от std:alloc обёртку над TLSF ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492293
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...
Это только верх айсберга - позволит использовать malloc в С-RT приложениях, но не в С++.

Вопрос - сколько malloc'ов (new) и стека например в std::sort ?Кто вам запрещает в плюсах отнаследовать от std:alloc обёртку над TLSF ?А дальше что?
Мониторить сколь раз вызывается?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492418
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Кто вам запрещает в плюсах отнаследовать от std:alloc обёртку над TLSF ?А дальше что?
Мониторить сколь раз вызывается?Ну, если вы не знаете, утекает у вас память или нет, то мониторить.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492441
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbdbpatchно потом это просто надоедает и хочется сотворить что-то действительно значимое. Просто ради фана.Ну так сотвори, что мешает? Судя по всему, ты пока не творил для фана :) Но обязательно сотвори, и ты обнаружишь одну удивительную штуку.

какую штуку? что твое творение никому не нужно и не интересно, кроме тебя? я эту стадию прошел, в смысле вышел из этого замкнутого круга.

в совсем широкие массы это не идет ибо пока еще инкубатор, есть пара фундаментально пока неразрешимых проблем, а примененные компромисы не убедительны (вопрос про динамически расширяемые строки/буферы - непрерывные массивы байт, в условиях запрета на realloc/malloc/free - в смысле они расширяются через повторный mmap, но для мелких строк это не приемлимо и со стековыми строками тоже вопрос)

почему запрет на realloc - потому что старый указатель должен быть валиден, вернее участок памяти под ним должен быть адресуем до общего конца жизненного цикла вызова

впрочем, если ты не в теме проблематики то это все лишь белый шум
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492444
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...
А дальше что?
Мониторить сколь раз вызывается?Ну, если вы не знаете, утекает у вас память или нет, то мониторить.

подобное уже написано до вас :) https://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

а если серьезно - то в любом проекте свои обертки над malloc/free - я думал это просто must have уже с третьего дня старта проекта, а оказывается находятся те, кто и вопросы задает, зачем это нужно
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492448
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилКак я посмотрю - здесь каждый первый разрабатывает реалтаймсистемы

применять принципы RT можно выборочно. оно знаешь - довольно просто сделать код тормозным - просто пиши себе как обычно это делают и не парься.

а вот написать коровую часть хорошо, чтоб потом последователи имели запас прочности - это обязательное правило, если не хочешь,
чтоб твой проект поставили на списание/переписывание уже через полгода после релиза.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492459
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...
А дальше что?
Мониторить сколь раз вызывается?Ну, если вы не знаете, утекает у вас память или нет, то мониторить.
Речь не об утечке памяти, ну откуда вы вообще эту тему взяли???
Исходный вопрос 20657004

Речь о гарантии того, что ваше приложение поместится в XXX Кб оперативки и в YYY Кб стека. При любых условиях.
И о предварительной оценке XXX/YYY по исходному набору данных, если используется STL.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492584
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Ну, если вы не знаете, утекает у вас память или нет, то мониторить.
Речь не об утечке памяти, ну откуда вы вообще эту тему взяли???
Исходный вопрос 20657004

Речь о гарантии того, что ваше приложение поместится в XXX Кб оперативки и в YYY Кб стека. При любых условиях.
И о предварительной оценке XXX/YYY по исходному набору данных, если используется STL.Для гарантии не надо мониторить, для гарантии надо считать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492610
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl,

>>Ну так поменяй.
написать быстренько, на форуме, объектную библиотеку для работы с ODBC? мило)Зачем библиотеку??? Для демонстрации решения одной маленькой задачи, ты хочешь писать библиотеку???
И после этого ты еще продолжаешь утверждать что с твоими любимыми исключениями код получается проще и элегантнее?! У тебя совесть есть?

egorych Я надеюсь только, что это библиотечный код, и ты его не пишешь для каждого запроса в приложении.Зря надеешься. Это реальный код в прикладной программе. Вызовы к SQL* функциям - это вызовы библиотеки (прямое обращение к ODBC функциям), а как я эти функции вызываю и как с ними работаю - я только что показал.
Тебе этот код не нравится? Ну так почему ты не покажешь аналогичный код который тебе нравится? Неужели я слишком многого прошу? Просто покажи свой элегантный код и все.



MasterZiv, Anatoly Moskovsky, а вы? Вы тоже частенько заявляете что код с исключениями проще и лучше. Можете сделать простой и элегантный аналог на исключениях для кода показанного в 20655972 ? Или так-же как egorych сольетесь?
Вы же с базами данных работаете ежедневно и наверняка решали проблему пропуска rowcout резалтсетов?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492614
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

print_odbc_error(SQL_HANDLE_STMT, TRUE);

процесс завершает?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492616
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite Owl,

print_odbc_error(SQL_HANDLE_STMT, TRUE);

процесс завершает?Да.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
/*** Helper function to report ODBC errors */
void print_odbc_error(SQLSMALLINT handle_type, int critical) {
	SQLHANDLE hndl;          // Just to avoid passing the actual handle into this function.
	SQLCHAR sql_state[6];    // SQLSTATE is always 5 characters. google "msdn ODBC Error Codes" for code explanations
	SQLINTEGER native_error; // error code as reported by the driver. Driver specific, therefore ignored here.
	SQLCHAR message_text[2048];
	SQLSMALLINT message_length;

	// choose the appropriate handle
	switch(handle_type) {
	case SQL_HANDLE_ENV: hndl=henv; break;
	case SQL_HANDLE_DBC: hndl=hdbc; break;
	case SQL_HANDLE_STMT: hndl=hstmt; break;
	default: finish_process("Incorrect usage of print_odbc_error().", 2);
	}

	// Since any call to ODBC and/or database can return multiple messages, we have to iterate through them
	SQLSMALLINT record_number=1;
	while(TRUE) {
		retcode = SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length);
		if(retcode != SQL_SUCCESS) break;
		if( message_text[--message_length]=='\n') message_text[message_length]=0;
		sprintf(buf, "[SQLSTATE=%s] %s", sql_state, message_text);
		write_to_log(buf);
		record_number++;
	}

	if(critical) {
		odbc_cleanup();
		finish_process("Unrecoverable ODBC error", 2);
	}
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492643
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZiv, Anatoly Moskovsky, а вы? Вы тоже частенько заявляете что код с исключениями проще и лучше. Можете сделать простой и элегантный аналог на исключениях для кода показанного в 20655972 ? Или так-же как egorych сольетесь?
Вы же с базами данных работаете ежедневно и наверняка решали проблему пропуска rowcout резалтсетов?
OK, напишу, чуть позже.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492652
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZiv, Anatoly Moskovsky, а вы? Вы тоже частенько заявляете что код с исключениями проще и лучше. Можете сделать простой и элегантный аналог на исключениях для кода показанного в 20655972 ?
Прошу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
// logging
bool verbose;
#define LOG_DEBUG(msg) do { if (verbose) std::cerr << msg << std::endl; } while (0)
#define LOG_FATAL(msg) do { std::cerr << "FATAL ERROR: " << msg << std::endl; } while (0)

// sample implementation

size_t ODBCStatement::sqlNumResultCols()
{
    size_t column_count;
    retcode=SQLNumResultCols(m_hstmt, &column_count);
    if(!SQL_SUCCEEDED(retcode))
        throw sql_error(getErrorText());
    if(retcode == SQL_SUCCESS_WITH_INFO)
        LOG_DEBUG(getErrorText());

    return column_count;
}

// usage
void foo()
{
    ODBC db;
    db.connect(connect_string);

    /// And now execute the actual query
    SQLLEN rowcount=0;

    auto st = db.statement();
    st.sqlExecDirect(query_string, SQL_NTS);

    SQLSMALLINT column_count = 0;
    while(column_count==0) {
        column_count = st.sqlNumResultCols();
        /// MS SQL can return some information before the actual resultset
        if(column_count==0) {
            st.sqlMoreResults();
            continue;
        }
        LOG_DEBUG("Query returned " << column_count << " columns");
    }

}

int main()
{
    try {
        foo();
    }
    catch (sql_error& e) {
        LOG_FATAL(e.what());
    }

    return 0;
}



Краткое пояснение.
1) Отделено логирование SQL_SUCCESS_WITH_INFO от прикладного кода, которое там нафиг не нужно.
2) Фатальные ошибки приводят к аварийному завершению функции, а не приложения. И в вызывающей функции принимается решение что делать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492669
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlИзопропилWhite Owl,

print_odbc_error(SQL_HANDLE_STMT, TRUE);

процесс завершает?Да.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
/*** Helper function to report ODBC errors */
void print_odbc_error(SQLSMALLINT handle_type, int critical) {
	SQLHANDLE hndl;          // Just to avoid passing the actual handle into this function.
	SQLCHAR sql_state[6];    // SQLSTATE is always 5 characters. google "msdn ODBC Error Codes" for code explanations
	SQLINTEGER native_error; // error code as reported by the driver. Driver specific, therefore ignored here.
	SQLCHAR message_text[2048];
	SQLSMALLINT message_length;

	// choose the appropriate handle
	switch(handle_type) {
	case SQL_HANDLE_ENV: hndl=henv; break;
	case SQL_HANDLE_DBC: hndl=hdbc; break;
	case SQL_HANDLE_STMT: hndl=hstmt; break;
	default: finish_process("Incorrect usage of print_odbc_error().", 2);
	}

	// Since any call to ODBC and/or database can return multiple messages, we have to iterate through them
	SQLSMALLINT record_number=1;
	while(TRUE) {
		retcode = SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length);
		if(retcode != SQL_SUCCESS) break;
		if( message_text[--message_length]=='\n') message_text[message_length]=0;
		sprintf(buf, "[SQLSTATE=%s] %s", sql_state, message_text);
		write_to_log(buf);
		record_number++;
	}

	if(critical) {
		odbc_cleanup();
		finish_process("Unrecoverable ODBC error", 2);
	}
}



Дико извиняюсь, а зачем while (TRUE) ?
Почему не
Код: plaintext
1.
2.
	while(SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length) == SQL_SUCCESS) {



?

В свое время очень впечатлил пример рефакторинга кода Рихтера в progstone
http://progstone.narod.ru/reciprocality/r0/day2.html
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492693
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492700
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?Это потому, что в убогих сях, в отличие от правильного muLISPа, нет неявных PROGN-ов и неявных COND-ов, и из-за этого программирование сценариев "сначала частные случаи, потом более общие" требует костылей вроде фиктивного цикла с брейками.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492708
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglпропущено...

Речь не об утечке памяти, ну откуда вы вообще эту тему взяли???
Исходный вопрос 20657004

Речь о гарантии того, что ваше приложение поместится в XXX Кб оперативки и в YYY Кб стека. При любых условиях.
И о предварительной оценке XXX/YYY по исходному набору данных, если используется STL.Для гарантии не надо мониторить, для гарантии надо считать.Выдохнул.

Еще раз, уже пятый. Спрашиваю.

ЕСТЬ СПОСОБ КАК ПОСЧИТАТЬ ???
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492716
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovschiДико извиняюсь, а зачем while (TRUE) ?Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.

Фигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис

Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}



Удобнее, чем

Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492717
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruschiДико извиняюсь, а зачем while (TRUE) ?Это потому, что в убогих сях, в отличие от правильного muLISPа, нет неявных PROGN-ов и неявных COND-ов, и из-за этого программирование сценариев "сначала частные случаи, потом более общие" требует костылей вроде фиктивного цикла с брейками.

В убогих сях есть синтаксис оператора while, в описании этого синтаксиса не указано, что в скобках после while должно всегда стоять TRUE
(Специально открыл K&R)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492718
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiФигасе. Хотелось бы услышать, чем, применительно к данному кодуПерепишите на кошерный, с вашей точки зрения вариант и сравните.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492729
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi:=
Злостный офтопик
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492731
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyschi:=
Злостный офтопик Шпейон спалилсо 0/

Всех с пятницей
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492741
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Для гарантии не надо мониторить, для гарантии надо считать.Выдохнул.

Еще раз, уже пятый. Спрашиваю.

ЕСТЬ СПОСОБ КАК ПОСЧИТАТЬ ???сначала смотрите оверхеды своего любимого аллокатора в статье про этот аллокатор. Потом складываете все вызовы аллокатора в один столбик, фарш на стеке в другой. В случае Оптерона, если ничего не путаю и если нужен контроль за приближающимся переполнением стека, то столбиков для стека понадобится два --- что растёт снизу вверх и что растёт сверху вниз. Тупо, нудно, лучше привлечь двух стажёров, чтобы каждый независимо от другого разметил комментариями код, строчку за строчкой, а потом meld-ом сравнить их результаты, и увидеть ошибки (ну, часть ошибок :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492812
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.

Ушел читать
http://www.embedded.com/design/programming-languages-and-tools/4429790/How-to-make-C--more-real-time-friendly
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492832
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiВ убогих сях есть синтаксис оператора while, в описании этого синтаксиса не указано, что в скобках после while должно всегда стоять TRUE (Специально открыл K&R)Я, периодически, использую иную форму:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
do
{
  ...
  if (...) break;
  ...
  if (...) break;
  ...
} while (false);
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492835
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ, периодически, использую иную форму:а я стараюсь такие вещи в функцию выносить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
{
  ...
  if (...) return false;
  ...
  if (...) return false;
  ...
};
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492838
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyschi:=
Злостный офтопик

"Но что-то его выдавало: то ли буденовка, то ли орден Ленина, то ли парашют, волочащийся за спиной."
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492853
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb, менять простой "jmp near ptr" на "ret" там, где просто не хочется писать goto?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492896
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiBasil A. Sidorovпропущено...
Затем, что:
Код: sql
1.
if (условие) break

удобнее, чем:
Код: sql
1.
2.
3.
if (другое_условие) {
  /// портянка кода
}

Особенно удобнее, если условий выхода - несколько и в разных местах.

Фигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис

Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}



Удобнее, чем

Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}



Блин, ну чего ты привязался ?
Ну, захотелось ему так, что теперь ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492907
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiФигасе. Хотелось бы услышать, чем, применительно к данному коду, синтаксис
Код: plaintext
1.
2.
3.
4.
5.
6.
while (TRUE) {
  foo := bar(......)
  if (foo) 
    break;
...
}


Удобнее, чем
Код: plaintext
1.
2.
3.
while (bar(....)) {
  ...
}

Результаты работы второго варианта неидентичен первому.
Правильный вариант:
Код: plaintext
1.
2.
3.
4.
while ((bool)(foo = bar(...)))
{
  ...
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39492915
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devCEMb, менять простой "jmp near ptr" на "ret" там, где просто не хочется писать goto?вопрос, конечно, философский. Но у тебя там блок обработки. Скорее всего, его можно логически выдернуть из кода. А тогда есть вероятность, что его можно оформить, как отдельную функцию. Ну и понятно, что вероятность второго меньше, чем вероятность первого.
Я в функции код выношу, чтобы не городить лишние if-ы и скоупы. Без фанатизма.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbWhite Owlв Java это "игнорирование исключения" опять таки надо явно прописывать, а в С++ просто "забываешь" про него.Вот это очень полезная штука в яве. Я не осилил перечитывать три страницы, но лучше, для структуры кода и читаемости, выкидывать исключения на одном уровне, а ловить на том же или следующем, и если надо, прокидывать (своё, новое) дальше. И в заголовке и теле функции писать, что она (не) выкидывает. С++ не обязует это делать, но позволяет. Тогда не надо будет лазить по всей иерархии классов и искать, какая зараза его бросила. Иначе исключениями код можно запутать гораздо хитрее, чем этими всеми вашими goto-ами. По сути, это те же goto, только в одну сторону, зато скакануть можно как угодно далеко.

А СОМ - это просто был пример полиморфизма, который в свою очередь - кусок ООП :)
Не совсем так. В java действует соглашение что обработать исключение
Можно только в том случае если на текущем уровне мы в состоянии
Принять какое то решение. В остальных случаях мы имеем право его
Бросить наверх.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493173
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЛадно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493190
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruSiemarglЛадно. Я понял, что задал слишком сложный вопрос для этого форума и про доказательства алгоритмов никто не помнит.Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?Я понимаю, что не слишком подробно пишу, надеясь на понимание собеседников.

Но кажется, ты совсем не понял вопроса. Вопрос был про доказанные оценки для алгоритмов STL.

Все, самовыпиливаюсь...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493210
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargliv_an_ruпропущено...
Если для вашего алгоритма уже есть даже доказанные оценки, зачем вы его вообще пишете?Я понимаю, что не слишком подробно пишу, надеясь на понимание собеседников.

Но кажется, ты совсем не понял вопроса. Вопрос был про доказанные оценки для алгоритмов STL.

Все, самовыпиливаюсь...Там и доказывать нечего, абсолютно тупые же контейнеры, всё в Седжевике. Проблема не в стоимости "кирпичиков", а в "бухучёте", чтобы получить стоимость большого нагромождения этих "кирпичиков" в вашей программе. И эта работа абсолютно одинакова хоть для голого си, хоть для плюсов.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiВ свое время очень впечатлил пример рефакторинга кода Рихтера в progstone
http://progstone.narod.ru/reciprocality/r0/day2.html
Мне кажется что глубокие рассуждения о пользе или вреде нулевого факториала
ведут нас к базовым аксиомам чисел. (Старик Гёдель ехидно улыбается с портретов.)
Как определили функцию так она и "поплыла".

Ничего мы фундаментально не улучшим если даже лишим функцию области определения.
А если заставим ее быть равной нулю при x=0 то потеряем некую рекурретную
индуктивность. Во все формулы надо будет ввести if (...) которых защитит произведение
от внезапного обнуления.

Кроме того количество перестановок пустого множества предметов дает определенные
философские допущения, улучшающие картину мира.

Тоесть все вроде-бы логично. У нес есть ОДНА перестановка одного предмета.
И ОДНА перестановка пустого множества предметов.

Статью целиком не читал. Пробежал по диагонали. Жаль время терять на попытки
искать сенсацию где ее нет. Уж лучше копать уфологию там или историю шестой
расы. Продуктивнее будет.... мдя.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493235
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlMasterZiv, Anatoly Moskovsky, а вы? Вы тоже частенько заявляете что код с исключениями проще и лучше. Можете сделать простой и элегантный аналог на исключениях для кода показанного в 20655972 ?
Прошу.Ну это уже можно читать...
Но "нэ, нэ нравится". Все же ODBC это изначально процедурная библиотека и если следовать показанному подходу, надо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQLSMALLINT SQLNumResultCols_we () {
    SQLSMALLINT column_count = 0;

    retcode=SQLNumResultCols(m_hstmt, &column_count);

    if(!SQL_SUCCEEDED(retcode))
        throw sql_error(getErrorText());
    if(retcode == SQL_SUCCESS_WITH_INFO)
        LOG_DEBUG(getErrorText());

    return column_count;
}


То есть либо самому писать обертку, либо найти уже написаную кем-то.

А еще, в этом коде кучка ошибок :) Он не аналогичен моему...

Anatoly MoskovskyКраткое пояснение.
1) Отделено логирование SQL_SUCCESS_WITH_INFO от прикладного кода, которое там нафиг не нужно.Не согласен. В данном конкретном случае это было действительно оправдано. Кусочек кода маленький. Но в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO. Во многих случаях эту информацию можно смело игнорировать, но если сделать обертку над функцией которая всегда делает отладочню печать - мы рискуем получить излишне перегруженный лог. Именно по этой причине я предпочитаю обращать внимание на SQL_SUCCESS_WITH_INFO только там где это действительно нужно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493236
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiДико извиняюсь, а зачем while (TRUE) ?
Почему не
Код: plaintext
1.
2.
	while(SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length) == SQL_SUCCESS) {



?Потому что вызов этой функции уже очень длинный. Чисто для визуальщины - отдельно цикл, отдельно вызов функции, отдельно выход из цикла.
Можно конечно написать и так как ты предлагаешь - меньше строк будет, но...
Я просто предпочитаю не писать условие которое требует переноса на следующую сторку. Лучше уж завести несколько булевых переменных и вычислять их отдельно от if/while.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493257
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonschiВ свое время очень впечатлил пример рефакторинга кода Рихтера в progstone
http://progstone.narod.ru/reciprocality/r0/day2.html
Мне кажется что глубокие рассуждения о пользе или вреде нулевого факториала
ведут нас к базовым аксиомам чисел. (Старик Гёдель ехидно улыбается с портретов.)
Как определили функцию так она и "поплыла".

Ничего мы фундаментально не улучшим если даже лишим функцию области определения.
А если заставим ее быть равной нулю при x=0 то потеряем некую рекурретную
индуктивность. Во все формулы надо будет ввести if (...) которых защитит произведение
от внезапного обнуления.

Кроме того количество перестановок пустого множества предметов дает определенные
философские допущения, улучшающие картину мира.

Тоесть все вроде-бы логично. У нес есть ОДНА перестановка одного предмета.
И ОДНА перестановка пустого множества предметов.

Статью целиком не читал. Пробежал по диагонали. Жаль время терять на попытки
искать сенсацию где ее нет. Уж лучше копать уфологию там или историю шестой
расы. Продуктивнее будет.... мдя.

Эту книгу надо целиком читать - полезно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493258
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlschiДико извиняюсь, а зачем while (TRUE) ?
Почему не
Код: plaintext
1.
2.
	while(SQLGetDiagRec(handle_type, hndl, record_number,
				sql_state, &native_error, message_text, sizeof(message_text), &message_length) == SQL_SUCCESS) {



?Потому что вызов этой функции уже очень длинный. Чисто для визуальщины - отдельно цикл, отдельно вызов функции, отдельно выход из цикла.
Можно конечно написать и так как ты предлагаешь - меньше строк будет, но...
Я просто предпочитаю не писать условие которое требует переноса на следующую сторку. Лучше уж завести несколько булевых переменных и вычислять их отдельно от if/while.

Длина вызова функции несильно зависит от места расположения вызова. Лично меня всегда напрягают бесконечные циклы там, где без них можно обойтись. Но я никоим образом не навязываюсь.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493271
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlнадо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
И что, руки отвалятся один раз такие оберки сделать? Да и print_odbc_error, это не обертка что ли? Двойные стандарты?
White OwlА еще, в этом коде кучка ошибок :) Он не аналогичен моему...
Я не нанимался отлаживать код. Вопрос был как будет выглядеть код на исключениях. Ответ получен.

White OwlНо в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO
При необходимости этот вопрос решаются элементарно.

Таким образом, код на исключениях выглядит намого проще и понятнее, потому что есть возможность элементарно отделить весь отладочный код от прикладного, и я этим воспользовался в этим примере.
На кодах возврата это невозможно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493275
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlнадо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
И что, руки отвалятся один раз такие оберки сделать? Да и print_odbc_error, это не обертка что ли? Двойные стандарты?
White OwlА еще, в этом коде кучка ошибок :) Он не аналогичен моему...
Я не нанимался отлаживать код. Вопрос был как будет выглядеть код на исключениях. Ответ получен.

White OwlНо в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO
При необходимости этот вопрос решаются элементарно.

Таким образом, код на исключениях выглядит намого проще и понятнее, потому что есть возможность элементарно отделить весь отладочный код от прикладного, и я этим воспользовался в этим примере.
На кодах возврата это невозможно.По моему грустному опыту, попытки назвать "отладочным" код, остающийся в боевом экзешнике --- это обычно попытки обосновать меньшую тщательность отладки этого "отладочного" кода. А программулине и юзерам потом по барабану, как назывался тот код, который привёл к ошибке --- "отладочный" или ещё как.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493277
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schimaytonпропущено...

Мне кажется что глубокие рассуждения о пользе или вреде нулевого факториала
ведут нас к базовым аксиомам чисел. (Старик Гёдель ехидно улыбается с портретов.)
Как определили функцию так она и "поплыла".

Ничего мы фундаментально не улучшим если даже лишим функцию области определения.
А если заставим ее быть равной нулю при x=0 то потеряем некую рекурретную
индуктивность. Во все формулы надо будет ввести if (...) которых защитит произведение
от внезапного обнуления.

Кроме того количество перестановок пустого множества предметов дает определенные
философские допущения, улучшающие картину мира.

Тоесть все вроде-бы логично. У нес есть ОДНА перестановка одного предмета.
И ОДНА перестановка пустого множества предметов.

Статью целиком не читал. Пробежал по диагонали. Жаль время терять на попытки
искать сенсацию где ее нет. Уж лучше копать уфологию там или историю шестой
расы. Продуктивнее будет.... мдя.


Эту книгу надо целиком читать - полезно.
Сложно вести беседу, основываясь на ссылках на книги.

В этом топике есть живые люди. Ораторы. И мне интересно
Слышать их живое мнение.

Я не буду против вашего резюмирования книги. И я готов его
Обсуждать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493357
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlнадо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
И что, руки отвалятся один раз такие оберки сделать? Да и print_odbc_error, это не обертка что ли? Двойные стандарты?
White OwlА еще, в этом коде кучка ошибок :) Он не аналогичен моему...
Я не нанимался отлаживать код. Вопрос был как будет выглядеть код на исключениях. Ответ получен.

White OwlНо в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO
При необходимости этот вопрос решаются элементарно.

Таким образом, код на исключениях выглядит намого проще и понятнее, потому что есть возможность элементарно отделить весь отладочный код от прикладного, и я этим воспользовался в этим примере.
На кодах возврата это невозможно.

господи, ООП головного мозга в терминальной стадии, право.
что элементарнее может быть NDEBUG и assert(), какие еще исключения?

зачем придумывать на коленке еще одну кривую и косую реализацию деления на прикладной и отладочный код?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493359
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruПо моему грустному опыту, попытки назвать "отладочным" код, остающийся в боевом экзешнике --- это обычно попытки обосновать меньшую тщательность отладки этого "отладочного" кода. А программулине и юзерам потом по барабану, как назывался тот код, который привёл к ошибке --- "отладочный" или ещё как.

Не надо утрировать. Средства диагностики в runtime (поддержка трассировочных и отладочных режимов) - это большое искусство, которому в школе вообще не учат.
Тем более, после "релиза" просто так через gdb уже не походишь, целые куски за счет инлайнинга запросто становятся недоступными для пошаговой трассировки.

Собственно когда говорят про необходимость удаления отладочного кода - это сразу выдает
в собеседнике формошлепа из какого C++Builder или его аналога, который работает в
условиях конечной недоступности среды выполнения, ему на эти инструментарии трассировки глубоко фиолетово.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493383
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch,

Интересно, что из моего комментария было написано так двусмысленно, что дало вам повод написать этот ответ? Особенно если коммент про код, остающийся в релизном экзешнике, а ответ --- про "говорят про необходимость удаления отладочного кода" (цвет мой).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493395
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
while(SQL_SUCCESS == SQLGetDiagRec
    (
      handle_type,
      hndl,
      record_number,
      sql_state,
      &native_error,
      message_text,
      sizeof(message_text),
      &message_length
    ))
{
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493406
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchчто элементарнее может быть NDEBUG и assert(), какие еще исключения?
Ждем теперь реализацию того же кода на ассертах.
Ну чисто чтоб поржать над убогими сишниками )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493418
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchiv_an_ruПо моему грустному опыту, попытки назвать "отладочным" код, остающийся в боевом экзешнике --- это обычно попытки обосновать меньшую тщательность отладки этого "отладочного" кода. А программулине и юзерам потом по барабану, как назывался тот код, который привёл к ошибке --- "отладочный" или ещё как.

Не надо утрировать. Средства диагностики в runtime (поддержка трассировочных и отладочных режимов) - это большое искусство, которому в школе вообще не учат.
Тем более, после "релиза" просто так через gdb уже не походишь, целые куски за счет инлайнинга запросто становятся недоступными для пошаговой трассировки.

Собственно когда говорят про необходимость удаления отладочного кода - это сразу выдает
в собеседнике формошлепа из какого C++Builder или его аналога, который работает в
условиях конечной недоступности среды выполнения, ему на эти инструментарии трассировки глубоко фиолетово.
Судя по его тематике, у него просто другой уровень надёжности и отклика, в его случаях он как раз прав - роль отладочного кода играют тесты.
Отладочные Non Zerro Cost механизмы в продакшн это обычно ширпотреб, дёшево и сердито - с которым как я понимаю он и не работал.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493622
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruAnatoly MoskovskyТаким образом, код на исключениях выглядит намого проще и понятнее, потому что есть возможность элементарно отделить весь отладочный код от прикладного, и я этим воспользовался в этим примере.
На кодах возврата это невозможно.По моему грустному опыту, попытки назвать "отладочным" код, остающийся в боевом экзешнике --- это обычно попытки обосновать меньшую тщательность отладки этого "отладочного" кода. А программулине и юзерам потом по барабану, как назывался тот код, который привёл к ошибке --- "отладочный" или ещё как.
А как бы вы назвали этот код? И как обычно называете остающийся в боевом экзешнике код, который обрабатывает серьёзные ошибки?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493639
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlнадо будет каждый вызов SQL* функции обернуть в отдельную функцию/метод типа:
И что, руки отвалятся один раз такие оберки сделать? Да и print_odbc_error, это не обертка что ли? Двойные стандарты? Не надо путать обертки и вынос повторяющегося кода в функцию.

Anatoly MoskovskyWhite OwlА еще, в этом коде кучка ошибок :) Он не аналогичен моему...
Я не нанимался отлаживать код. Вопрос был как будет выглядеть код на исключениях. Ответ получен.Да, получен... Где-то так на троечку. Видно что студент что-то знает по теме, но задача решена все-же неправильно.

Anatoly MoskovskyWhite OwlНо в большой программе далеко не всегда нужно обращать внимание на SQL_SUCCESS_WITH_INFO
При необходимости этот вопрос решаются элементарно.И как именно? Добавлением параметра в обертку? Или выключением-включением verbose флага?

Anatoly MoskovskyТаким образом, код на исключениях выглядит намого проще и понятнее, потому что есть возможность элементарно отделить весь отладочный код от прикладного, и я этим воспользовался в этим примере.
На кодах возврата это невозможно.Ну с чего вдруг невозможно то??? Продемонстрированное отделение отладочного кода от прикладного основано целиком на обертке функции. Делаем обертку на кодах возврата и получаем точно ту-же функциональность что и "невозможна".
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493645
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинiv_an_ruпропущено...
По моему грустному опыту, попытки назвать "отладочным" код, остающийся в боевом экзешнике --- это обычно попытки обосновать меньшую тщательность отладки этого "отладочного" кода. А программулине и юзерам потом по барабану, как назывался тот код, который привёл к ошибке --- "отладочный" или ещё как.
А как бы вы назвали этот код? И как обычно называете остающийся в боевом экзешнике код, который обрабатывает серьёзные ошибки?Да никак :)

Во-первых, серьёзная ошибка обрабатывается директором пользователя, когда он пишет вендору письмо, что не будет продлять лицензию, или непосредственно юзером, который в открытом мэйллисте посылает вендора к митохондриальной праматери. А код в экзешние может обрабатывать особые случаи.

Во-вторых, у нас в русском устоялось кривое понимание exception как то "исключение", которое "чрезвычайное" или "диковинное", хотя вообще-то оно просто вариант из "правило-исключение", оно не более, чем "не самая последняя ветка" в дереве правил. Изначальную дею окончательно похоронил уродский синтаксис try-catch, в котором catch почему-то оказался после try, хотя в любой основанной на продукциях / правилах переписывания / name-it-yourself системе исключения из общих правил пишутся, само собой, перед общими правилами, просто потому, что условия для применения исключений проверяются до применения общего правила.

В третьих, когда терминология успешно переведена с русского языка на русский, становится нагляднее простая мысль.
Код для обнаружения/обработки особых случаев ничем принципиально не отличается от кода, работающего в случае, если ничего особого нет (либо если "особость" ситуации вовремя не обнаружена, и NULL-ёвый указатель на неоткрытый файл ехидно ухмыляется в ожидании fwrite()). И никакого особого названия он поэтому не требует, достаточно сказать, чем этот код занимается. Это может быть код журналирования событий, код монитора, код перераспределения ресурсов на лету, код системы кортроля доступа, код защиты данных от скрытой порчи, код для плавной деградации, код для того, код для сего или код для всего этого разом :) И только "отладочного" кода там нет, потому что он на одну половину обёрнут в #ifdef DEBUG, а на вторую --- в #ifndef NDEBUG, и в любом случае в релизе его вообще нет.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493654
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Addxlog_hereПредполагается, что строк одинаково или почти одинаково, понятность тоже не отличается.
Преимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.

Кто что думает?

Замечательный критерий выбора ЯП - число строк и "понятность".
Предлагаю:
Например: f1(ln(число строк кода)) + f2(критерий понятности, от 1 до 10)
меньше 1 - C, больше 1 - C++, а если единица - пиши на ассемблере.
С предложениями опоздал.

Есть в Метриках Холстеда:
- Difficulty
- Time to understand

Кстати сорцы С и С++ с исключениями я-бы предложил прогнать через анализатор.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493683
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНе надо путать обертки и вынос повторяющегося кода в функцию.
Так в данном случае обертка имеет несколько назначений. Одно из них - это устранение дублирования кода.
Потому что в оригинальном примере примерно половина кода - это дублирование конструкции
Код: plaintext
1.
2.
if(!SQL_SUCCEEDED(retcode)) print_odbc_error(SQL_HANDLE_STMT, TRUE);
if(verbose && retcode == SQL_SUCCESS_WITH_INFO) print_odbc_error(SQL_HANDLE_STMT, FALSE);


То, что вас это не смущает, и вы копипастите этот паттерн по всему проекту, вместо того чтобы вынести в функцию (тут даже не про исключения речь, а просто об элементарном повторном использовании кода), вполне объясняет ваше непонимание почему код, который, я привел, намного более простой, читаемый и сопровождаемый. Не удивлюсь если вообще большинство кода в ваших проектах - копипаста в индусском стиле.

White OwlИ как именно? Добавлением параметра в обертку? Или выключением-включением verbose флага?
Вы даже не хотите капельку подумать. Понимаю. Копипаста проще. Скопировал - отредактировал. Нафиг проектировать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493715
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю не скатываться до обидок.

Оба подхода имеют право на жизнь - квалификация спорщиков это только подтверждает.

Тем не менее, подолью маслица в огонь - на каком фреймворке базируетесь - те методики и стоит применять.
А если пишется с нуля - каждый себе господин.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493718
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iv_an_ruВася Уткинпропущено...

А как бы вы назвали этот код? И как обычно называете остающийся в боевом экзешнике код, который обрабатывает серьёзные ошибки?Да никак :)

Во-первых, серьёзная ошибка обрабатывается директором пользователя, когда он пишет вендору письмо, что не будет продлять лицензию, или непосредственно юзером, который в открытом мэйллисте посылает вендора к митохондриальной праматери. А код в экзешние может обрабатывать особые случаи.

Во-вторых, у нас в русском устоялось кривое понимание exception как то "исключение", которое "чрезвычайное" или "диковинное", хотя вообще-то оно просто вариант из "правило-исключение", оно не более, чем "не самая последняя ветка" в дереве правил. Изначальную дею окончательно похоронил уродский синтаксис try-catch, в котором catch почему-то оказался после try, хотя в любой основанной на продукциях / правилах переписывания / name-it-yourself системе исключения из общих правил пишутся, само собой, перед общими правилами, просто потому, что условия для применения исключений проверяются до применения общего правила .

В третьих, когда терминология успешно переведена с русского языка на русский, становится нагляднее простая мысль.
Код для обнаружения/обработки особых случаев ничем принципиально не отличается от кода, работающего в случае, если ничего особого нет (либо если "особость" ситуации вовремя не обнаружена, и NULL-ёвый указатель на неоткрытый файл ехидно ухмыляется в ожидании fwrite()). И никакого особого названия он поэтому не требует, достаточно сказать, чем этот код занимается. Это может быть код журналирования событий, код монитора, код перераспределения ресурсов на лету, код системы кортроля доступа, код защиты данных от скрытой порчи, код для плавной деградации, код для того, код для сего или код для всего этого разом :) И только "отладочного" кода там нет, потому что он на одну половину обёрнут в #ifdef DEBUG, а на вторую --- в #ifndef NDEBUG, и в любом случае в релизе его вообще нет.
Ну вот, взяли и назвали часть какого-то кода: "Код для обнаружения/обработки особых случаев", хотя он ничем и не отличается от остального :)
В общем-то да, это разные вещи: отладочный код одно, а код, который генерирует внятные сообщения для включения их пользователями в баг-репорты - это другое - логирование ошибок.
Кстати, а как-то можно изменить синтаксис try-catch, чтобы программа сначала проверяла исключения из правил, а только потом выполняла правила - содержимое блока try?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493722
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне тоже кажется странным сетование Ивана по поводу блока catch? Что за принцип name-it-yourself?
Как по его мнению должен выглядеть наш пример с ODBC ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493745
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧто за принцип name-it-yourself?Это не принцип, это просто оборот речи, "называйте это так, как вам удобнее, суть все равно не меняется".
maytonКак по его мнению должен выглядеть наш пример с ODBC ?По его мнению (или Его высочайшему мнению? :), ODBC --- часть инфраструктуры вокруг SQL и "...PL", правильно? Логично посмотреть, а как примеры вроде вот этого соединения с ODBC оформляются в этих самых "...PL"? А там всё как раз логично, сначала catch-блоки, потом try-код.

Код: plsql
1.
2.
3.
4.
5.
6.
{
declare exit handler for sqlstate "xxxxx" { обработчик состояний }
declare exit handler for sqlstate "yyyyy" { обработчик других состояний }
declare exit handler for sqlstate "*" { обработчик для всего, что неуспех }
код на случай выпадения счастливого билетика в виде нерукожопого админа, который сконфигурял-таки драйвер
}



И только в совсем-совсем убогих и древних начинается кондовый фортрановский бардак:

Код: plsql
1.
2.
3.
4.
whenever sqlstate "xxxxx" goto обработчик состояний;
whenever sqlstate "yyyyy" goto обработчик других состояний;
whenever sqlstate "*" goto обработчик для всего, что неуспех;
код на случай выпадения счастливого билетика в виде нерукожопого админа, который сконфигурял-таки драйвер


и фортрановость заключается в том, что
--- либо для обработчиков не находится никакого места в коде, кроме как в хвосте, что некрасиво,
--- либо нужен goto сразу после всех whenever, что ещё менее красиво и требует лишней перфокарты.


То есть код структурирован от частных случаев к общим. Сравните с надоевшим всем

Код: plaintext
1.
2.
3.
4.
5.
bigint factorial (int n) {
  if (n < 0) { Д.,Б.! }
  if (n == 0) { return 1; }
  код для опасно бесконтрольного пожирания стека
}


Это не значит, что код должен быть структурирован так в абсолютно всех случаях, "главное правило дизайна гласит, что из любого правила дизайна бывают исключения", но обычный программист может всю жизнь проработать, так ни разу и не наткнувшись на необходимость в другой логике.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39493746
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинНу вот, взяли и назвали часть какого-то кода: "Код для обнаружения/обработки особых случаев", хотя он ничем и не отличается от остального :)Вы правы, стилистический ляп. Надо было написать "ветка для обнаружения/обработки особых случаев...", тем более что дерево правил уже было помянуто.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494014
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskydbpatchчто элементарнее может быть NDEBUG и assert(), какие еще исключения?
Ждем теперь реализацию того же кода на ассертах.
Ну чисто чтоб поржать над убогими сишниками )))

ты лично можешь начинать смеяться прямо сейчас, не вижу принципиальной разницы, и так и так - это беспричинный смех, признак сам знаешь чего.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494022
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatch,

Интересно, что из моего комментария было написано так двусмысленно, что дало вам повод написать этот ответ? Особенно если коммент про код, остающийся в релизном экзешнике, а ответ --- про "говорят про необходимость удаления отладочного кода" (цвет мой).

авторПо моему грустному опыту, попытки назвать "отладочным" код,

не совсем было понятно, оставляете ли вы отладночный код, не оставляете, и с чем вообще был там неуспешный или даже успешный опыт.

на собственной практике можно сказать - доля assert() и NDEBUG в любом проекте более 10к строк со временем объективно стремится к нулю - то, что раньше считалось assert()-ом в условиях большого проекта без возможности соблюдения контрактов
рано или поздно перекочевывает в верификации ввода (т.е. становится неотключаемым в релизе), а всякие стресс и перф. тесты просто выносятся в отдельные модули.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494233
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruЛогично посмотреть, а как примеры вроде вот этого соединения с ODBC оформляются в этих самых "...PL"? А там всё как раз логично сначала catch-блоки, потом try-код.
Вот с этого момента - непонятно. Что логично? Сначала catch-блоки? Почему?

Где хотя-бы рациональное объяснение? Goto "назад" это логично? Или логично
следование традициям pascal-подобным языкам где есть блок "declare" ... ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494260
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru,

Что-то мне это напомнило ON ENDFILE(SYSIN) GOTO FINISH; :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494263
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytoniv_an_ruЛогично посмотреть, а как примеры вроде вот этого соединения с ODBC оформляются в этих самых "...PL"? А там всё как раз логично сначала catch-блоки, потом try-код.
Вот с этого момента - непонятно. Что логично? Сначала catch-блоки? Почему?

Где хотя-бы рациональное объяснение? Goto "назад" это логично? Или логично
следование традициям pascal-подобным языкам где есть блок "declare" ... ?
Там не просто catch-блоки сначала, а предлагается сначала в catch-блоках проверять состояния до того, как эти состояния вычислены в try-блоке.
iv_an_ru условия для применения исключений проверяются до применения общего правила .
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494267
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дизайн бай контракт переизобрели? )
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494325
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ruЛогично посмотреть, а как примеры вроде вот этого соединения с ODBC оформляются в этих самых "...PL"? А там всё как раз логично сначала catch-блоки, потом try-код.
Вот с этого момента - непонятно. Что логично? Сначала catch-блоки? Почему?

Где хотя-бы рациональное объяснение? Goto "назад" это логично?Совсем логично было бы написать все обрабочики особых случаев не сверху и не снизу а сбоку, как в SDL/GR. Goto "назад" выглядит плохо, но он выглядит _лучше_, чем goto-невидимка, о существовании которого можно узнать только дочитав до catch-ей в конце. Кроме того, никто не мешает вам написать define continue/exit handler всего на одну строчку выше того места, где вы ожидаете получить особое состояние, так что goto "далеко назад" --- не самая частая вещь.
maytonИли логично следование традициям pascal-подобным языкам где есть блок "declare" ... ?П осинтаксису языка, совершенно необязательно писать все define...handler в виде единого блока. Просто "оно само так получается". Наоборот, сишный try-catch вносит ненужное разнообразие. Вот есть у вас функция, которая получает блок данных предположительно соответствующих некоему формату, и пихает их в новый файл. Есть у неё два регулярно встречающихся особых случая. Один --- несоответствие формату, что проверяется вызовом валидатора перед открытием файла, и второй --- errno в файловой операции. Почему ветки кода для них должны быть записаны в разных концах функции? :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494710
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rumaytonпропущено...

Вот с этого момента - непонятно. Что логично? Сначала catch-блоки? Почему?

Где хотя-бы рациональное объяснение? Goto "назад" это логично?С овсем логично было бы написать все обрабочики особых случаев не сверху и не снизу а сбоку, как в SDL/GR. Goto "назад" выглядит плохо, но он выглядит _лучше_, чем goto-невидимка, о существовании которого можно узнать только дочитав до catch-ей в конце. Кроме того, никто не мешает вам написать define continue/exit handler всего на одну строчку выше того места, где вы ожидаете получить особое состояние, так что goto "далеко назад" --- не самая частая вещь.
maytonИли логично следование традициям pascal-подобным языкам где есть блок "declare" ... ?П осинтаксису языка, совершенно необязательно писать все define...handler в виде единого блока. Просто "оно само так получается". Наоборот, сишный try-catch вносит ненужное разнообразие. Вот есть у вас функция, которая получает блок данных предположительно соответствующих некоему формату, и пихает их в новый файл. Есть у неё два регулярно встречающихся особых случая. Один --- несоответствие формату, что проверяется вызовом валидатора перед открытием файла, и второй --- errno в файловой операции. Почему ветки кода для них должны быть записаны в разных концах функции? :)

Вообще-то совсем логично иметь среду, которая от тебя вообще не требует написания каких-то там обработчиков.
От слова совсем.

Никаких, нигде.

Потому что программист - он оптимист, он думает только о том, как его решение успешно пройдет шаги, а думать на каждом шаге
"ой, а что тут может случиться" - слишком утомительно для нашей бренной и короткой жизни.

А освобождением ресурсов может заниматься менеджер ресурсов, как самый крайний вариант - операционная система - она освободит и хенлы, и память.

И это единственный тру способ (помереть процессу), если, конечно, ты не пишешь GUI
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494719
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchИ это единственный тру способ (помереть процессу), если, конечно, ты не пишешь GUI
А если в демоне происходит, ну допустим ошибка в одном подкюченных сеансов - это тоже помереть? Вместе с тысячами других сеансов, где не было ошибки?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494787
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchПотому что программист - он оптимист, он думает только о том, как его решение успешно пройдет шаги, а думать на каждом шаге "ой, а что тут может случиться" - слишком утомительно для нашей бренной и короткой жизни.Пока в отрасли так много оптимистов, я могу не переживать насчёт будущей зарплаты --- квалифицированные пессимисты всегда будут востребованы :)

А исцеляется оптимизм одним простым способом, про который я уже писал. Оптимист АСУчивает газораспределительный пункт, бригада оптимиста укрывается в складках местности, оптимист заходит в будку этого ГРП и с местного пульта всё включает. Ну, если доживёт до конца процесса, то всё включает, а если нет --- уж сколько успеет. Но это только начало лечения. Через два месяца он заезжает к котельной, питающейся через тот ГРП, и говорит машинистам, что если что-то в последнее время шло не так, то это именно из-за него оперативный персонал остался без премии за экономию топлива.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494813
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskydbpatchИ это единственный тру способ (помереть процессу), если, конечно, ты не пишешь GUI
А если в демоне происходит, ну допустим ошибка в одном подкюченных сеансов - это тоже помереть? Вместе с тысячами других сеансов, где не было ошибки?

в том-то и дело, что это ок :)

полезно иногда смотреть по сторонам, как у других людей сделано. к примеру в Erlang и PHP (внезапно) подобное поведение является by-design.

прикладнику не доверяют вообще ничего, и чем быстрее его прикладуха помрет - тем меньше потенциальных дефектов она внесет в окружение, чего-то там пытаясь дергаться в блоках типа catch.
а подчистой памяти и прочих хендлов займется кто-то иной (как вариант - вызывающая сторона).

т.е. там можно конечно обрабатывать исключения, но в базовой философии - это как раз не нужно делать, live-to-die, умри молодым :)

возвращаясь к "нашим баранам" - в Erlang все окружение полностью контролируется средой, dangling pointer не возможны в принципе, 100500 процессов это не тру процессы с точки зрения O/S, а самые обычные корутины и там это реально работает,
ибо среда выполнения это все контролирует.

в типовом C/С++ приложении ничего такого нет, и да, тебе в виде начального задания придется написать монитор процессов (запускатель, отстреливатель повисших, перезапускатель оных - для бедных - systemd).

и ввести правило - один клиент, один процесс.

и ввести понятие листенер-пуллер, спецпроцесс, который будет заниматься исключительно вопросом коммуникаций с клиентами и процессами-рабочими (для бедных - haproxy).

а в остальном - хоть мы и не ищем легких путей, то в линупсах создание процесса ничем не дороже создания треда - это все делает
метод clone(). просто после clone() для треда память остается разделяемой, а для clone() процесса память начинает работать через copy-on-write

но в целом - создать процесс в наше время неприлично дешево, так что все нормуль, пилим нетленку дальше :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494814
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchПотому что программист - он оптимист, он думает только о том, как его решение успешно пройдет шаги, а думать на каждом шаге "ой, а что тут может случиться" - слишком утомительно для нашей бренной и короткой жизни.Пока в отрасли так много оптимистов, я могу не переживать насчёт будущей зарплаты --- квалифицированные пессимисты всегда будут востребованы :)

А исцеляется оптимизм одним простым способом, про который я уже писал. Оптимист АСУчивает газораспределительный пункт, бригада оптимиста укрывается в складках местности, оптимист заходит в будку этого ГРП и с местного пульта всё включает. Ну, если доживёт до конца процесса, то всё включает, а если нет --- уж сколько успеет. Но это только начало лечения. Через два месяца он заезжает к котельной, питающейся через тот ГРП, и говорит машинистам, что если что-то в последнее время шло не так, то это именно из-за него оперативный персонал остался без премии за экономию топлива.

ой, страшно аж жуть. осталось душещипательную историю про танк, кувалду и медведей дописать, чтоб все прочувствовались.

но а по теме что-то будет?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494825
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchAnatoly Moskovskyпропущено...

А если в демоне происходит, ну допустим ошибка в одном подкюченных сеансов - это тоже помереть? Вместе с тысячами других сеансов, где не было ошибки?

в том-то и дело, что это ок :)

полезно иногда смотреть по сторонам, как у других людей сделано. к примеру в Erlang и PHP (внезапно)

для вяще сумлящихся - в типовой связке LAMP именно так и сделано - один клиент на один процесс.

apache по дефолту делает форк самого себя, плодит рабочие процессы - каждый процесс обрабатывает строго один запрос на раз и отдает результат головному процессу, который никогда не падает, ибо никогда не запускает прикладной код, а лишь управляет рабочими, ну и принимает входящие запросы, открывая и передавая рабочим сокеты.

а проблему 100500 клиентов обычно решает рядом стоящий nginx - использовать апач для коммуникации с какой edge мобилкой за 2000 км слишком дорого - апачу проще отдать весь ответ nginx-у, а самому заняться другим клиентом-запросом, чем держать выделенный процесс десятки секунд просто для того, чтоб отдать десяток килобайт
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494827
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchapache по дефолту делает форк самого себя, плодит рабочие процессы - каждый процесс обрабатывает строго один запрос на разВы бы хоть иногда заглядывали в актуальную документацию на актуальные версии.
Просто потому, что в сочетании с вашей категоричностью, ваши устаревшие представления оставляют устрашающее впечатление.

P.S. Не спорю, что шкурку с кошки можно обдирать разными способами, но это же не повод идти в крестовый поход за единственно правильную веру.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494830
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovdbpatchapache по дефолту делает форк самого себя, плодит рабочие процессы - каждый процесс обрабатывает строго один запрос на разВы бы хоть иногда заглядывали в актуальную документацию на актуальные версии.
Просто потому, что в сочетании с вашей категоричностью, ваши устаревшие представления оставляют устрашающее впечатление.

P.S. Не спорю, что шкурку с кошки можно обдирать разными способами, но это же не повод идти в крестовый поход за единственно правильную веру.

ок, и что там изменилось?

ps -ef|grep httpd ты уже запустил, или apache рассматриваешь исключительно на своей Windows машине?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494831
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchdbpatchпропущено...


в том-то и дело, что это ок :)

полезно иногда смотреть по сторонам, как у других людей сделано. к примеру в Erlang и PHP (внезапно)

для вяще сумлящихся - в типовой связке LAMP именно так и сделано - один клиент на один процесс.

apache по дефолту делает форк самого себя, плодит рабочие процессы - каждый процесс обрабатывает строго один запрос на раз и отдает результат головному процессу, который никогда не падает, ибо никогда не запускает прикладной код, а лишь управляет рабочими, ну и принимает входящие запросы, открывая и передавая рабочим сокеты.

а проблему 100500 клиентов обычно решает рядом стоящий nginx - использовать апач для коммуникации с какой edge мобилкой за 2000 км слишком дорого - апачу проще отдать весь ответ nginx-у, а самому заняться другим клиентом-запросом, чем держать выделенный процесс десятки секунд просто для того, чтоб отдать десяток килобайтИменно поэтому апач --- это такая единица измерения скорости. Один апач. Один килоапач. А всякие толстые СУБД норовят отвечать веб-клиенту в нитке того же процесса, в котором живут данные и крутятся хранимки.

Если ресурсов дофигищща, а скорость не важна, то вопрос "на C или на C++" вообще не стоит. Писать на Java/Perl/PHP... да на чём угодно, где есть подходящие к предметной области библиотеки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494832
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchв типовом C/С++ приложении ничего такого нет, и да, тебе в виде начального задания придется написать монитор процессов (запускатель, отстреливатель повисших, перезапускатель оных - для бедных - systemd).
Кажется ваша компания обанкротится раньше, чем вы напишете первую полезную строчку кода.
Вы как уже, дописали все эти мониторы или вот-вот?
dbpatchи ввести правило - один клиент, один процесс.
Какой лимит на количество процессов в линуксе, в курсе? Какой оверхед процесса по сравнению с вызовом функции, в курсе?
dbpatchа проблему 100500 клиентов обычно решает рядом стоящий nginx
А nginx-у извините тоже падать если что? Или его пишем по своим правилам? А монитор процессов, кстати, тоже падает на каждый чих?)))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494834
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchв том-то и дело, что это ок :)
Проблема в том, что это ОК только в 0.01% всех приложений.
И человек умеющий только в таком стиле писать программы будет очень долго искать работу.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494836
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchок, и что там изменилось?

ок, согласен, иногда полезно вспомнить давно закрытый вопрос.
да, действительно, по дефолту в apache 2.4 стоит выбор event (внезапно), включать prefork нужно вручную.

работать с преднастроенными образами - оно да, расслабляет.

тем не менее, рассматривать event и worker я бы не стал, эти костыли нужны только если у тебя нет nginx/haproxy,
а не иметь их могут себе позволить лишь совсем стартапы, с мини трафиком в сотню запросов за сутки.

а вот иметь их для app server, а не статической раздавалки файлов - это уже как минимум странно. впрочем, клиент спишет на провайдера, да?

но при наличии nginx использовать apache как CDN.... короче
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494837
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskydbpatchв том-то и дело, что это ок :)
Проблема в том, что это ОК только в 0.01% всех приложений.
И человек умеющий только в таком стиле писать программы будет очень долго искать работу.

не все пишут GUI на С++, как ты :) в остальном - извини, но даже LAMP - это никак не 0.01% приложений, так что мимо, все как раз ок.

плюс на описанном мной ок принципе, внезапно, работает Oracle, и, ЕМНИП, даже постгрес https://www.postgresql.org/docs/9.1/static/tutorial-arch.html

и это тоже как-то вовсе не 0.01%. так что у тебя или проблемы с пониманием сказанного (это ок, если ты совсем начинающий) или с кругозором (это уже не ок)


опять же - падать положено именно при отлове необработанного исключения.

исключения как разновидность обрабатывамых кодов возврата (когда код возврата не ок это для приложения ожидаемо и очень ок) - это наверное нормально, падать в кору там не нужно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494838
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch...костыли нужны только если у тебя нет nginx/haproxy,
а не иметь их могут себе позволить лишь совсем стартапы, с мини трафиком в сотню запросов за сутки. http://dbpedia.org/sparql безо всяких проксей обмолачивает по десятку миллионов запросов в сутки ;)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494845
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatch...костыли нужны только если у тебя нет nginx/haproxy,
а не иметь их могут себе позволить лишь совсем стартапы, с мини трафиком в сотню запросов за сутки. http://dbpedia.org/sparql безо всяких проксей обмолачивает по десятку миллионов запросов в сутки ;)

и что с того? даже IIS такое может.

если у тебя приложение стабильно и отлажено годами, то даже схема с multi-thread unmanaged web c++ single-process server будет работать, и даже стабильно, и даже недеями.

здесь же вопрос о том, как построить среду, который будет запускать априори unstable решения - прикладной код, который пишет один девелопер, и второй - не факт что хоть когда-нибудь ревьювит, а регрессионных и прочих тестов нет вообще.

причем так, чтоб и зависания сами решались, и утечки памяти - тоже сами как-то устранялись и не били OOM killerом по первым попавшимся под руку и т.п.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494849
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchили apache рассматриваешь исключительно на своей Windows машине?Когда я администрировал "свою windows машину" - она работала. Что характерно - ничуть не хуже линуксов и, что характерно - справлялась больше, чем со ста запросами в сутки.
Т.е. ваши оценки они не просто порочны - они качественно порочны.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494850
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchне все пишут GUI на С++, как ты :)
Вы ошиблись. Это другой известный сишник перешел на С++ чтобы писать гуй. Он тут модером подрабатывает ))


dbpatchно даже LAMP - это никак не 0.01% приложений, так что мимо
Это платформа, на которой приложения пишутся на скриптах, где никто не падает, а нормально показывает ошибки прямо в скрипте (поделки школьников не в счет). Так что да - мимо )))
dbpatchплюс на описанном мной ок принципе, внезапно, работает Oracle, и, ЕМНИП, даже постгрес https://www.postgresql.org/docs/9.1/static/tutorial-arch.html
Они создают процесс на клиент, но не падают на чихи, т.к. не достаточно завершить процесс, а надо откатить транзациию. А это не одна строчка кода. Так что это нифига не ваш принцип.
А ваш принцип простой: программа должна работать в тепличных условиях, а если условия минимально не те, то это не ваши проблемы.
Такой принцип очень удобен для программистов создающих программы которыми никто не пользуется )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494852
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchплюс на описанном мной ок принципе, внезапно, работает Oracle

Внезапно Oracle работает по-разному, в зависимости от настроек.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494856
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schidbpatchплюс на описанном мной ок принципе, внезапно, работает Oracle

Внезапно Oracle работает по-разному, в зависимости от настроек.

да нет там никаких таких настроек. опцию многотредовости экспериментально запилили лишь в 12-й версии, именно как опцию, в ближайшие несколько лет это out-of-scope
по дефолту там тот-же самый single-thread single-process-per-client-session

вариант "сервера" под Windows я рассматривать не буду - у кого это работает, тот молодец, честь, хвала и совесть нашей эпохи, значок ГТО и грамота как передовику производства.


сам же я подожду когда они доделают туда работоспособный bash и остальное окружение (подвижки в WSL есть, Clang/C2 в WS это пять, но пока это только эксперименты для гиков)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494862
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskydbpatchне все пишут GUI на С++, как ты :)
Вы ошиблись. Это другой известный сишник перешел на С++ чтобы писать гуй. Он тут модером подрабатывает ))
тебе же хуже, значит ты просто не умеешь писать серверы на C++

Anatoly Moskovskydbpatchно даже LAMP - это никак не 0.01% приложений, так что мимо
Это платформа, на которой приложения пишутся на скриптах, где никто не падает, а нормально показывает ошибки прямо в скрипте (поделки школьников не в счет). Так что да - мимо )))
Нет не мимо, в LAMP worker-ы даже если не упадут внезапно, то монитором рано или поздно будут перезапущены.
Ибо есть падения, а есть еще и утечки (и памяти, и хендлов). Которые не только школьники оставляют.
Так что да, ты опять мимо, изучи уже основы.

Anatoly Moskovskydbpatchплюс на описанном мной ок принципе, внезапно, работает Oracle, и, ЕМНИП, даже постгрес https://www.postgresql.org/docs/9.1/static/tutorial-arch.html
Они создают процесс на клиент, но не падают на чихи, т.к. не достаточно завершить процесс, а надо откатить транзациию. А это не одна строчка кода. Так что это нифига не ваш принцип.

у тебя я смотрю фундаментальная дырища в знаниях. если оракловской процесс упадет по ORA-600, кто за него будет откатывать транзакцию?

а если подумать?

Anatoly MoskovskyА ваш принцип простой: программа должна работать в тепличных условиях, а если условия минимально не те, то это не ваши проблемы.
Такой принцип очень удобен для программистов создающих программы которыми никто не пользуется )))

Ты опять ничего не понял. Ну что за тормоза, соберись уже!

Я говорил, который раз, что падать нужно на неожиданном исключении, потому что шанс, что прикладной (а не системный) код сможет нормально восстановиться от неожиданного исключения - минимален, ибо прикладной программист просто не парится
написанием и тем более отладкой обработчиков.

Он как раз и ожидает вечно тепличных условий - у него других не бывает. Даже QA или тестер для прикладника уже разновидность
катастрофы - чуть юзер не ту кнопку нажал, оопс, корка полилась. И они там дружно лишь купируют проблему
ненадежного софта, делая подпорки и костыли.

Но перед любой новой потенциально нетестирумой проблемой этот ваш try/catch типа код так и остается беззащитен.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494864
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskydbpatchв типовом C/С++ приложении ничего такого нет, и да, тебе в виде начального задания придется написать монитор процессов (запускатель, отстреливатель повисших, перезапускатель оных - для бедных - systemd).
Кажется ваша компания обанкротится раньше, чем вы напишете первую полезную строчку кода.
Вы как уже, дописали все эти мониторы или вот-вот?
Да отлично все работает уже четвертый год, спасибо за заботу.

Anatoly Moskovskydbpatchи ввести правило - один клиент, один процесс.
Какой лимит на количество процессов в линуксе, в курсе? Какой оверхед процесса по сравнению с вызовом функции, в курсе?
Ой господи, детский сад, штаны на лямках.

Вна уже перестали проходить теорию массового обслуживания? Про очереди совсем не знаем?
Или ты всерьез считаешь, что количество кассиров на кассах должно быть равно числу покупателей в торговом зале?

Угар.

Anatoly Moskovskydbpatchа проблему 100500 клиентов обычно решает рядом стоящий nginx
А nginx-у извините тоже падать если что? Или его пишем по своим правилам? А монитор процессов, кстати, тоже падает на каждый чих?)))
С какого перепугу? nginx априори стабилен, там нет прикладного кода, все переходы и диаграммы состояний детерменированы,
там просто нечему падать, ибо круг его задач (и пространство падений) жестко ограничен.

nginx/haproxу это просто дистпетчеры запросов - они держат всю keep-alive поднаготную с клиентами, строят keep-alive (уже свои, не имеющие ничего общего с клиентскими) с apache серверами и занимаются высокоуровневой маршрутизацией запросов.

Т.е. 100500 висящих клиентских сессий на nginx спокойно могут обслуживаться всего десятком процессов на apache (читаем про реализацию comet серверов на nginx в т.ч., хотя это отдельно).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494870
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbpatchи ввести правило - один клиент, один процесс.
dbpatchИли ты всерьез считаешь, что количество кассиров на кассах должно быть равно числу покупателей в торговом зале?
«Одной из разновидностей шизофренического раздвоения личности выступает агрессивное и истерическое требование чего-либо у самого себя с принципиальным и систематическим отказом себе»
Общая психиатрия, М., 1966
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494874
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинdbpatchи ввести правило - один клиент, один процесс.
dbpatchИли ты всерьез считаешь, что количество кассиров на кассах должно быть равно числу покупателей в торговом зале?
«Одной из разновидностей шизофренического раздвоения личности выступает агрессивное и истерическое требование чего-либо у самого себя с принципиальным и систематическим отказом себе»
Общая психиатрия, М., 1966

себя проверить не пробовал?

речь идет не про 100500 клиентов, которые пришли с запросами, а про тех, кого в момент времени обрабатывает процесс-сервер.
остальные - стоят в очереди, ждут свободного обработчика. причем за очередь отвечает совсем другой процесс, который не падает.

уже в третий раз поясняю - отдельный процесс, висит, занимается общением с клиентами, держит открытые сокеты.
никогда не падает. каждый клиентский запрос отправляет любому доступному из 10 заранее созданных процессов обработчиков.
если свободных нет - все дружно стоят в очереди, ждут следующего освободившегося обработчика.

так работает любая не шизофреническая огранизация - от банков, магазинов до каких ЕРКЦ. и это нормально, число обработчиков должно быть фиксировано, ибо рост числа оных лишь уменьшит общую пропускную способность - они будут мешать друг другу
в борьбе за общие ресурсы (в реальной жизни - в борьбе за, к примеру, общий принтер в зале, в виртуальной - за диск, свободную память, процессор, за базу данных, т.п.).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494942
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruП осинтаксису языка, совершенно необязательно писать все define...handler в виде единого блока. Просто "оно само так получается". Наоборот, сишный try-catch вносит ненужное разнообразие. Вот есть у вас функция, которая получает блок данных предположительно соответствующих некоему формату, и пихает их в новый файл. Есть у неё два регулярно встречающихся особых случая. Один --- несоответствие формату, что проверяется вызовом валидатора перед открытием файла, и второй --- errno в файловой операции. Почему ветки кода для них должны быть записаны в разных концах функции? :)
Иван! Вы - хитрый баламут!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494944
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchAnatoly Moskovskyпропущено...

А если в демоне происходит, ну допустим ошибка в одном подкюченных сеансов - это тоже помереть? Вместе с тысячами других сеансов, где не было ошибки?

в том-то и дело, что это ок :)

полезно иногда смотреть по сторонам, как у других людей сделано. к примеру в Erlang и PHP (внезапно) подобное поведение является by-design.

прикладнику не доверяют вообще ничего, и чем быстрее его прикладуха помрет - тем меньше потенциальных дефектов она внесет в окружение, чего-то там пытаясь дергаться в блоках типа catch.
а подчистой памяти и прочих хендлов займется кто-то иной (как вариант - вызывающая сторона).

т.е. там можно конечно обрабатывать исключения, но в базовой философии - это как раз не нужно делать, live-to-die, умри молодым :)

возвращаясь к "нашим баранам" - в Erlang все окружение полностью контролируется средой, dangling pointer не возможны в принципе, 100500 процессов это не тру процессы с точки зрения O/S, а самые обычные корутины и там это реально работает,
ибо среда выполнения это все контролирует.
Ну... при слове Erlang я напрягся как тигр перед броском.

Этот язык или парадигма вызывает у меня смесь удивления и восхищения. Но я прошу заметить
что писать Erlang и PHP через запятую не стоит. Слишком велика разница.

В тему обработки исключений. Нам не достаточно "пристреливать" процесс в случае краха Http
request. В большинстве высокоуровневых языков нам надо принимать решение.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494945
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru
Код: plsql
1.
2.
3.
4.
5.
6.
{
declare exit handler for sqlstate "xxxxx" { обработчик состояний }
declare exit handler for sqlstate "yyyyy" { обработчик других состояний }
declare exit handler for sqlstate "*" { обработчик для всего, что неуспех }
код на случай выпадения счастливого билетика в виде нерукожопого админа, который сконфигурял-таки драйвер
}


Кстати по ходу мимо я замечу что в этом фрагменте кода нет иерархии обработчиков исключений.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494949
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchа проблему 100500 клиентов обычно решает рядом стоящий nginx - использовать апач для коммуникации с какой edge мобилкой за 2000 км слишком дорого - апачу проще отдать весь ответ nginx-у, а самому заняться другим клиентом-запросом, чем держать выделенный процесс десятки секунд просто для того, чтоб отдать десяток килобайт
Мне как-то пришлось пообщаться с игроделами которые кодят MMORG.
(Клиент на Unity, сервер - на Java). Так вот они везде используют netty.
Это веб-сервер и сокет сервер, работа которого базируется на том что
потоки привязаны не к сокетам а к т.н каналу (channel) сетевого стека.
Это мультиплексированный I/O только в концепции java.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494952
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchС какого перепугу? nginx априори стабилен, там нет прикладного кода, все переходы и диаграммы состояний детерменированы,
там просто нечему падать, ибо круг его задач (и пространство падений) жестко ограничен.
Ггггг. Был у меня один знакомый, который утверждал что в его коде нет ошибок, потому что он применяет определенный метод разработки.
Естественно там был баг на баге. Чувствую вы братья. По слепоте ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494973
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткинdbpatchи ввести правило - один клиент, один процесс.
dbpatchИли ты всерьез считаешь, что количество кассиров на кассах должно быть равно числу покупателей в торговом зале?
«Одной из разновидностей шизофренического раздвоения личности выступает агрессивное и истерическое требование чего-либо у самого себя с принципиальным и систематическим отказом себе»
Общая психиатрия, М., 1966
Согласен. Болеет или пьет!

Требуется доктор Ливси.

Кстати у меня год назад вышел конфликт с людьми, утверждающими, что проверка "черного ящика" по методу КА - идеальный метод, исключающий отладку.

В итоге я вспомнил начала комбинаторики и показал, что проверка КА есть функция с факториальной зависимостью от числа входных параметров.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39494984
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ru
Код: plsql
1.
2.
3.
4.
5.
6.
{
declare exit handler for sqlstate "xxxxx" { обработчик состояний }
declare exit handler for sqlstate "yyyyy" { обработчик других состояний }
declare exit handler for sqlstate "*" { обработчик для всего, что неуспех }
код на случай выпадения счастливого билетика в виде нерукожопого админа, который сконфигурял-таки драйвер
}


Кстати по ходу мимо я замечу что в этом фрагменте кода нет иерархии обработчиков исключений.Ну вот, не дали приврать для красоты :( Вы правы, очень немногие системы не поленятся сами отсортировать хандлеры по иерархии в луче кода. И в чём-то их авторов можно понять. Во-первых, при добавлении сортировки теряется совместимость по ошибкам с системами более ленивых авторов. Во-вторых, синтаксис не запрещает кодеру хранимок написать маразм, с которым просто непонятно, что делать:

Код: plsql
1.
2.
3.
4.
5.
{
declare exit handler for sqlstate "xx*" { обработчик №1 }
declare exit handler for sqlstate "xxxxx", "*" { обработчик №2 }
код для получения signal-ов и чего-нибудь полезного
}


Обработчик №1 должен быть глубже в стеке, чем обработчик №2, ведь "xxxxx" --- более частный случай, чем "xx*". В то же время
Обработчик №2 должен быть глубже в стеке, чем обработчик №1, ведь "xx*" --- более частный случай, чем "*". И нельзя неявно заменить на
Код: plsql
1.
2.
3.
4.
5.
6.
{
declare exit handler for sqlstate "xx*" { обработчик №1 }
declare exit handler for sqlstate "xxxxx" { обработчик №2 }
declare exit handler for sqlstate "*" { клон обработчика №2 }
код для получения signal-ов и чего-нибудь полезного
}


и отсортировать, потому что для этого надо написать процедуру клонирования кода, а на это никто времени не даст. Тупо скопировать нельзя --- если в обработчике есть метка и goto, то после копирования будет ошибка duplicate label :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495075
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchздесь же вопрос о том, как построить среду, который будет запускать априори unstable решения - прикладной код, который пишет один девелопер, и второй - не факт что хоть когда-нибудь ревьювит, а регрессионных и прочих тестов нет вообще.

причем так, чтоб и зависания сами решались, и утечки памяти - тоже сами как-то устранялись и не били OOM killerом по первым попавшимся под руку и т.п.Safe code и GC в богомерзких .Net/Java всех спасут.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495083
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё бывают списки исключений, упомяну об этом навсякий.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
foreach (var item in items)
{
    try
    {
        Execute(item);
    }
    catch (Exception e)
    {
        throw new Exception("Ошибка обработки: " + item.Name, e /* <---- InnerException */);
    }
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495223
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskydbpatchС какого перепугу? nginx априори стабилен, там нет прикладного кода, все переходы и диаграммы состояний детерменированы,
там просто нечему падать, ибо круг его задач (и пространство падений) жестко ограничен.
Ггггг. Был у меня один знакомый, который утверждал что в его коде нет ошибок, потому что он применяет определенный метод разработки.
Естественно там был баг на баге. Чувствую вы братья. По слепоте ))

любой код имеет те или иные баги и недоработки. в данном контексте (принцип построения отказоустойчивого софта) мы
принимаем "контракт" - что этот компонент стабилен, просто потому что мы не вносим туда свой новый чудный нетестированный
неотревьювленный прикладной код, который может его поломать разрушив стек вызова или погуляв указателем.

это просто отказо-дуркакоустойчивый системный компонент
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495230
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondbpatchпропущено...


в том-то и дело, что это ок :)

полезно иногда смотреть по сторонам, как у других людей сделано. к примеру в Erlang и PHP (внезапно) подобное поведение является by-design.

прикладнику не доверяют вообще ничего, и чем быстрее его прикладуха помрет - тем меньше потенциальных дефектов она внесет в окружение, чего-то там пытаясь дергаться в блоках типа catch.
а подчистой памяти и прочих хендлов займется кто-то иной (как вариант - вызывающая сторона).

т.е. там можно конечно обрабатывать исключения, но в базовой философии - это как раз не нужно делать, live-to-die, умри молодым :)

возвращаясь к "нашим баранам" - в Erlang все окружение полностью контролируется средой, dangling pointer не возможны в принципе, 100500 процессов это не тру процессы с точки зрения O/S, а самые обычные корутины и там это реально работает,
ибо среда выполнения это все контролирует.
Ну... при слове Erlang я напрягся как тигр перед броском.

Этот язык или парадигма вызывает у меня смесь удивления и восхищения. Но я прошу заметить
что писать Erlang и PHP через запятую не стоит. Слишком велика разница.

В тему обработки исключений. Нам не достаточно "пристреливать" процесс в случае краха Http
request. В большинстве высокоуровневых языков нам надо принимать решение.

Erlang как язык, ИМХО - полная ерунда. Я прочитал книги три по нему, и ни разу не "возбудился". Отсутсвие строк и даже for
Там не сам язык интересен, а принципы, заложенные в его базовое окружение/фреймворк/библиотеку.

Модель акторов, принцип обработки ошибок в т.ч.

Они в книгах описаны общими словами, можно даже не проникаться чудным Prolog образным синтаксисом.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495236
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Кdbpatchздесь же вопрос о том, как построить среду, который будет запускать априори unstable решения - прикладной код, который пишет один девелопер, и второй - не факт что хоть когда-нибудь ревьювит, а регрессионных и прочих тестов нет вообще.

причем так, чтоб и зависания сами решались, и утечки памяти - тоже сами как-то устранялись и не били OOM killerом по первым попавшимся под руку и т.п.Safe code и GC в богомерзких .Net/Java всех спасут.

Не спасут, увы. Потому что они там безграмотно сделаны - GC он общий на всех, freeze the world и прочие не прикольные штуки в догонку. Проблемы с сотнями гигабайт кучи (слишком долго чистится и т.п.).

Причем оптимизационные припарки слабо помогают, сколько парни не тужатся.

Тут кстати стоит вспомнить Erlang - вот там GC сделан на удивление правильно - в пределах контекста процесса (читай корутины).
Т.е. память чистится не глобально системно, а именно в контексте евойных процессов, читай - запросов клиентов и эдаких укрупненных вызовов процедур. Т.е. переключили выполнение процесса (корутины), и в виде приятного дополнения
вызвали подчистку памяти уже остановленного процесса, не останавливая всех остальных.

Красота.

А Java/.NET - фуфуфу, не респект.

ARC (и SmartPointer в т.ч.) - тоже кстати не айс (промахи в кеши и в целом натужное рандомизированное хождение по объектам, хотя можно было бы "чистить" память одним махом - просто сбрасывая HWM в ноль в локальной куче завершившейся корутины/процесса.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495255
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchJava/.NET - фуфуфу, не респект.Java много лет была сначала совсем фуфуфу, потом просто фуфуфу, а потом Solr наглядно продемонстрировал, что и на Яве уже можно писать очень быстрые и масштабируемые вещи, было бы умение.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495283
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchJava/.NET - фуфуфу, не респект.Java много лет была сначала совсем фуфуфу, потом просто фуфуфу, а потом Solr наглядно продемонстрировал, что и на Яве уже можно писать очень быстрые и масштабируемые вещи, было бы умение.

чуваки с одноклассников тоже продемонстрировали https://habrahabr.ru/company/odnoklassniki/blog/139185/
как говорится - с чего начали, туда и пришли.

не убедительно.

Java относительно хороша в классе веб приложений, прямо под них и заточена - относительно небольшой жизненный цикл веб реквеста позволяет быстренько нааллоцировать немного из кучи, и в конце так-же быстро прибить выделенное, пока оно не перекочевало в "долгую" кучу.

собственно в таких классах приложений она и применяется в 95% случаев. а все попытки сделать на Java долгоиграющие базы данных закономерно закончились пшиком или около того.

но вообще это офтопик
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495358
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Развели флудильню...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495455
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchJava/.NET - фуфуфу, не респект.Java много лет была сначала совсем фуфуфу, потом просто фуфуфу, а потом Solr наглядно продемонстрировал, что и на Яве уже можно писать очень быстрые и масштабируемые вещи, было бы умение.

Ну, там же теперь Гай Стил заправляет, так что делает из говна конфетку...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495457
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchJava относительно хороша в классе веб приложений, прямо под них и заточена -


Ну не надо, а?
Заточена она под программирование утюгов и сковородок.
Для Web-приложений она -- не, ну применяется наверное иногда, но всё меньше и меньше.
Она для WEB-приложений малоудобна.
Для возможности разработки бизнес -приложений (т.н. бэкендов) на Java было сделано много усилий, и в этой нише она пока ещё вроде бы держится.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495490
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivdbpatchJava относительно хороша в классе веб приложений, прямо под них и заточена -


Ну не надо, а?
Заточена она под программирование утюгов и сковородок.
Для Web-приложений она -- не, ну применяется наверное иногда, но всё меньше и меньше.
Она для WEB-приложений малоудобна.
Для возможности разработки бизнес -приложений (т.н. бэкендов) на Java было сделано много усилий, и в этой нише она пока ещё вроде бы держится.

я не имел в виду апплеты. а "бэкэнды" они в большинстве случаев веб ориентированные, в конечном итоге, так что не надо.
если вон глянуть все актуальные (развивающиеся в последнее время библиотеки) для Java - то там web торчит практически повсеместно (от Spring и далее).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495559
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchJava относительно хороша в классе веб приложений, прямо под них и заточена - относительно небольшой жизненный цикл веб реквеста позволяет быстренько нааллоцировать немного из кучи, и в конце так-же быстро прибить выделенное, пока оно не перекочевало в "долгую" кучу.

собственно в таких классах приложений она и применяется в 95% случаев. а все попытки сделать на Java долгоиграющие базы данных закономерно закончились пшиком или около того.

Cassandra - достаточно долгоиграющая. И непонятно что там и где закончилось "пшиком". И где есть
манифест или нота о том что дескыть "пшик" объявлен.

Ох вы и плут, коллега...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495686
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЗаточена она под программирование утюгов и сковородок.
Для Web-приложений она -- не, ну применяется наверное иногда, но всё меньше и меньше.
Она для WEB-приложений малоудобна.а что сейчас лучше для веб-приложений? Я новичок во всех этих веб-технологиях, но если на сервера приложений обычно деплоят war/ear-ники, то как дело обстоит с веб-приложениями, сделанными на других средствах?

Btw, http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - рейтинг языков

Go пора учить?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495705
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondbpatchJava относительно хороша в классе веб приложений, прямо под них и заточена - относительно небольшой жизненный цикл веб реквеста позволяет быстренько нааллоцировать немного из кучи, и в конце так-же быстро прибить выделенное, пока оно не перекочевало в "долгую" кучу.

собственно в таких классах приложений она и применяется в 95% случаев. а все попытки сделать на Java долгоиграющие базы данных закономерно закончились пшиком или около того.

Cassandra - достаточно долгоиграющая. И непонятно что там и где закончилось "пшиком". И где есть
манифест или нота о том что дескыть "пшик" объявлен.

Ох вы и плут, коллега...
а есть ещё?
кстати там как раз используются все нативные штучки работы с памятью , и стоило тогда использовать язык с GC?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495707
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати очень хорошо что был упомянут golang.

Если мы обсуждали недостатки программирования try-catch то мы должны были выставить в сравнение
Метод который принят в этом языке.

Иван! Где вы!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495715
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати очень хорошо что был упомянут golang.

Если мы обсуждали недостатки программирования try-catch то мы должны были выставить в сравнение
Метод который принят в этом языке.

Иван! Где вы!Когда я смотрел на только-только свежеопубликованный go, в нём try-catch вообще не было. Ну, тоже метод :) Как там сейчас, через 10 лет --- не знаю, не смотрел, ибо что мне писать на платформе со stop-the-world GC?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495717
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати очень хорошо что был упомянут golang.

Если мы обсуждали недостатки программирования try-catch то мы должны были выставить в сравнение
Метод который принят в этом языке.

Иван! Где вы!
ИМХО ужасно , нафиг такую муть
и призывы Ивана по возврату к бейсику не особо поддерживаю
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495738
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruибо что мне писать на платформе со stop-the-world GC?
А кто-нибудь смотрел устройство явовского GC? У меня подозрения, что он это минимум примитивный memory management + логика для определения моментов, когда/где/сколько чистить. И дальше мои подозрения: это никак не может быть быстрее, чем просто memory management. Т.о. можно как-то за счёт "опта" выгадать в быстродействии? Ну и, не знаю, гипотетическая логика этого GC как-то напрягает: допустим, у меня исполняется критический код, а ему вдруг вздумалось почистить память... или это всё мелочи?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495739
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rumaytonКстати очень хорошо что был упомянут golang.

Если мы обсуждали недостатки программирования try-catch то мы должны были выставить в сравнение
Метод который принят в этом языке.

Иван! Где вы!Когда я смотрел на только-только свежеопубликованный go, в нём try-catch вообще не было. Ну, тоже метод :) Как там сейчас, через 10 лет --- не знаю, не смотрел, ибо что мне писать на платформе со stop-the-world GC?
Мне кажется вы - гиперболизируете проблему stop-the-world. На чем вы кст. разрабатываете? На QNX?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495745
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати по поводу детерминизма отклика обычного memory management. Представил
себе казуальное С-приложение которое активно работает со строками разной длины
(JSON?,XML?). И после некоторых эпох malloc/free структура памяти должна представлять
собой "решето". И после затребования malloc чуть больше чем доступный непрерывный
кусок мы незбежно должны войти в операцию дефрагментации. Разумеется это не идет
в сравнение в stop-the-world управляемой вселенной .Net/Golang/Java но у меня возникают
вопросы. Это реалтайм? А как много времени мы можем просидеть в этой секции? Какие
регуляторные механизмы или хинты у нас есть в наличии? Разумеется я не предлагаю
писать свои аллокаторы. Это вывело-бы спор о пользе и вреде GC на новый уровень.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495750
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbiv_an_ruибо что мне писать на платформе со stop-the-world GC?
А кто-нибудь смотрел устройство явовского GC? У меня подозрения, что он это минимум примитивный memory management + логика для определения моментов, когда/где/сколько чистить.
Этих GC было много. Думаю что если нас интересует It-история или археология то
мы должны начать с LISP. Ваши подозрения по поводу "сколько чистить" - не совсем
корректны. Для Java чистится полностью все (в eden-space). То что имеет рефералов
- просто переносится в другие spaces. Кстати это ставит вопрос о свободном пространстве
на совершенно новый уровень. Для Java вообще нет понятия доступное или свободное
пространство как таковое. Есть minimal footprint приложения которое вышло в стационарный
режим и есть некие рабочие тренды плавающей части памяти (на графике они всегда
видны как характерная "пила").
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495805
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТо что имеет рефералов
- просто переносится в другие spacesэто ещё больше накладных расходов, получается.
maytonРазумеется я не предлагаю
писать свои аллокаторы.Если бы это дало прирост, то почему бы и нет? Другое дело, что в 99% случаев разработка своего аллокатора не нужна, потому что всё решается правильной организацией данных и продуманной работой с памятью в приложении. Да и объекты, которые связаны с работой с памятью (контейнеры) сейчас могут настраиваться и устраивать свой внутренний микро-мемори-менеджмент (например, сколько выделять памяти при исчерпании выделенных ресурсов)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495849
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основная проблема GC это асинхронность уборки.
А в джаве еще к тому же и отсутсвие деструкторов (по выходу из области видимости).
Это усложняет дизайн кода.
А скорость GC там приемлемая для большинства задач.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495898
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати по поводу детерминизма отклика обычного memory management.Обычно он в диапазоне от "плохо" до "ужасно" :) Как по временам отклика, так и по фрагментации. Зато в хорошем случае он раздаёт почти всю память. Хочется детерминизм --- жертвуйте отношением "полезно" выделенной памяти к числу страниц, отожраных процессом и средним временем отклика, используя что-то вроде TLSF.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495951
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА в джаве еще к тому же и отсутсвие деструкторов (по выходу из области видимости).
В C# та же проблема, там порешали интерфейсом IDisposable и оператором using()
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495972
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbmaytonТо что имеет рефералов
- просто переносится в другие spacesэто ещё больше накладных расходов, получается.
maytonРазумеется я не предлагаю
писать свои аллокаторы.Если бы это дало прирост, то почему бы и нет? Другое дело, что в 99% случаев разработка своего аллокатора не нужна, потому что всё решается правильной организацией данных и продуманной работой с памятью в приложении. Да и объекты, которые связаны с работой с памятью (контейнеры) сейчас могут настраиваться и устраивать свой внутренний микро-мемори-менеджмент (например, сколько выделять памяти при исчерпании выделенных ресурсов)
Нет. Работа java gc базируется на предположении что 99% аллокаций в eden space не переживут первую эпоху.
Они будут удалены. Оставшийся процент выживших копируются в survival. Поскольку очистка eden это лёгкая
Операция. По сути это обрушение счётчика. То мы считаем что здесь мы выиграли и дефрагментация eden нам не нужна.

Разумеется это справедливо для стационарного режима приложения. Не для старта.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495978
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAnatoly MoskovskyА в джаве еще к тому же и отсутсвие деструкторов (по выходу из области видимости).
В C# та же проблема, там порешали интерфейсом IDisposable и оператором using()
если бы эти приблуды ещё память освобождали....
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495980
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima Tпропущено...

В C# та же проблема, там порешали интерфейсом IDisposable и оператором using()
если бы эти приблуды ещё память освобождали....Экий вы еретик. Вам мало того, что там чего-то внутри происходит, вам ещё и конечный результат подавай? :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495997
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется в спорах о m.management можно выделить две крайности. Два антогонизма.

1. Мемори leaks вызванные ошибкай разработчика при обработке исключения или просто ошибкой.
2. Накладные расходы на управляемую кучу в виде стоп-вселенная и потребления мегафлопов.

Оба тезиса имеют место. Но многие ораторы не ищут компромисса между 1 и 2 а просто доказывают
Правильность линии свой партии.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39495998
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonCEMbпропущено...
это ещё больше накладных расходов, получается.
пропущено...
Если бы это дало прирост, то почему бы и нет? Другое дело, что в 99% случаев разработка своего аллокатора не нужна, потому что всё решается правильной организацией данных и продуманной работой с памятью в приложении. Да и объекты, которые связаны с работой с памятью (контейнеры) сейчас могут настраиваться и устраивать свой внутренний микро-мемори-менеджмент (например, сколько выделять памяти при исчерпании выделенных ресурсов)
Нет. Работа java gc базируется на предположении что 99% аллокаций в eden space не переживут первую эпоху.
Они будут удалены. Оставшийся процент выживших копируются в survival. Поскольку очистка eden это лёгкая
Операция. По сути это обрушение счётчика.
То мы считаем что здесь мы выиграли и дефрагментация eden нам не нужна.

Разумеется это справедливо для стационарного режима приложения. Не для старта.

это называется TLAB https://shipilev.net/jvm-anatomy-park/4-tlab-allocation/

именно заточка под классическое web приложение (сервлет) - тред получил запрос, нааллоцировал себе в TLAB, ответ отдал, все в TLAB прибил.
а вот GUI для приложения это уже не работает, и именно поэтому все эти ваши Java IDE отличаются абсолютно непредсказуемыми тормозами.


при этом отдельный ржач - в продакшине есть даже методика, когда выключают принудительно очистку old-generation, дескать дешевле просто на выходных приложение рестартовать и заново загрузить кеши из базы данных. вполне себе подход, чо
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496322
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchпри этом отдельный ржач - в продакшине есть даже методика, когда выключают принудительно очистку old-generation, дескать дешевле просто на выходных приложение рестартовать и заново загрузить кеши из базы данных. вполне себе подход, чо
Вы наверное не в курсе. Вы просто не разрабатывали подобные приложения. Например
ПО обработки equities, options имеет ярко выраженный сутошный лайф-цикл. Биржа
открывается в определённое время суток. А потом закрывается. На момент закрытия
приложение никому не нужно. И его можно ребутнуть. Какую из этого можно получить
пользу? Я думаю - очевидно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496324
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima Tпропущено...

В C# та же проблема, там порешали интерфейсом IDisposable и оператором using()
если бы эти приблуды ещё память освобождали....
То что написан Анатолий - требует уточнения. Формально Java language позволяет
создать класс с деструктором. Однако вам будет нелегко придумать и обосновать
полезный use-case где этот деструктор будет действительно необходим.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496353
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonФормально Java language позволяет
создать класс с деструктором.
Мы здесь про деструкторы, а не про финалайзеры.
maytonОднако вам будет нелегко придумать и обосновать
полезный use-case где этот деструктор будет действительно необходим.
Например, немедленное освобождение кратковременно используемых ограниченных ресурсов (всякие мьютексы, сокеты и тп, особенно в сочетании с JNI).
Хотя по мне так сначала придется придумать и обосновать полезный use-case для использования джавы )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496356
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonФормально Java language позволяет
создать класс с деструктором.
Мы здесь про деструкторы, а не про финалайзеры.
Вроде не пятница еще а вброс уже сделан
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496403
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОба тезиса имеют место. Но многие ораторы не ищут компромисса между 1 и 2 а просто доказывают
Правильность линии свой партии.Умные указатели разве не приводят к этому компромиссу?
1. Мы почти исключили вероятность ошибок, приводящих к ML
2. Мы можем не заниматься самостоятельной очисткой памяти, за нас это делают деструкторы. Но при этом мы сами может делать это в любой момент. Причём в плюсах этот механизм в разы гибче, чем в GC-языках.

пятница наступила
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496412
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМы здесь про деструкторы, а не про финалайзеры.
В синтаксис C# замечательные грабли для новичков встроили:
Код: c#
1.
2.
3.
~Class() {
...
}


Выглядит как деструктор, но как деструктор не вызывается, потому что финализер.
Кроме того MS в документации это деструктором называет .
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496415
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие у вас претензии к финалайзеру?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496416
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

"Новички" описание языка читать пробовали?

К с++ тоже относится
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496417
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКакие у вас претензии к финалайзеру?
Пользы от него ноль. Какие претензии могут быть к бесполезному?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonКакие у вас претензии к финалайзеру?
Пользы от него ноль. Какие претензии могут быть к бесполезному?
Ты можешь на C# написать пример как-бы ты хотел использовать
финалайзер по "полезному" ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496425
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу QNX. Иван решил отмолчаться. Ну ОК.

Из топиков по сабж я могу вспомнить только мой спор
с неким Petrav на тему ПО и самолетов. А также
с Базистом по поводу создания СУБД с нулевым
откликом.

Вообще у меня сложилось стойкое впечатление что
в форуме мало людей которые по существу могут пояснить,
а зачем им собственно вообще нужен реал-тайм. Обычно в 99%
бизнес задач такой вопрос вообще не стоит. Этот аспект
может быть описан так называемых NFR (Non functional
requirements) где-то одим из подпунктов. Там может
быть что flow, заявки на покупку или продажу акций
должен быть отработан не более чем за 300 мс. Но
это будет требование только для нашей системы. Не
для внешних микросервисов. Они могут лагать как им удобно.

По поводу UI для систем с MM (managed memory).

Для UI приложений написанных на Java, есть коробочная
рекомендация - включать +UseConcMarkSweepGC.
Навскиду не помню но кажется эта опция включена
во все дефолтные конфигурации пусковых скриптиков
bash для продуктов комании Jetbrains. Этого достаточно
чтобы комфортно работать и не видеть т.н. stop-the-world
о которых так много говорят в топике.

P.S. Я прошу прощения что пишу только по Java. C .Net я давно
не работал и не в курсе как там и чего. Если кто в теме - то
дополните.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496434
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ruпропущено...
Когда я смотрел на только-только свежеопубликованный go, в нём try-catch вообще не было. Ну, тоже метод :) Как там сейчас, через 10 лет --- не знаю, не смотрел, ибо что мне писать на платформе со stop-the-world GC?
Мне кажется вы - гиперболизируете проблему stop-the-world. На чем вы кст. разрабатываете? На QNX?На POSIX :) У нас одно время выходило примерно 40 релизов одной версии --- под разные платформы. Сейчас, слава Торвальдсу, почти все эти HP/UXы, AIX-ы и т.п. сошли с дистанции, зоопарк поменьше стал.

С другой стороны, если учесть, что у нас своё
--- управление памятью
--- управление сокетами
--- кластерный IPC
--- диспетчеризация доступа к дискам
... и даже, к примеру, поддержка нитей на том железе, где OS их не имеет, а при этом нам надо не "настоящий" реал-тайм, а interactive/near-interactive, то QNX нам вовсе не обязателен.

Один ньюанс. Статистику по нашим процессам top запросто показывает с суффиксом не "m", и не "g", а "t". Ни один GC не будет вести себя прилично, если в колонках VIRT и RES маячат суффиксы "t"
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496443
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВообще у меня сложилось стойкое впечатление что
в форуме мало людей которые по существу могут пояснить,
а зачем им собственно вообще нужен реал-тайм. Обычно в 99%
бизнес задач такой вопрос вообще не стоит.Так уж устроена жизнь, что большинство подсистем либо одновременно детерминированы и по времени, и по памяти, либо одновременно недетерминированы. Скажем, очень нечасто увидишь софтинку, которая за предопределённое время на одном и том же объёме данных отожрёт непредсказуемо большой объём памяти, но при этом работает стабильно :) Поэтому "покупая" ради отсутствия деградации по памяти детерминизм по этой самой памяти, детерминизм по времени получаешь в подарок. Скажем, по временным характеристикам нас вполне устраивает и обычный линуксовый аллокатор, но нас не устраивает его фрагментация памяти на больших аптаймах, поэтому мы используем свой карманный TLSF. Если при этом у нас и время стабильнее, это "приятный необязательный пустячок", не более.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496448
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima Tпропущено...

Пользы от него ноль. Какие претензии могут быть к бесполезному?
Ты можешь на C# написать пример как-бы ты хотел использовать
финалайзер по "полезному" ?
Как полноценный деструктор. Например закрыть открытые ресурсы ОС (файлы, мутексы и т.д.).
Деструктор С++ полезен потому что однозначно определен момент его запуска, а финализер гарантирует только "когда-нибудь точно сработаю" и это делает его бесполезным.

Как уже выше написал 20679521 в C# для эмуляции деструктора изобрели интерфейс IDisposable и оператор using(). Для большинства случаев этого достаточно.

Спорить тут особо не о чем. Финализер вместо деструктора это побочный эффект сборки мусора, т.к. в коде никак не контролируется выход объектов за область видимости, т.е. не отслеживается момент когда объект стал мусором.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496461
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruС другой стороны, если учесть, что у нас своё
--- управление памятью
--- управление сокетами
--- кластерный IPC
--- диспетчеризация доступа к дискам
... и даже, к примеру, поддержка нитей на том железе, где OS их не имеет, а при этом нам надо не "настоящий" реал-тайм, а interactive/near-interactive, то QNX нам вовсе не обязателен.... то вам уже можно просто сделать свою операционку и не заморачиваться с другими.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496471
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbiv_an_ruС другой стороны, если учесть, что у нас своё
--- управление памятью
--- управление сокетами
--- кластерный IPC
--- диспетчеризация доступа к дискам
... и даже, к примеру, поддержка нитей на том железе, где OS их не имеет, а при этом нам надо не "настоящий" реал-тайм, а interactive/near-interactive, то QNX нам вовсе не обязателен.... то вам уже можно просто сделать свою операционку и не заморачиваться с другими.Для операционки надо добавить бутявку, HAL + драйверы, консоль и кучу мелкой пофигени, вроде таблиц маршрутизации или часовых поясов. Лучше уж заморачиваться с одной готовой операционкой, чем с уймой этих мелочей :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496473
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Так в c# с областью видимости — напряжёнка — нету её
( разве что оптимизатор может узреть)

Не надо механически привычки с с++ переносить на шарп
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496586
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилТак в c# с областью видимости — напряжёнка — нету её
( разве что оптимизатор может узреть)
Область видимости объекта - это места в коде где может встречаться его имя.

Если областей видимости нет это значит что в шарпе можно снаружи функций обращаться к ее локальным переменным, и много других приколов.
Лучше перефразируйте что вы хотели сказать, а то пока получается какая-то бессмыслица ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496647
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytondbpatchпри этом отдельный ржач - в продакшине есть даже методика, когда выключают принудительно очистку old-generation, дескать дешевле просто на выходных приложение рестартовать и заново загрузить кеши из базы данных. вполне себе подход, чо
Вы наверное не в курсе. Вы просто не разрабатывали подобные приложения. Например
ПО обработки equities, options имеет ярко выраженный сутошный лайф-цикл. Биржа
открывается в определённое время суток. А потом закрывается. На момент закрытия
приложение никому не нужно. И его можно ребутнуть. Какую из этого можно получить
пользу? Я думаю - очевидно.

тебе-то из подвала оно конечно виднее. из суточных лайф циклов - про good till cancel/day ты тоже уже в курсе?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496656
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЕсли областей видимости нет это значит что в шарпе можно снаружи функций обращаться к ее локальным переменным, и много других приколов.
можно.

Через замыкания, например( которые не требуют явной спецификации)
попавши в замыкание, локальная (с лексической точки зрения ) становится глобальной и живёт своей жизнью
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496660
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 они до сих пор не выдерживают. Но, как говорят джависты - привыкнуть можно. Угум.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496667
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЧерез замыкания, например( которые не требуют явной спецификации)
попавши в замыкание, локальная (с лексической точки зрения ) становится глобальной и живёт своей жизнью
Вы путаете область видимости и время жизни.
Замыкание находися внутри функции, поэтому оно может ссылаться на ее переменные.
А время жизни захваченных переменных продлевается естественно.

Ну и не становится в шарпе (и нигде) захваченная переменная глобальной, ее область видимости - замыкание )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496704
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА время жизни захваченных переменных продлевается естественно.
но эта "локальная" переменная - уже не может жить на стеке.

ничего я не путаю. лексическая область видимости - локальная, время жизни - может превышать время жизни активации. хорошая такая "локальная переменная."
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496859
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ставлю вопрос о переносе топика в Программирование
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496870
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилно эта "локальная" переменная - уже не может жить на стеке.
Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496889
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyИзопропилно эта "локальная" переменная - уже не может жить на стеке.
Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке

хранение объектов на стеке - это "фича" C++, мало кто еще так делает. обычно на стеке хранятся лишь ordinals - int, pointer.
в этом ключе реализация замыкания довольно проста - ordinals просто копируются по значению,
а объекты - т.к. все равно в куче, мы копируем лишь указатель-ссылку на них

тут другое интереснее - переменные могут и на стеке не храниться, а прямо в регистрах исполняться, в т.ч. параметры функций.

недавно люди из мира Java получили разрыв шаблона, когда узнали, что первые параметры функции передаются не через стек,
а через регистры, но, как оказалось, в их мире не все так радужно

впрочем, какая разница откуда копировать...

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496918
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchТем не менее, сравнение с Visual Studio или Delphi IDE они до сих пор не выдерживают. Но, как говорят джависты - привыкнуть можно. Угум.
Я не думаю что продукт из семейства Delphi IDE можно ставить в сравнение. Он очень нишевый
и опции autocompletition там будут определены только в узком сегменте языков.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496919
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchДа, продукты Jetbrains выглядят "повеселее" в плане отзывчивости и незалипаемости.
Хотя у них проблемы спонтанных тормозов все равно остаются, хотя как говорят наши джависты - это уже проблема
не самой JVM, а уже непосредственно кода IDE.
Да. Спонтанные тормоза могут быть. Но я здесь откомментарю.
Я часто из за плеча замечал как мои коллеги инсталлируют среды разработки.
Красивый и красочные мастер установки предлагает тонну всяких фич типа там
фреймворки и языки. Коллеги не глядя тынцают "выбрать все". А потом гневно
отшвыривают от себя клавиатуру и бубнят дескыть чего это "оно" затупило?

Вобщем-то каждый случай надо разбирать отдельно. Может быть даже и активность
антивируса создала траблы.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496921
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruОдин ньюанс. Статистику по нашим процессам top запросто показывает с суффиксом не "m", и не "g", а "t". Ни один GC не будет вести себя прилично, если в колонках VIRT и RES маячат суффиксы "t"
Я понял. Спасибо Иван.

Я думаю что как раз тот самый компромисс о котором я говорил - это MM + неуправляемая куча.
И экспертный вопрос - какому приложению и в какой пропорции сколько отдать.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496923
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TAnatoly MoskovskyА в джаве еще к тому же и отсутсвие деструкторов (по выходу из области видимости).
В C# та же проблема, там порешали интерфейсом IDisposable и оператором using()
КМК в Java есть шаблон try-finally или try-with-resources который создан
для отбивания подобных ситуаций. Я имею в виду немедленное освобождение
native ресурсов ОС таких как файлы, сокеты, мьютексы используя кастомный
API.

Но опять-же ... если вы играете в парадигме языка то вам нет острой необходимости
это использовать. Стандартные либы покрывают 99.9% кейсов. Что у вас там?

Я навскидку могу вспомнить разве что интерфейс RS-232 который действительно
не суппортился.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496926
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruТак уж устроена жизнь, что большинство подсистем либо одновременно детерминированы и по времени, и по памяти, либо одновременно недетерминированы. Скажем, очень нечасто увидишь софтинку, которая за предопределённое время на одном и том же объёме данных отожрёт непредсказуемо большой объём памяти, но при этом работает стабильно :) Поэтому "покупая" ради отсутствия деградации по памяти детерминизм по этой самой памяти, детерминизм по времени получаешь в подарок. Скажем, по временным характеристикам нас вполне устраивает и обычный линуксовый аллокатор, но нас не устраивает его фрагментация памяти на больших аптаймах, поэтому мы используем свой карманный TLSF. Если при этом у нас и время стабильнее, это "приятный необязательный пустячок", не более.
Я еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если
не в рамках этого топика то в других мы дойдем до обсуждения.

Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс
аллокатора то почему его не сделали дефолтным для Linux/FreeBSD?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496927
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tmaytonпропущено...

Ты можешь на C# написать пример как-бы ты хотел использовать
финалайзер по "полезному" ?
Как полноценный деструктор. Например закрыть открытые ресурсы ОС (файлы, мутексы и т.д.).
Деструктор С++ полезен потому что однозначно определен момент его запуска, а финализер гарантирует только "когда-нибудь точно сработаю" и это делает его бесполезным.

Как уже выше написал 20679521 в C# для эмуляции деструктора изобрели интерфейс IDisposable и оператор using(). Для большинства случаев этого достаточно.

Спорить тут особо не о чем. Финализер вместо деструктора это побочный эффект сборки мусора, т.к. в коде никак не контролируется выход объектов за область видимости, т.е. не отслеживается момент когда объект стал мусором.
Дима. Еще добавлю. КМК именно буферизация (или отложенная деаллокация) дает преимущества.
Это как в БД и файловых системах. Если ты делаешь батчинг с умным предвариельным анализм
батча - то можешь здорово сэкономить на всем объеме операций.

И поэтому КМК сиюминутное пожелание срочно отработать "деструктор" приводит к ненужной
суетливой активности и потере общего КПД.

И еще раз. Я ратую за компромисс а не за "священную войну против GC и MM".

Ну ты как? ОК? Не ОК?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496928
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchAnatoly Moskovskyпропущено...

Физически она находится в замыкании. А само замыкание может храниться в локальной переменной, т.е. на стеке

хранение объектов на стеке - это "фича" C++, мало кто еще так делает. обычно на стеке хранятся лишь ordinals - int, pointer.
в этом ключе реализация замыкания довольно проста - ordinals просто копируются по значению,
а объекты - т.к. все равно в куче, мы копируем лишь указатель-ссылку на них
Я прошу прощения. Я уже достаточно зафлудил топик. Но кину еще 5 копеек.

Один чел мне рассказывал про Rust.

В Rust используется интересная модель уборки мусора основанная на анализе
переменых на стеке и на формальном доказательстве в фазе компиляции того
что наши ссылки не задействованы и в последующей деаллокацией.

Я пока за этот факт ничего не знаю т.к. с растом не знаком и ожидаю что кто-то
подтвердит или даст пруфы или краткую резюмирующую инфу.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496930
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чё-то здесь про QNX говорили. Он дорого стоит - поэтому "распил" называется.
А про количество строк - ху кновс. В Ассемблере всё с новой строки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496935
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если
не в рамках этого топика то в других мы дойдем до обсуждения.

Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс
аллокатора то почему его не сделали дефолтным для Linux/FreeBSD?TLSF в среднем медленнее Дугласа Ли раза в два. Да, в очень редком плохом случае Дуглас Ли протормозит в _сто_ раз дольше TLSF, но это не каждый день случается.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39496993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rumaytonЯ еще не читал про этот TLSF. На все не хватает времени. Но скачал в ебук. Надеюсь что если
не в рамках этого топика то в других мы дойдем до обсуждения.

Но сходу спрошу. Если этот продукт такой замечательный и при этом поддерживает интерфейс
аллокатора то почему его не сделали дефолтным для Linux/FreeBSD?TLSF в среднем медленнее Дугласа Ли раза в два. Да, в очень редком плохом случае Дуглас Ли протормозит в _сто_ раз дольше TLSF, но это не каждый день случается.
Получил разрыв шаблона. Douglas «Doug» S. Lea это известная личность среди создателей
Пакета java.concurrency. Но вы очевидно имели в виду другое...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497040
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А все ОК. Разобрался. А то по ссылкам уже каких-то баскетболистов нагуглил.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497053
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДима. Еще добавлю. КМК именно буферизация (или отложенная деаллокация) дает преимущества.
Это как в БД и файловых системах. Если ты делаешь батчинг с умным предвариельным анализм
батча - то можешь здорово сэкономить на всем объеме операций.

И поэтому КМК сиюминутное пожелание срочно отработать "деструктор" приводит к ненужной
суетливой активности и потере общего КПД.

И еще раз. Я ратую за компромисс а не за "священную войну против GC и MM".

Ну ты как? ОК? Не ОК?
Деструктор и освобождение памяти это разные вещи. Деструктор это логика уровня приложения. Сообщение объекту что он больше не используется сразу как он стал ненужным. Я об этом. Что там реально с памятью происходит - не важно.

Пример с БД неудачен, т.к. РСУБД и ООП никак не пересекаются. Но в РСУБД есть аналог деструктора - триггер.

В общем деструктор нужная штука и там где его нет изобретают всякие костыли для его эмуляции.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497079
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПример с БД неудачен, т.к. РСУБД и ООП никак не пересекаются. Но в РСУБД есть аналог деструктора - триггер.

Я другое имел в виду. Если рассматривать MM как структуру данных то и "чистку" неиспользуемых
объектов в памяти лучше делать не "штучно" а массово.

Это повышает общий КПД алгоритма хотя и вводит некую задержку в освобождение памяти. Но кому
нужен жесткий синхронизм?

Тебе нужен?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497080
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ общем деструктор нужная штука и там где его нет изобретают всякие костыли для его эмуляции.
По поводу костылей для языков с GC.

Костыль номер раз.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    /**
     * With 'finally' section
     */
    public static void dangerousMethod1(){
        try{
            // TODO: Fucken native dangerous callbacks
            //NativeResource.use();
        } finally {
            // TODO: Fucken destructor section
            //NativeResource.safeclose();
        }
    }



И костыль номер два - это try-with-resources о котором я говорил. Его легко нагуглить. Там будет и перегруженный
метод ::close(). Это и есть как-бе деструктор.

Насколько это костыльно по 10 балльной шкале? Я не знаю. Я думаю что не очень. Т.к. сам юзкейс очень специфичен.
Ситуации когда тебе кровь-из-носа нужно освободить ресурсы достаточно редки. Их можно посчитать по пальцам.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497096
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСитуации когда тебе кровь-из-носа нужно освободить ресурсы достаточно редки
разве это не типовая ситуация?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497102
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
завтра обязательно будет "лучше", чем было вчера.

try-with-resources появился спустя 15 лет после старта дохлой java-идеи, когда в нее вдыхалась уже третья жизнь, потенциал которой будут выбирать еще лет пять-семь вперед, благодаря впрыснутой в машину invokedynamic ( говорят, к java-11, наконец, пересмотрят генерики, и сделают их почти такими же "плохими", как в c++ (генерирующими на этапе компиляции версию класса для использующего типа, (а сначала-то появились в генерации 2.5 "хорошие" - с затиранием фактического типа)).

Само по себе это имеет мало отношения к вопросу о том, что лучше - языковую или системную поддержку для работы с динамической памятью.

Это вопрос математики.
Даг Ли явил в malloc имени себя любимого нечто, что спустя 15-20 лет было переосмыслено как потенциальная возможность математической гарантии управления памятью.

К тому моменту, когда математика окончательно сойдется, ява перестанет быть java-ой, так как потребность иметь поддержку управления памятью, отличную от предоставляемой операционной системой просто отпадет.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497145
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonСитуации когда тебе кровь-из-носа нужно освободить ресурсы достаточно редки
разве это не типовая ситуация?
Это не типовая ситуацию для языков с GC. Другими словами - вы хотите чтобы объект, который
покинул scope - немедленно (физически) был удален из eden/surv/oldgen. И вы его факт удаления
тут-же зафиксировали в memree(..).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497148
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто не типовая ситуацию для языков с GC. Другими словами - вы хотите чтобы объект, который
покинул scope - немедленно (физически) был удален из eden/surv/oldgen. И вы его факт удаления
тут-же зафиксировали в memree(..).Это неправильная посылка. Финализатор позволяет сделать "изощрённое освобождение памяти", но заменой деструктора он всё равно не станет.
Деструктор требуется тогда, когда необходимо явно управлять временем жизни любых ресурсов, кроме памяти JVM.
Тривиальный пример - сокеты IP-стека.
Там, где "плюсовики" один раз напишут деструктор и дальше будут управлять временем жизни объекта "расставляя фигурные скобочки", "кофеманам" придётся явно прописывать try/finally.
С моей кочки зрения это не минус и не плюс: try/catch всё равно необходимы, а необходимость прописывать finally устраняет синтаксический сахар try-with-resource.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497164
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ другое имел в виду. Если рассматривать MM как структуру данных то и "чистку" неиспользуемых
объектов в памяти лучше делать не "штучно" а массово.
Точно так же можно массово освобождать память в С++. Пропиши свой delete, где запоминай указатели на освобождаемую память, а затем массово их удали в нужный тебе момент. Уже писал: деструктор - это логика уровня приложения. Способ управления памятью тут ни при чем.
maytonИ костыль номер два - это try-with-resources о котором я говорил. Его легко нагуглить. Там будет и перегруженный
метод ::close(). Это и есть как-бе деструктор.
Почитал про try-with-resources, это тоже самое что using() в C#.
maytonНасколько это костыльно по 10 балльной шкале? Я не знаю. Я думаю что не очень.
Не особо костыльно. Чуть больше кода.
maytonТ.к. сам юзкейс очень специфичен.
Ситуации когда тебе кровь-из-носа нужно освободить ресурсы достаточно редки. Их можно посчитать по пальцам.
От задач зависит. Мне часто надо. А может я просто привык что есть дестуктор, поэтому с ним мне удобнее.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТочно так же можно массово освобождать память в С++. Пропиши свой delete, где запоминай указатели на освобождаемую память, а затем массово их удали в нужный тебе момент. Уже писал: деструктор - это логика уровня приложения. Способ управления памятью тут ни при чем.
Убедил. Согласен что деструктор - это логика управления приложением.

А свой delete прописывать не хочу. Ну... по крайней мере это не будет кастомизацией
приложения. Как платформа или язык - да. Как приложение - нет.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497337
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМне кажется в спорах о m.management можно выделить две крайности. Два антогонизма.

1. Мемори leaks вызванные ошибкай разработчика при обработке исключения или просто ошибкой.
2. Накладные расходы на управляемую кучу в виде стоп-вселенная и потребления мегафлопов.

Оба тезиса имеют место. Но многие ораторы не ищут компромисса между 1 и 2 а просто доказывают
Правильность линии свой партии.
Не вижу смысла рассматривать какую либо [не]оптимальность ГЦ при потреблении Явой памяти в обычном случае в >3.5 раза больше.

ИзопропилAnatoly MoskovskyА время жизни захваченных переменных продлевается естественно.
но эта "локальная" переменная - уже не может жить на стеке.

ничего я не путаю. лексическая область видимости - локальная, время жизни - может превышать время жизни активации. хорошая такая "локальная переменная."
Лямбда в c# превращается в целый независимый класс и живет в хипе.

ShSergeЧё-то здесь про QNX говорили. Он дорого стоит - поэтому "распил" называется.
А про количество строк - ху кновс. В Ассемблере всё с новой строки.
VxWorks стоила (сравнивал давно) столько же. Конкурируй.
Хотя есть и подешевле варианты RT-систем, RTOS-32 например.

Но Майтон верно написал - не всем нужен RT, добавлю еще, что там где он действительно нужен, часто не нужен С.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497410
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЛямбда в c# превращается в целый независимый класс и живет в хипе.

Хм... я-бы перепроверил этот факт. Есть мысль что все-таки не в класс а в статический метод.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497415
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

trust me, i'm an engineer =)

на хабре пробегала статья с кодом из il-dasm
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(разводя руками)

Зачем нам Хабр? Давайте щас соберем код. И дизассемблернём.

P.S. В статьи на Хабре я охотно верю. Но эволюция версий ПО мать ее так...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497447
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм... я-бы перепроверил этот факт. Есть мысль что все-таки не в класс а в статический метод.
Лямбда не может быть в общем случае просто функцией. У ее экземпляров обычно есть состояние.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497448
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonХм... я-бы перепроверил этот факт. Есть мысль что все-таки не в класс а в статический метод.
Лямбда не может быть в общем случае просто функцией. У ее экземпляров обычно есть состояние.предлагаю не травмировать обитателя упрощенного форума
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497457
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оффтопик
авторне всем нужен RT, добавлю еще, что там где он действительно нужен, часто не нужен С.
Скажите, пожалуйста, а на чём же пишут системы реального времени, если не на С?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497494
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonХм... я-бы перепроверил этот факт. Есть мысль что все-таки не в класс а в статический метод.
Лямбда не может быть в общем случае просто функцией. У ее экземпляров обычно есть состояние.
Приведите пример
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497502
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxоффтопик
авторне всем нужен RT, добавлю еще, что там где он действительно нужен, часто не нужен С.
Скажите, пожалуйста, а на чём же пишут системы реального времени, если не на С?
Например: Ада, Модула . Стоит ещё учитывать для чего используется система - степень требуемой надёжности. "С" это ширпотреб, его никто в здравом уме не рассматривает как основу систем реального времени с гарантиями качества.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497539
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)azsxоффтопик
пропущено...

Скажите, пожалуйста, а на чём же пишут системы реального времени, если не на С?
Например: Ада, Модула . Стоит ещё учитывать для чего используется система - степень требуемой надёжности. "С" это ширпотреб, его никто в здравом уме не рассматривает как основу систем реального времени с гарантиями качества.

Не затруднит развить вашу глубокую мысль ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497546
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiНе затруднит развить вашу глубокую мысль ?
а что в ней непонятного?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497551
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxоффтопик
авторне всем нужен RT, добавлю еще, что там где он действительно нужен, часто не нужен С.
Скажите, пожалуйста, а на чём же пишут системы реального времени, если не на С?
Алгоритмы заказчика на
https://en.wikipedia.org/wiki/IEC_61131
К языкам относится часть 3

Но вот сама ОС контроллеров, скорее всего на С. По крайней мере, внешние интерфейсы для расширения низкоуровневой функциональности я видел только Сишные.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497560
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl, я не силён в нерусском и мой вопрос скорее для повышения общего уровня образованности. Я нашёл по вашей ссылке такую цитату:
авторIEC 61131-3 currently defines five programming languages for programmable control systems: function block diagram (FBD), ladder diagram (LD), structured text (ST; similar to the Pascal programming language), instruction list (IL; similar to assembly language), and sequential function chart (SFC).[12] These techniques emphasize logical organization of operations.[11]
Из неё я делаю вывод, что при программировании программируемого логического контролёра (plc) в том числе используют язык, похожий на паскаль.
В то же время мне всегда казалось, что операционные системы реального времени (real time os) -- это windows nt, qnx и прочие.То есть это полноценные ос, просто умеют прерывания делать жёсткие в определённые моменты времени.
То есть Ваша ссылка не подходит, она не для этого.
Я совсем не прав? В чём мои ошибки?
зы
Меня просто также удивило, что критичные к времени приложения пишут не на С, я ответа не знаю, хочу спросить.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497563
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне показалось что камент Руслана скорее философский.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497601
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

Есть две большие области применения RT - embedded и PLC

В первой применяются ОС более-менее общего назначения, как ты написал. На самом деле там может быть и не RT-ос, а простенькая прошивка (например как в ардуино) или даже клон DOS или простого (не РТ) Линуха. Но обычно поддержка RT есть.

Во второй - только hard-RT, свои закрытые ОС, и тот стандарт, что я указал.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497607
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxМеня просто также удивило, что критичные к времени приложения пишут не на С, я ответа не знаю, хочу спросить.
критичные к времени и надёжности приложения пишут не на С

всякие контроллёры на ардуино это ширпотреб, от которых ничего критичного не зависит
более того там все гарантии нулевые

представили, например, как боинг запустить с такими гарантиями?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497627
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)azsxМеня просто также удивило, что критичные к времени приложения пишут не на С, я ответа не знаю, хочу спросить.
критичные к времени и надёжности приложения пишут не на С...а на single-assignment C ;)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497637
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rukealon(Ruslan)пропущено...

критичные к времени и надёжности приложения пишут не на С...а на single-assignment C ;) собственно это уже и не С

Профессор из Цюриха не просто так свой хлеб ест, большинство его работ засекречено - ибо, военная тайна.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497713
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жаль что это не даёт пищу для продолжения дискуссии.

Сложно обсуждать секретные разработки здесь.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497737
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)iv_an_ruпропущено...
...а на single-assignment C ;) собственно это уже и не С

Профессор из Цюриха не просто так свой хлеб ест, большинство его работ засекречено - ибо, военная тайна.Профессор из Цюриха тащит к себе аспирантов со всего глобуса, и юзает их как рабочих лошадок. Какая, к чорту, военная тайна?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497812
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruПрофессор из Цюриха тащит к себе аспирантов со всего глобуса, и юзает их как рабочих лошадок. Какая, к чорту, военная тайна?
везде зовут, гранды дают, по твоему учёных "в тёмную" использовать нельзя? :-)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497882
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)iv_an_ruПрофессор из Цюриха тащит к себе аспирантов со всего глобуса, и юзает их как рабочих лошадок. Какая, к чорту, военная тайна?
везде зовут, гранды дают, по твоему учёных "в тёмную" использовать нельзя? :-)Я как-то не готов на полном серьёзе спорить о том, что и как происходит в науке, с человеком, который не может написать такое денежное и нежно любимое слово, как "грант".
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497917
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru, бывает - мне можно, это не мой родной
как написал mayton сложно обсуждать секретные разработки, но вот ни за что я не поверю, что он написал ЯП для военных и успокоился.

Отвлечённая наука либо нищая, либо пашет на прикладников и самые "жирные" из них в любой стране, это военные. Вам как жителю одного из наукоградов об этом должно быть очень хорошо известно.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497940
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
azsxоффтопик
авторне всем нужен RT, добавлю еще, что там где он действительно нужен, часто не нужен С.
Скажите, пожалуйста, а на чём же пишут системы реального времени, если не на С?
На CUDA C++ , если полу-автопилот автомобиля считать системой реального времени: https://teslamotorsclub.com/tmc/threads/inside-the-nvidia-px2-board-on-my-hw2-ap2-0-model-s-with-pics.91076/#post-2113392
Гарантий времени выполнения CUDA C++ дает в разы больше, а производительности на порядки больше, чем любое другое оборудование с любыми другими языками.
И Hi-end mGPU, и Middle-end GPU в разы быстрее, чем VHDL на топовых FPGA с neuFlow или ASIC с neuIBM или TrueNorth для топовых задач компьютерного зрения: обнаружения объектов и семантической сегментации - на этих задачах FPGA и ASIC дают чуть больше гарантий - работают детерминировано гарантированно медленнее.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39497979
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly Moskovskyпропущено...

Лямбда не может быть в общем случае просто функцией. У ее экземпляров обычно есть состояние.
Приведите пример
Код: plaintext
1.
2.
3.
4.
5.
6.
auto f1 = []() { return 100; }; // лямбда без состояния; может быть реализована как функция
int v = 200;
auto f2 = [v]() { return v; }; // лямбда c состоянием; может быть реализована как класс, где v хранится как поле.
// а сигнатура у них одинаковая
print(f1()); // печатаем 100
print(f2()); // печатаем 200


Siemarglпредлагаю не травмировать обитателя упрощенного форума
Нечего легкотравмируемым тут шастать ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498009
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskymaytonпропущено...

Приведите пример
Код: plaintext
1.
2.
3.
4.
5.
6.
auto f1 = []() { return 100; }; // лямбда без состояния; может быть реализована как функция
int v = 200;
auto f2 = [v]() { return v; }; // лямбда c состоянием; может быть реализована как класс, где v хранится как поле.
// а сигнатура у них одинаковая
print(f1()); // печатаем 100
print(f2()); // печатаем 200


Siemarglпредлагаю не травмировать обитателя упрощенного форума
Нечего легкотравмируемым тут шастать ))
Анатолий. То что вы написали не является лямбдой в общем понимании.
Вы создали забавный синтаксический "гомункул". Но я акцентирую внимание
Вас, и всех присутствующих на том что мы в топике говорили о надёжности ПО.
А надежность - это некая общая составляющая всех-всех частей языка. Это гарантии
того что поведение ПО будет таким как ожидает его разработчик. И не только
он а и пользователь этого кода. Очень жаль что господа из "комитета" и также
"бородатый человек в кедах" не думают о надежности. А решают свою мелкие
коньюнктурные хотелки.

Я не очень верю истории о Цюрихском профессоре. Но я хочу акцентировать еще
раз внимание на том что нам (разработчикам) в первую очередь важно написать
ПО работающее корректно. Без ошибок. Это необходимая составляющая. Перформанс
и краткость это уже второе... третье... и так далее. Но ПО работающее некорректно
или непредсказуемо - это репутационные потери. И потери заказов.

Не забывайте об этом.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498022
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Непонятна реакция. Код совершенно корректный - см примеры тут для С++

Выше по теме утверждалось, что ФП приводит к более безопасному и предсказуемому коду.

Я правда, без доказательств в это совсем не верю.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498034
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФП - это принципы. В первую очередь.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498038
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Но я хочу акцентировать еще
раз внимание на том что нам (разработчикам) в первую очередь важно написать
ПО работающее корректно. Без ошибок. Это необходимая составляющая. Перформанс
и краткость это уже второе... третье... и так далее. Но ПО работающее некорректно
или непредсказуемо - это репутационные потери. И потери заказов.

Не забывайте об этом.К сожалению, практика показывает, что "бац бац и в продакшн" вполне жизнеспособная модель. Именно благодаря ей С и появился, и собственно по ней же и развивался.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498042
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНо я хочу акцентировать еще
раз внимание на том что нам (разработчикам) в первую очередь важно написать
ПО работающее корректно. Без ошибок. Это необходимая составляющая. Перформанс
и краткость это уже второе... третье... и так далее.
Но ПО работающее некорректно
или непредсказуемо - это репутационные потери. И потери заказов.

Не забывайте об этом.
Надо помнить, что многие системы на основе Decision support system, Machine learning, Computer Vision, ... всегда имеют среднюю ошибку зависящую от производительности . Всегда можно предложить более сложную/многомерную задачу, с более точным результатом, и с большим временем выполнения.
- Спрыгиваем с CUDA C++ на любой из C/Java/C#... - это в 100 раз больше ошибок Computer Vision = в 100 раз больше жертв автокатастроф при использовании существующих автопилотов: https://geektimes.ru/post/277970/
- Спрыгиваем с C++ на Java/C#... это в разы больше ошибок в аналитических системах расчета риска выдачи кредитов BigData / Machine learning = в разы больше невозвратных кредитов, больше банкротов физических лиц и разрушенных семей http://www.lextrait.com/Vincent/implementations.html
Все это важнее, чем ваша репутация.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498050
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТо что вы написали не является лямбдой в общем понимании.
Вы создали забавный синтаксический "гомункул".
Нет. Вы ошибаетесь.
Это лямбда в самом математическом смысле.
Хотя я допускаю, что вы просто не поняли что там написано.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498051
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася УткинНадо помнить, что многие системы на основе Decision support system, Machine learning, Computer Vision, ... всегда имеют среднюю ошибку зависящую от производительности . Всегда можно предложить более сложную/многомерную задачу, с более точным результатом, и с большим временем выполнения.
Согласен. Но возможно вашу систему, принимающую решения можно
реализовать на аналоговой технике а ошибку принятия решения
мы вообще вынесем за рамки технического задания.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498060
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonВася УткинНадо помнить, что многие системы на основе Decision support system, Machine learning, Computer Vision, ... всегда имеют среднюю ошибку зависящую от производительности . Всегда можно предложить более сложную/многомерную задачу, с более точным результатом, и с большим временем выполнения.
Согласен. Но возможно вашу систему, принимающую решения можно
реализовать на аналоговой
технике а ошибку принятия решения
мы вообще вынесем за рамки технического задания
.
Т.е. реализовать аналоговую систему, чтобы принимать решения не в 100 раз, а в 1000000 раз хуже, и при этом тех-заданием не контролировать даже это ужасное качество решений, а дать возможность сделать ещё хуже - строго гарантировано никчемную систему работающую без программных ошибок?
Невозможно и нельзя, а обычно, наоборот, тех, кто предлагает такие решения - выносят за рамки проекта, а точнее не вносят в него :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498061
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonТо что вы написали не является лямбдой в общем понимании.
Вы создали забавный синтаксический "гомункул".
Нет. Вы ошибаетесь.
Это лямбда в самом математическом смысле.
Хотя я допускаю, что вы просто не поняли что там написано.В математическом смысле, лямбда-исчисление это синтаксис описывающий манипулирование лямбда-терминами.
То что введено в С++, это всего-лишь попытка добавить "анонимную форму". Но лямбды там нету даже близко.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498146
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТо что введено в С++, это всего-лишь попытка добавить "анонимную форму". Но лямбды там нету даже близко.Лямбда там есть, нету стандартных операторов над лямбдами. Нельзя, скажем, имея лямбды f1, f2 и f3 неким выражением из стандартных операторов изготовить лямбду с логикой "если f1, то f2, иначе f3".

Ну и синтаксис прмерно такой же извращённый, как у декларации массива функций, возвращающих мембер-указатели на методы класса от константных ссылок на описываемый здесь массив функций... :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498153
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruWhite OwlТо что введено в С++, это всего-лишь попытка добавить "анонимную форму". Но лямбды там нету даже близко.Лямбда там есть, нету стандартных операторов над лямбдами. Нельзя, скажем, имея лямбды f1, f2 и f3 неким выражением из стандартных операторов изготовить лямбду с логикой "если f1, то f2, иначе f3".

Ну и синтаксис прмерно такой же извращённый, как у декларации массива функций, возвращающих мембер-указатели на методы класса от константных ссылок на описываемый здесь массив функций... :)
Да. В ФП это называется получение "остаточной процедуры".

И да. Синтаксис тяжелый для прочтения глазами.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498203
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)mayton...Но я хочу акцентировать еще
раз внимание на том что нам (разработчикам) в первую очередь важно написать
ПО работающее корректно. Без ошибок. Это необходимая составляющая. Перформанс
и краткость это уже второе... третье... и так далее. Но ПО работающее некорректно
или непредсказуемо - это репутационные потери. И потери заказов.

Не забывайте об этом.К сожалению, практика показывает, что "бац бац и в продакшн" вполне жизнеспособная модель. Именно благодаря ей С и появился, и собственно по ней же и развивался.

Чем дальше в лес, тем толще партизаны. У тебя хоть один аргумент есть, кроме феерических заявлений ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498232
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДа. В ФП это называется получение "остаточной процедуры".
Может у вас и каррирование тоже нарушает принципы ФП )

А претензии к синтаксису какое отношение имеют к обсуждаемой теме? ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498237
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlAnatoly MoskovskyВ математическом смысле, лямбда-исчисление это синтаксис описывающий манипулирование лямбда-терминами.
То что введено в С++, это всего-лишь попытка добавить "анонимную форму". Но лямбды там нету даже близко.
Ну так напишите, чего из настоящих лямбд не хватает в С++-ных лямбдах.
А то создается впечатление что вы с лямбдами в С++ знакомы также как с исключениями, на уровне слышал звон да не знаю где он )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498246
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruЛямбда там есть, нету стандартных операторов над лямбдами. Нельзя, скажем, имея лямбды f1, f2 и f3 неким выражением из стандартных операторов изготовить лямбду с логикой "если f1, то f2, иначе f3".
Че-то свидетели разошлись в показаниях. То есть, лямбда, то ее нет. Так скоро может выясниться что и операторы стандартные есть ))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498315
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schikealon(Ruslan)пропущено...
К сожалению, практика показывает, что "бац бац и в продакшн" вполне жизнеспособная модель. Именно благодаря ей С и появился, и собственно по ней же и развивался.

Чем дальше в лес, тем толще партизаны. У тебя хоть один аргумент есть, кроме феерических заявлений ?
посмотри вокруг, вспомни детские болезни, почитай как он создавался и менялся с самого начала
язык, созданный как костылёк, на краткосрочную задачу

PS: считаешь что это не так?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498384
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)schiпропущено...


Чем дальше в лес, тем толще партизаны. У тебя хоть один аргумент есть, кроме феерических заявлений ?
посмотри вокруг, вспомни детские болезни, почитай как он создавался и менялся с самого начала
язык, созданный как костылёк, на краткосрочную задачу

PS: считаешь что это не так?

Я, с твоего позволения, Таненбаума процитирую, с мнением которого я согласен, так как имел дело с обоими описываемыми языками:

"Полезно взглянуть на два языка программирования - PL/1 и C. Язык PL/1 был
разработан корпорацией IBM в 60-ые годы, так как поддерживать одновременно
FORTRAN и COBOL и слушать при этом ворчание ученых о том, что Algol лучше,
чем FORTRAN и COBOL, вместе взятые, было невыносимо. Поэтому был создан комитет
для создания нового языка, удовлетворяющего запросам всех программистов: PL/1.
Этот язык обладал некоторыми чертами языка FORTRAN, некоторыми особенностями
языка COBOL и некоторыми свойствами языка Algol. Проект потерпел неудачу,
потому что ему недоставало единой концепции. Проект представлял собой лишь
набор свойств, конфликтующих друг с другом, к тому же язык PL/1 был слишком
громоздким и неуклюжим, чтобы программы на нем можно было эффективно
компилировать.
Теперь взглянем на язык С. Он был спроектирован всего одним человеком
(Деннисом Ритчи) для единственной цели (системного программирования). Успех
его был колоссален, и это не в последнюю очередь объяснялось тем, что Ритчи
знал, чего хотел и чего не хотел. В результате спустя десятилетия после своего
появления этот язык все еще широко распространен. Наличе четкого представления
о своих целях является решающим."
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498421
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

насчёт "неудачи" PL/1 - это скорее неудача платформы 360/370/....
а на чём там ещё писать было?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498517
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читал статью Дмитрия Донского (один из авторов шахматной программы "Каисса").
Его коллега в беседе о достоинствах и недостатках PL/I сказал, что писать на этом языке легко и приятно, если понимаешь, в какие машинные команды будут транслированы инструкции языка. Донской согласился, но не стал относить это свойство к достоинствам языка.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498543
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилschi,

насчёт "неудачи" PL/1 - это скорее неудача платформы 360/370/....
а на чём там ещё писать было?

Там можно было писать дофига на чем. Даже на Паскале и внезапно на С
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498556
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiИзопропилschi,

насчёт "неудачи" PL/1 - это скорее неудача платформы 360/370/....
а на чём там ещё писать было?

Там можно было писать дофига на чем. Даже на Паскале и внезапно на С
я не о студентах.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498558
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiТеперь взглянем на язык С. Он был спроектирован всего одним человеком
(Деннисом Ритчи) для единственной цели (системного программирования). Успех
его был колоссален, и это не в последнюю очередь объяснялось тем, что Ритчи
знал, чего хотел и чего не хотел. В результате спустя десятилетия после своего
появления этот язык все еще широко распространен. Наличе четкого представления
о своих целях является решающим."
Ога...., проектировал он..., видел цель..., лепил всё подряд лишь бы закрыть дыры в архитектуре.
Чистый "бац-бац и в продакшн"
То что он написал и то, что получилось в итоге - совершенно разные языки.
Я реализовывал спецификацию препроцессора - чудовищное издевательство над логикой.
Например, препроцессор Fasm-а в этом плане куда логичнее, стройнее и гибче при меньших трудозатратах.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498561
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlпропущено...
В математическом смысле, лямбда-исчисление это синтаксис описывающий манипулирование лямбда-терминами.
То что введено в С++, это всего-лишь попытка добавить "анонимную форму". Но лямбды там нету даже близко.
Ну так напишите, чего из настоящих лямбд не хватает в С++-ных лямбдах.
А то создается впечатление что вы с лямбдами в С++ знакомы также как с исключениями, на уровне слышал звон да не знаю где он )))Анатолий, давайте не будем опускаться до наездов.

В С++-ных лямбдах, мне не хватает самих лямбд.

Еще раз повторю: лямбда исчисление это синтаксис. Не больше и не меньше. Это даже не принцип обработки данных, это все-лишь принцип описания обработки данных.
Функционально, если ты хочешь использовать каррирования, альфа-бета-эта-редукцию и разные другие страшные слова, то их можно использовать на любом языке в котором есть понятие функции. Даже на столь не любимом вами Си, даже на FoxPro, sh, javascript и <подставь язык по вкусу>. На любом!

Но если ты хочешь писать на лямбдах, то и пиши на них:
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498578
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)schiТеперь взглянем на язык С. Он был спроектирован всего одним человеком
(Деннисом Ритчи) для единственной цели (системного программирования). Успех
его был колоссален, и это не в последнюю очередь объяснялось тем, что Ритчи
знал, чего хотел и чего не хотел. В результате спустя десятилетия после своего
появления этот язык все еще широко распространен. Наличе четкого представления
о своих целях является решающим."
Ога...., проектировал он..., видел цель..., лепил всё подряд лишь бы закрыть дыры в архитектуре.
Чистый "бац-бац и в продакшн"
То что он написал и то, что получилось в итоге - совершенно разные языки.
Я реализовывал спецификацию препроцессора - чудовищное издевательство над логикой.
Например, препроцессор Fasm-а в этом плане куда логичнее, стройнее и гибче при меньших трудозатратах.

Извините, профессор, а где можно с вашими трудами ознакомиться ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498587
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,
извиняй, парсерами и лексерами я занимаюсь чисто с коммерческой точки зрения

PS: я не профессор
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498602
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Мы тут всё-таки больше экспериментальные программисты, чем теоретические, поэтому яЯ бы предложил называть лямбдами те лямбды, которые есть в обычных лиспах, но не те, которые есть в мю-лиспе :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498618
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЕще раз повторю: лямбда исчисление это синтаксис. Не больше и не меньше. Это даже не принцип обработки данных, это все-лишь принцип описания обработки данных.
Функционально, если ты хочешь использовать каррирования, альфа-бета-эта-редукцию и разные другие страшные слова, то их можно использовать на любом языке в котором есть понятие функции. Даже на столь не любимом вами Си, даже на FoxPro, sh, javascript и <подставь язык по вкусу>. На любом!
Нет. Важна суть. Синтаксис вообще не важен.
Только для каких-нибудь нудных профессоров теоретиков.
В лямбдах с практической точки зрения важны лишь возможность хранить функцию в виде значения и возможность захвата свободных переменных из внешнего контекста.
Во многих перечисленных языках второй возможности встроенной в язык нет. Поэтому там лямбды возможны, но только при огромном объеме ручной работы по дублированию реализации лямбд по всему коду (я помню, вас это не смущает, но тех кто платит деньги обычно это смущает).
А в С++ поддержка лямбд встроена. И кстати ничем от той же хаскелевской не отличается, кроме того что умеет больше чем лямбды, потому что в отличие от хаскеля, С++ применяется не только для сферических коней в вакууме )))

White OwlНо если ты хочешь писать на лямбдах, то и пиши на них:

Если бы программирование равнялось математике, то не было бы языков программирования. Но программирование это нечто другое, поэтому математика и ее синтаксис там не работает. Но это не значит что некоторые принципы оттуда нельзя применять. Но для этого разумеется желательно обладать некоторой широтой взглядов
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498628
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО: лямбды это гениальное изобретение. Гениальность в том что вместо придумывания осмысленного имени функции/метода ты просто пишешь код, а имя придумывает компилятор. Главное что не надо придумывать имя, что занимает 90% времени.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498633
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деннис Ритчи просто писал высокоуровневый ассемблер для PDP-11
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498635
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИМХО: лямбды это гениальное изобретение. Гениальность в том что вместо придумывания осмысленного имени функции/метода ты просто пишешь код, а имя придумывает компилятор. Главное что не надо придумывать имя, что занимает 90% времени.Зря ты так думаешь.
Было бы мат.образование, понимал бы, что в такой записи как мат.доказательства, программы стали бы нечитабельными.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498652
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite OwlЕще раз повторю: лямбда исчисление это синтаксис. Не больше и не меньше. Это даже не принцип обработки данных, это все-лишь принцип описания обработки данных.
Функционально, если ты хочешь использовать каррирования, альфа-бета-эта-редукцию и разные другие страшные слова, то их можно использовать на любом языке в котором есть понятие функции. Даже на столь не любимом вами Си, даже на FoxPro, sh, javascript и <подставь язык по вкусу>. На любом!
Нет. Важна суть. Синтаксис вообще не важен.
Только для каких-нибудь нудных профессоров теоретиков.
В лямбдах с практической точки зрения важны лишь возможность хранить функцию в виде значения и возможность захвата свободных переменных из внешнего контекста.Что это за бред????
Как может быть не важен синтаксис, в синтаксической системе??? О какой сути вы говорите????

Anatoly MoskovskyНо для этого разумеется желательно обладать некоторой широтой взглядов Анатолий, вы меня очень сильно разочаровываете.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498657
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruWhite Owl,

Мы тут всё-таки больше экспериментальные программисты, чем теоретические, поэтому яЯ бы предложил называть лямбдами те лямбды, которые есть в обычных лиспах, но не те, которые есть в мю-лиспе :)Я бы не относил реализованное в лиспе к лямбдам, его возможности гораздо шире, чем возможности лямбда-исчислений (я имею ввиду возможность символьных вычислений).

Anatoly MoskovskyВ лямбдах с практической точки зрения важны лишь возможность хранить функцию в виде значения и возможность захвата свободных переменных из внешнего контекста.имхо "чистая ленивость", например, совсем не помешает.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498658
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧто это за бред????
Как может быть не важен синтаксис, в синтаксической системе??? О какой сути вы говорите????
Бред - это предлагать писать программы в математической нотации. Все остальное по сравнению - образец здравомыслия.
White OwlАнатолий, вы меня очень сильно разочаровываете.
Я расстроился )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498662
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)имхо "чистая ленивость", например, совсем не помешает.
А она есть (причем была задолго до лямбд)
Используйте паттерн Future<type>.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498664
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglDima TИМХО: лямбды это гениальное изобретение. Гениальность в том что вместо придумывания осмысленного имени функции/метода ты просто пишешь код, а имя придумывает компилятор. Главное что не надо придумывать имя, что занимает 90% времени.Зря ты так думаешь.
Было бы мат.образование, понимал бы, что в такой записи как мат.доказательства, программы стали бы нечитабельными.
ИМХО если не злоупотреблять, то читабельность наоборот повышается, т.к. вместо вызова одноразового метода ты вписываешь его код в место вызова.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498672
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут само по себе синтаксическое "сахарение" кода как в С++ не так важно.
Велика-ли невидаль - вписать тело по месту вызова. Это-ж не есть главное.
Будет ли call-by-refefence? Мы сможем уйти от расчета вложенных аргументов
если в этом нет необходимости? Мы сможет получать остаточные процедуры?

Не важно как называет этот сахар старина Бьярне. А важно другое.
Соответствует ли это современным критериям ФП или нет.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498675
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе важно как называет этот сахар старина Бьярне. А важно другое.
Соответствует ли это современным критериям ФП или нет.
Соответствует.
Просто есть люди, которые против того чтобы называть машину такси, если на ней нет шашечек )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы заметили... я обсуждаю только предмет дискуссии а не персоналии.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498688
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТут само по себе синтаксическое "сахарение" кода как в С++ не так важно.
Важно, в С++ не знаю, я про в C#. Например ConcurrentDictionary.GetOrAdd(TKey, Func<TKey, TValue>)
туда передается код, который создаст новый элемент, если не найдено значение TKey, но если найдено, то никакой код не отработает, т.е. все оптимально, не надо никаких Value по умолчанию передавать, т.е. создавать ненужные объекты, проверок не надо есть или нет TKey, надо просто передать код который создаст объект если это надо.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498694
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли вы заметили... я обсуждаю только предмет дискуссии а не персоналии.
Да и предмет тоже как-то не очень.))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498798
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskykealon(Ruslan)имхо "чистая ленивость", например, совсем не помешает.
А она есть (причем была задолго до лямбд)
Используйте паттерн Future<type>.
это ожидание асинхронной операции, а не "чистая ленивость" - её можно сделать только на уровне языка, как тернарный оператор, например.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498910
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)это ожидание асинхронной операции, а не "чистая ленивость" - её можно сделать только на уровне языка, как тернарный оператор, например.
C++ позволяет реализовать это на уровне библиотеки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39498970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Библиотечные возможности это кмк другой уровень. Не уровень языка.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499043
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБиблиотечные возможности это кмк другой уровень. Не уровень языка.
Не в С++, где есть шаблоны и перегрузка операторов. И лямбды конечно )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499145
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе важно как называет этот сахар старина Бьярне. А важно другое.
Соответствует ли это современным критериям ФП или нет.Было бы странно, если бы макроассемблер процессоров общего назначения, коим является C++, являлся полноценным функциональным языком.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499214
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonБиблиотечные возможности это кмк другой уровень. Не уровень языка.
Не в С++, где есть шаблоны и перегрузка операторов. И лямбды конечно )))
ИМХО для реализации "чистой ленивости", упоришься редукцию графов на макросах разбирать
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499277
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ИМХО для реализации "чистой ленивости", упоришься редукцию графов на макросах разбирать
Нет. Если немного подумать и разработать нотацию в пределах синтаксиса С++.
Например см.
https://bartoszmilewski.com/2014/04/21/getting-lazy-with-c/
https://github.com/jscheiny/Streams
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499298
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то вы все усложнили... редукция.. немцы какие-то.. конгрессы.

Eсть пример. На гипотетическом языке X. Фрагмент.

Код: php
1.
2.
logger.level = INFO;
logger.trace("Dump of object : " + obj.toJsonString());



Если этот язык - классический императивный (С/C++/Delphi/Java) то расчет выражения в скобках будет начат с вычисления метода ::toJSonString().
После этого отрабатывает метод trace который проверяет что он в режиме INFO и соотв ничего логать не надо,
но объем работ по ненужной сериализации состояния объекта уже выполнен.

В языке функциональном расчет метода ::toJsonString() не будет выполнен в силу ленивости вычислений и возврата
по ссылке результата. Согласитесь, ценное приобретение. Оптимизация из коробки.

Как эту ленивость можно реализовать для императивного (последовательного) языка список
которых я привел выше?

P.S. Ссылки, которые привел Анатолий я еще не читал.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499301
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Anatoly Moskovskyпропущено...

Не в С++, где есть шаблоны и перегрузка операторов. И лямбды конечно )))
ИМХО для реализации "чистой ленивости", упоришься редукцию графов на макросах разбиратьПример, в данном случае, а зачем она тут нужна?

Я могу представить себе пользу футурей в абстрактных примерах, но в реальных задачах....

Нужен пример, и тогда посмотреть
(я тут видел хаскель изнутри, когда читал спецку с--)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499302
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак-то вы все усложнили... редукция.. немцы какие-то.. конгрессы.

Eсть пример. На гипотетическом языке X. Фрагмент.

Код: php
1.
2.
logger.level = INFO;
logger.trace("Dump of object : " + obj.toJsonString());



Если этот язык - классический императивный (С/C++/Delphi/Java) то расчет выражения в скобках будет начат с вычисления метода ::toJSonString().
После этого отрабатывает метод trace который проверяет что он в режиме INFO и соотв ничего логать не надо,
но объем работ по ненужной сериализации состояния объекта уже выполнен.

В языке функциональном расчет метода ::toJsonString() не будет выполнен в силу ленивости вычислений и возврата
по ссылке результата. Согласитесь, ценное приобретение. Оптимизация из коробки.

Как эту ленивость можно реализовать для императивного (последовательного) языка список
которых я привел выше?

P.S. Ссылки, которые привел Анатолий я еще не читал.Бред.
Будет так.

IF logger.level > INFO
THEN
STRING += obj.toJsonString();
END;

фсе
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499303
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак эту ленивость можно реализовать для императивного (последовательного) языка список
которых я привел выше?

Как-то вы все усложнили. (C)

В данном конкретном примере ленивость вообще не нужна. Логирование по уровням без вычисления делается на макросах (внутри макроса проверяется уровень и все остальное передается в логгер).
Как это удобно делать для языков где нет макросов мне пофиг, я их не использую и других всегда отговариваю ))

Но кое какие идеи могу подкинуть.
Например в логгер передавать не значение а лямбду.
Код: sql
1.
logger.trace( () -> "Dump of object : " + obj.toJsonString());
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499304
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, вывод

пока вы пишете на простом языке - вы однозначно понимаете, во что в итоге ваши инструкции разворачиваются.

Иначе, вы пляшете с бубном, пытаясь угадать. (пляски начинаются конечно только когда наступила ЗИМА)

Пруф выше
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499308
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред.
Будет так.

IF logger.level > INFO
THEN
STRING += obj.toJsonString();
END;

фсе
Этот код у вас будет где? В API логгера? Или в вашем прикладном коде?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499311
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

ну посмотри в исходники логгера, да
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499312
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglmayton,

ну посмотри в исходники логгера, да
Зям. Я тебя не узнаю. Ну что за брюзжание? Куда мне посмотреть?

Я привел обычный (энтерпрайзный) паттерн. Логгирование с уровнями.
Ты предложил обернуть это проверкой. Я говорю - не вариант. Это конечно
вариант но не вариант. Ибо осточертело.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499316
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

да оно внутри обернуто.

я и говорю - не веришь, так сам посмотри )
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499318
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как это влияет на сериализацию obj?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499324
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

20696357
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499325
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блн, след.сообщение
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499326
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно. Не хочешь - как хочешь.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Код: sql
1.
logger.trace( () -> "Dump of object : " + obj.toJsonString());


Спасибо Анатолий. Я это проверию на 2-3 ЯП. А потом попробую придумать найти более комплексный пример lazy-comp.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499334
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНет. Работа java gc базируется на предположении что 99% аллокаций в eden space не переживут первую эпоху.
Они будут удалены. Оставшийся процент выживших копируются в survival. Поскольку очистка eden это лёгкая
Операция. По сути это обрушение счётчика. То мы считаем что здесь мы выиграли и дефрагментация eden нам не нужна.

Сам себя откомментарю.

1) Я вспомнил где я это читал. Это гипотеза имеет вполне себе конкретное название. Я цитирую документацию
C4: The Continuously Concurrent Compacting CollectorGenerational collectors are basedon the Weak generational hypothesis [18] i.e. most objects die young.


2) Я написал "обрушение" счетчка. Ох уж этот Android с его авто-заменой. Разумеется я имел в виду "обнуление".
Я хотел-было внутренне возмутиться и пофиксить опечатку .. но пускай будет так. Термин обрушение мне
уже нравится и я оставлю его как метафору которая описывает процесс очистки Эдемского сада (Eden space).
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499368
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЯ могу представить себе пользу футурей в абстрактных примерах, но в реальных задачах....Асинхронный I/O. Task / JQueryPromise и т. п. часто использовать удобнее чем "голые" лямбды с замыканиями.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499371
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglЯ могу представить себе пользу футурей в абстрактных примерах, но в реальных задачах...Симуляторы со взаимодействием, к примеру. Есть у вас большая сетка, бОльшая часть её узлов может считаться тупыми циклами, глядя только на ячейки с "соседними" номерами. Небольшая часть узлов зависит от ячеек, которые в пространстве являются "соседними", а вот в нумерации --- нет. К примеру, конец балки, описываемой ячейками с 0 по 100000 лежит на середине балки из ячеек 500000--600000, стык у нас "общего" вида. Это статически предопределённая неоднородность, её можно заранее учесть при построении плана вычислений. Но есть другая беда --- ваша четырёхугольная конструкция стоит на четырёх неидеальных опорах. Вернее, сначала её вес приходится на случайно оказавшуюся более высокой диагональ, плюс дисбаланс приходится на третью опору, а четвёртый угол висит в воздухе. Потом в зависимости от нагрузки и деформаций либо четвёртый угол просто ляжет на опору, либо "табуретка качнётся", либо всё останется, как было. Вкорячивать в каждый шаг вычислений "если табуретка качнётся, то", и все другие особые случаи --- убить производительность. Куда практичнее, скажем, попросить модель каждые десять тысяч шагов копировать себя в футурь-бэкап. Если задним числом ничего интересного не обнаружилось, то бэкап выбрасывается. Если обнаружилось, что среди этих 10000 шагов должен был произойти особый случай, то запускаем бэкап, попросив его делать свои бэкапы каждые 100 шагов, а потом медленно и печально прошагать нужный бэкап по отдельным шагам, вовремя отработать особый случай, и с этого момента вернуться к оптимистичному прогону по 10000 шагов от бэкапа до бэкапа.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499393
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly Moskovsky
Код: sql
1.
logger.trace( () -> "Dump of object : " + obj.toJsonString());


Спасибо Анатолий. Я это проверию на 2-3 ЯП. А потом попробую придумать найти более комплексный пример lazy-comp.Можно посмотреть на KnockoutJS: Computed Observables и How dependency tracking works .
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499454
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglkealon(Ruslan)пропущено...

ИМХО для реализации "чистой ленивости", упоришься редукцию графов на макросах разбиратьПример, в данном случае, а зачем она тут нужна?

Я могу представить себе пользу футурей в абстрактных примерах, но в реальных задачах....

Нужен пример, и тогда посмотреть
(я тут видел хаскель изнутри, когда читал спецку с--)
у меня был опыт написания вычислений для обработки массивов (инженерные расчёты у нефтяников)
обычная задача: на входе есть 10 и больше именованных массивов - части может не быть, части данных может в них не быть, на выходе должно получиться тоже какие-то массивы которые можно посчитать. В идеале ещё должна быть возможно посчитать только часть выходных
в общем виде расчёт можно описать вот так:
Код: python
1.
2.
3.
4.
5.
6.
7.
for i in Range 
  t1 = f1(i, x1,x2...);
  t2 = f1(i, x1,x2...);
  ...
  y1 = f1(i, x1,x2..., t1....);
  y2 = f1(i, x1,x2..., t1....);
  ...


в нём есть зависимости которые общие, есть зависимости которые привязаны к какой-то геопозиции, есть расчёты на основе лабораторных исследований для каких-то интервалов.
через год, сотня инженеров базовый код превращают в нечитаемую портянку на 10-ки тыщ строк в кучах модификаций (копипаст и правка - они так привыкли)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499477
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)зависимости которые общие, есть зависимости которые привязаны к какой-то геопозиции, есть расчёты на основе лабораторных исследований для каких-то интервалов.Если зависимости стабильны, и не зависят, скажем, от модельного времени, только от структуры вычислений, то проще всего написать препроцессор, который будет сортировать формулы по порядку вычисления, и всё на том. Заодно выругается, если где цикл вылезет :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499489
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу макросов в logger.

Не вариант. Т.к есть требование от заказчика. Уровни логгирования должны быть управляемые.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499556
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПо поводу макросов в logger.

Не вариант. Т.к есть требование от заказчика. Уровни логгирования должны быть управляемые.Ну и пусть себе управляются переменной или переменными. В чём вопрос-то?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499580
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rukealon(Ruslan)зависимости которые общие, есть зависимости которые привязаны к какой-то геопозиции, есть расчёты на основе лабораторных исследований для каких-то интервалов.Если зависимости стабильны, и не зависят, скажем, от модельного времени, только от структуры вычислений, то проще всего написать препроцессор, который будет сортировать формулы по порядку вычисления, и всё на том. Заодно выругается, если где цикл вылезет :)
ага, так и пришлось делать, только чуть хитрее, в итоге интерпретатор функционального языка получился
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499595
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)iv_an_ruпропущено...
Если зависимости стабильны, и не зависят, скажем, от модельного времени, только от структуры вычислений, то проще всего написать препроцессор, который будет сортировать формулы по порядку вычисления, и всё на том. Заодно выругается, если где цикл вылезет :)
ага, так и пришлось делать, только чуть хитрее, в итоге интерпретатор функционального языка получился...Эксель? 8:O
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499618
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rukealon(Ruslan)пропущено...

ага, так и пришлось делать, только чуть хитрее, в итоге интерпретатор функционального языка получился...Эксель? 8:O
нет, эксель конечно мощная программка, но такие объёмы и интерактивность не тянет, конкурирующий аналог . Собственно под него это решение тоже пойдёт.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499622
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)у меня был опыт написания вычислений для обработки массивов (инженерные расчёты у нефтяников)
обычная задача: на входе есть 10 и больше именованных массивов - части может не быть, части данных может в них не быть, на выходе должно получиться тоже какие-то массивы которые можно посчитать. В идеале ещё должна быть возможно посчитать только часть выходных
в общем виде расчёт можно описать вот так:
Код: python
1.
2.
3.
4.
5.
6.
7.
for i in Range 
  t1 = f1(i, x1,x2...);
  t2 = f1(i, x1,x2...);
  ...
  y1 = f1(i, x1,x2..., t1....);
  y2 = f1(i, x1,x2..., t1....);
  ...



в нём есть зависимости которые общие, есть зависимости которые привязаны к какой-то геопозиции, есть расчёты на основе лабораторных исследований для каких-то интервалов.
через год, сотня инженеров базовый код превращают в нечитаемую портянку на 10-ки тыщ строк в кучах модификаций (копипаст и правка - они так привыкли)
kealon(Ruslan)iv_an_ruпропущено...
Если зависимости стабильны, и не зависят, скажем, от модельного времени, только от структуры вычислений, то проще всего написать препроцессор, который будет сортировать формулы по порядку вычисления, и всё на том. Заодно выругается, если где цикл вылезет :)
ага, так и пришлось делать, только чуть хитрее, в итоге интерпретатор функционального языка получился

Здесь типичный пример over-engineering (в обоих предложенных решениях).
Если минуточку подумать, то что такое значение в функциональном языке и почему оно вычилсяется лениво? Потому что значений там нет, а все значения это функции вычисляющие эти значения.
Поэтому не надо придумывать никакой препроцессор или вообще другой язык.
Надо просто буквально заменить значения на лямбды их вычисляющие. Это автоматически построит зависимости средствами языка. А для редукции применяется например мемоизация и COW.
Ну и для неквалифицированных сотрудников написать пару макросов разворачивающих код вот в это все.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#define LAZY(x) [=]() { return x; }
#define EVAL(x) (x)()

for (auto i: range) {
  auto t1 = LAZY(f1(i, x1, x2...));
  auto t2 = LAZY(f1(i, x1,x2...));
  ...
  auto y1 = LAZY(f1(i, x1,x2..., EVAL(t1)....));
  auto y2 = LAZY(f1(i, x1,x2..., EVAL(t1)....));
  ...
  print (EVAL(y1)); // вычисляется только то от чего зависит y1
}
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499633
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНадо просто буквально заменить значения на лямбды их вычисляющие....если компилятор не сдохнет, и если вы вытерпите весь сопутсвующий оверхед времени исполнения.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499634
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя конечно в связи с тем что в С++ лямбд нет, то такой код невозможен
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499635
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru.если компилятор не сдохнет, и если вы вытерпите весь сопутсвующий оверхед времени исполнения.
Чего вдруг и то и другое? Лямбды это обычные функции с т.з. компилятора. Они не вносят дополнительного оверхеда по скорости.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499656
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyiv_an_ru.если компилятор не сдохнет, и если вы вытерпите весь сопутсвующий оверхед времени исполнения.
Чего вдруг и то и другое? Лямбды это обычные функции с т.з. компилятора. Они не вносят дополнительного оверхеда по скорости.Как только компилятор не сможет заинлайнить какую-нибудь лямбду, у вас будет лишний вызов функции, с расходом регистров и ломкой конвейеров. Самое то, что нужно для длинного числогрызного цикла.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499669
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruКак только компилятор не сможет заинлайнить какую-нибудь лямбду, у вас будет лишний вызов функции, с расходом регистров и ломкой конвейеров. Самое то, что нужно для длинного числогрызного цикла.
Нет. Потому вызовов там от силы несколько десятков. Никакой инлайн там не нужен. Это подтверждается тем что интерпретатор не тормозил )))
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499673
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyiv_an_ruКак только компилятор не сможет заинлайнить какую-нибудь лямбду, у вас будет лишний вызов функции, с расходом регистров и ломкой конвейеров. Самое то, что нужно для длинного числогрызного цикла.
Нет. Потому вызовов там от силы несколько десятков. Никакой инлайн там не нужен. Это подтверждается тем что интерпретатор не тормозил )))Предположу, что интерпретатор тормозил, просто авторы не знали, с чем сравнивать ;)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499674
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyХотя конечно в связи с тем что в С++ лямбд нет, то такой код невозможен
Я акцентировал внимание на том что в ФП функцию и лямбда наделяют рядом
свойств (чистота и частичная вычислимость) а в c++ это поскипали.

А эти свойства были для чего-то нужны...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ruAnatoly Moskovskyпропущено...

Нет. Потому вызовов там от силы несколько десятков. Никакой инлайн там не нужен. Это подтверждается тем что интерпретатор не тормозил )))Предположу, что интерпретатор тормозил, просто авторы не знали, с чем сравнивать ;)
Коллеги! А нет ли здесь борьбы противоположностей? Инлайнинг и lazy computing....
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499681
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonAnatoly MoskovskyХотя конечно в связи с тем что в С++ лямбд нет, то такой код невозможен
Я акцентировал внимание на том что в ФП функцию и лямбда наделяют рядом
свойств (чистота и частичная вычислимость) а в c++ это поскипали.

А эти свойства были для чего-то нужны...Чистота нужна для mix(), для автоматического параллелизма, и для прочего автоматического вкорячивания троек Хоара. В макроассемблере это всё как-то странно выглядело бы :)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499684
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ruпропущено...
Предположу, что интерпретатор тормозил, просто авторы не знали, с чем сравнивать ;)
Коллеги! А нет ли здесь борьбы противоположностей? Инлайнинг и lazy computing....Перефразируя старую молитву,
Боже, дай мне сил заинлайнить то, что можно заинлайнить, дай мне терпения заоткладывать то, что нельхзя заинлайнить, и дай мне мудрости, чтоб отличить первое от второго.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499692
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКоллеги! А нет ли здесь борьбы противоположностей? Инлайнинг и lazy computing....
Они ортогональны.
Если лямбды все находятся в одной функции, то они могут быть заинлайнены.
Просто в большинстве случаев это ни на что не влияет. Поскольку если речь про отложенные вычисления, значит то что могло быть заинлайнено настолько тяжелое что не имеет значения как его вызвать.
iv_an_ruЧистота нужна для mix(), для автоматического параллелизма, и для прочего автоматического вкорячивания троек Хоара. В макроассемблере это всё как-то странно выглядело бы :)
В моем примере вполне можно в макрос впихнуть параллельное выполнение не меняя юзерского кода.
Просто как я уже говорил выше, нужно приоткрыть глаза и увидеть очевидное.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499704
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ акцентировал внимание на том что в ФП функцию и лямбда наделяют рядом
свойств (чистота и частичная вычислимость) а в c++ это поскипали.
Поскипали только то, что реализуется средствами языка.
Посмотрите http://www.boost.org/doc/libs/1_64_0/libs/phoenix/doc/html/phoenix/starter_kit.html
Там все это есть.
Другое дело что в императивных языках почти все можно написать без всей этой математической суеты.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499841
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytoniv_an_ruпропущено...
Предположу, что интерпретатор тормозил, просто авторы не знали, с чем сравнивать ;)
Коллеги! А нет ли здесь борьбы противоположностей? Инлайнинг и lazy computing....
одно другому не мешает, ленивый код полностью раскладывается в равноценный императивный - другое дело, что его гораздо больше выходит
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39499846
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskymaytonЯ акцентировал внимание на том что в ФП функцию и лямбда наделяют рядом
свойств (чистота и частичная вычислимость) а в c++ это поскипали.
Поскипали только то, что реализуется средствами языка.
Посмотрите http://www.boost.org/doc/libs/1_64_0/libs/phoenix/doc/html/phoenix/starter_kit.html
Там все это есть.
Другое дело что в императивных языках почти все можно написать без всей этой математической суеты.
можно, но вот заметил что обычный инженерный состав декларативное описание понимает гораздо лучше императивного

По коду, интерпретатор был написан на питоне (строчек 200+), так же как и исходный код. Работать он стал быстрее почти в два раза по сравнению с исходным.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39500012
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Anatoly Moskovskyпропущено...

Поскипали только то, что реализуется средствами языка.
Посмотрите http://www.boost.org/doc/libs/1_64_0/libs/phoenix/doc/html/phoenix/starter_kit.html
Там все это есть.
Другое дело что в императивных языках почти все можно написать без всей этой математической суеты.
можно, но вот заметил что обычный инженерный состав декларативное описание понимает гораздо лучше императивного

По коду, интерпретатор был написан на питоне (строчек 200+), так же как и исходный код. Работать он стал быстрее почти в два раза по сравнению с исходным.Помнится, на таких задачах питон проигрывал ровно в 100 раз сишному коду.
Кстати, недавно опубликовали, как ускорили ПХП7 тоже в два раза относительно прежних версий. Теперь всего в 50 раз медленнее.

Не шутка.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39500025
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПомнится, на таких задачах питон проигрывал ровно в 100 раз сишному коду.
Кстати, недавно опубликовали, как ускорили ПХП7 тоже в два раза относительно прежних версий. Теперь всего в 50 раз медленнее.

Не шутка.Он всему проигрывает, вот только выбор не на моей стороне был, мне лишь пришлось с этой прогой жить.
Причём, больше всего тормозит в ней не расчёт, а пересылка данных приложение<-> питон и постоянные апдейты гуи, на каждый чих в данных, которые они так и не пофиксили.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39502234
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлынули воспоминания.

Наши эксперименты с рендерингом 3Д-графики на С++/Python/PyPy 18150763

Уж 2 года прошло. Мдя. Здесь Змей проиграл С++ где-то 1000-кратно. Видимо динамическая типизация
сожгла все полезные мегафлопы.

Пай-пай (PyPy) чуть лучше. Где-то в 30 раз отстал от С++. Но все равно в хвосте от трендовых Go/C#
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39502262
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

там не только динамическая типизация, там ещё и "динамические переменные" (чтение\запись по имени из\в словарь)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39504976
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)azsxМеня просто также удивило, что критичные к времени приложения пишут не на С, я ответа не знаю, хочу спросить.
критичные к времени и надёжности приложения пишут не на С

всякие контроллёры на ардуино это ширпотреб, от которых ничего критичного не зависит
более того там все гарантии нулевые

представили, например, как боинг запустить с такими гарантиями?

пишут как раз и на C в т.ч. (и сейчас даже в основном). из специализированных языков для авионики вымерли
практически все (что не удивительно), кроме SPARK (ADA).

ПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиков

на C можно писать надежный код, тем более есть всякие статические чекеры, которые проверяют код на соотвествие MISRA (Coverity, ИМНИП, такое может)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39504985
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchkealon(Ruslan)пропущено...

критичные к времени и надёжности приложения пишут не на С

всякие контроллёры на ардуино это ширпотреб, от которых ничего критичного не зависит
более того там все гарантии нулевые

представили, например, как боинг запустить с такими гарантиями?

пишут как раз и на C в т.ч. (и сейчас даже в основном). из специализированных языков для авионики вымерли
практически все (что не удивительно), кроме SPARK (ADA).

ПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиков

на C можно писать надежный код, тем более есть всякие статические чекеры, которые проверяют код на соотвествие MISRA (Coverity, ИМНИП, такое может)
главное в этом "пытаются"
пока это всё проекты в глубокой бетте, кроме того, си тоже на месте не стоит, но это уже не тот си - Иван уже про один вариант говорил
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39504990
Фотография netfrog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиков
Как имеющего отношение к обучению сотрудников, понимаю, что никто не хочет возится с обучением сотрудников. Если с этим заморочится то у предприятия будут любые специалисты, какие ему надо.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505039
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netfrogdbpatchПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиков
Как имеющего отношение к обучению сотрудников, понимаю, что никто не хочет возится с обучением сотрудников. Если с этим заморочится то у предприятия будут любые специалисты, какие ему надо.

это противоречит современным подходам рынка труда - никто не учит кого-то, все берут уже готовых
синиьоров-помидоров с годами экспририенса.

для того, чтоб стать экспертом в чем-то (не важно в чем), нужно примерно 5 лет, никак не меньше.

т.е. получается нужно взять экспертов в Java или C/C++, потом им платить пять лет условно среднюю ЗП для США (плюс 2.75x - налоги, офис, соцобеспечение), т.е. грубо говоря - примерно $2M на человека (за пять лет), чтоб он в итоге сказал - "я устал, мне не интересна эта ваша ADA, я ухожу?", даже не написав ни одной строчки боевого кода?

а брать в авионику джуниоров.... ну вы поняли
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505096
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиковВ топку Аду. Бедная экосистема деляет программирование на языке ненадёжным просто в силу невозможности ни людей найти, ни тем более популярные библиотеки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505126
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatch, iv_an_ru
Господа, что у нас, что в америке, да и в любой нормальной стране на оборонку "делают" людей под себя, интуристов туда не берут,
у них контракты на "много лет", со всеми полагающимися военным плюшками и кнутами. И сойти вот так просто - не получится.
Н-р, в штатах надо быть полным сноуденом, что-бы слить такое место работы.

iv_an_rudbpatchПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиковВ топку Аду. Бедная экосистема деляет программирование на языке ненадёжным просто в силу невозможности ни людей найти, ни тем более популярные библиотеки.Фантазировать на чём писать удел коммерческих писателей, военные будут писать на том, что в приказе укажут. Отсутствие библиотек ни разу не аргумент.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505236
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Ехидно напомню, что сам C++ появился в AT&T, которая была увязана с правительством похлеще любого оборонского заказчика. И что интересно, у нашего директора, на тот момент недавнего иммигранта из Англии, а вообще-то стопроцентного кенийца, кабинет был по соседству с кабинетом Страуструпа, то есть в самом логове --- и ничего.

Это в эксплуатации всё мрачно с допусками и т.п., а в разработке всё же попроще.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505318
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_ru,
ну что сказать, прямо по Гансу Христиану
так же можно добавить и интернет, и РБД - тоже из оборонки вышли, подкинули "маленько" на "авось что выйдет"
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505319
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вся вычислительная техника начиная с работ Тьюринга пахала на военку.

И давайте покончим с этим. Нудно ведь, капец!
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505362
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВся вычислительная техника начиная с работ Тьюринга пахала на военку.

И давайте покончим с этим. Нудно ведь, капец!
Любое надёжное ПО будет выглядеть нудным как и процесс его написания
Херак-херак и в продакшн - куда веселее
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505372
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonВся вычислительная техника начиная с работ Тьюринга пахала на военку.

И давайте покончим с этим. Нудно ведь, капец!
Любое надёжное ПО будет выглядеть нудным как и процесс его написания
Херак-херак и в продакшн - куда веселееЛюбой серьёзный проект естественным образом разбивается на три этапа --- самый трудный, самый длинный и самый нудный.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505569
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchПО для F35 правда пытаются писать на C++, мотивируя тем, что на рынке невозможно найти ADA разработчиковВ топку Аду. Бедная экосистема деляет программирование на языке ненадёжным просто в силу невозможности ни людей найти, ни тем более популярные библиотеки.

ты однако странный. какие еще в .....у популярные библиотеки? в авионике, как и в любой realtime отрасли вроде АСУТП (или как он там по подному называется, промышленная автоматика?) там вообще все свое узкоспециализированное, там эти ваши бусты
нужны как зайцу стоп сигнал.

и дело не в каком-то там синтаксисе языка, дело в наличии опыта работы именно в данной отрасли, понимании и умении подходов(паттернах), и предмета (физики процессов).

как-то глупо прийти к суровым мужикам, которые делают управление атомными электростанциями, и начать им втюхивать
вчера прочитанное откровение про какой очердной MVС/MVVM или блин про Promises на лямбда трахимонадах - тебя, мягко говоря, не поймут.

P.S. В то, что ADA как язык убога - согласен на все 146%, я в бытность ее всю просмотрел - не возбудила ни разу, по библиотекам SPARK же сильно мало информации в публичном доступе.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505616
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchiv_an_ruпропущено...
В топку Аду. Бедная экосистема деляет программирование на языке ненадёжным просто в силу невозможности ни людей найти, ни тем более популярные библиотеки.

ты однако странный. какие еще в .....у популярные библиотеки?Инструментальные, само собой. Чтобы покрыть тестами не просто хорошо, а хорошо с гарантией, чтобы уложиться во временные лимиты не просто с запасом, а с подтверждённым статанализом запасом, чтобы не изобретать свои тройки Хоара и инварианты циклов на каждую сортировку пузырьком и набивать их с опечатками, а использовать готовые. Ещё важнее --- чтобы можно было добавить инварианты времени существования объекта и т.д. Ничего из этого в конечном итоге не попадёт на борт, но без этого на борт могут попасть дополнительные ошибки.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505648
Фотография netfrog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно написать код на высокоуровневом средстве а потом перегнать в С. Затем в программу для

Я думаю, по скорости оно будет не хуже написанного вручную.

Неправильно написанный код на ассемблере может легко подсадить систему..
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505674
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchпропущено...


ты однако странный. какие еще в .....у популярные библиотеки?Инструментальные, само собой. Чтобы покрыть тестами не просто хорошо, а хорошо с гарантией, чтобы уложиться во временные лимиты не просто с запасом, а с подтверждённым статанализом запасом, чтобы не изобретать свои тройки Хоара и инварианты циклов на каждую сортировку пузырьком и набивать их с опечатками, а использовать готовые. Ещё важнее --- чтобы можно было добавить инварианты времени существования объекта и т.д. Ничего из этого в конечном итоге не попадёт на борт, но без этого на борт могут попасть дополнительные ошибки.

все это в SPARK/ADA есть. http://www.adacore.com/sparkpro/
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505766
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchiv_an_ruпропущено...
Инструментальные, само собой. Чтобы покрыть тестами не просто хорошо, а хорошо с гарантией, чтобы уложиться во временные лимиты не просто с запасом, а с подтверждённым статанализом запасом, чтобы не изобретать свои тройки Хоара и инварианты циклов на каждую сортировку пузырьком и набивать их с опечатками, а использовать готовые. Ещё важнее --- чтобы можно было добавить инварианты времени существования объекта и т.д. Ничего из этого в конечном итоге не попадёт на борт, но без этого на борт могут попасть дополнительные ошибки.

все это в SPARK/ADA есть. http://www.adacore.com/sparkpro/ "Всего" быть не может, потому что хорошему пруверу для хороших результатов надо скормить не только аннотированную программу, а ещё и аксиоматику предметной области, иначе найдётся мало чего интереснее неинициализированных переменных.
А во-вторых, кроме статического анализа есть ещё куча технологий, которые ничего не дадут в плане бумаг для соответствия стандартам, но баги ловят ;)
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505782
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchпропущено...


все это в SPARK/ADA есть. http://www.adacore.com/sparkpro/ "Всего" быть не может, потому что хорошему пруверу для хороших результатов надо скормить не только аннотированную программу, а ещё и аксиоматику предметной области , иначе найдётся мало чего интереснее неинициализированных переменных.
А во-вторых, кроме статического анализа есть ещё куча технологий, которые ничего не дадут в плане бумаг для соответствия стандартам, но баги ловят ;)

ой да ладно, и что такое для этого есть в C++ ?
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505851
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbpatchiv_an_ruпропущено...
"Всего" быть не может, потому что хорошему пруверу для хороших результатов надо скормить не только аннотированную программу, а ещё и аксиоматику предметной области , иначе найдётся мало чего интереснее неинициализированных переменных.
А во-вторых, кроме статического анализа есть ещё куча технологий, которые ничего не дадут в плане бумаг для соответствия стандартам, но баги ловят ;)

ой да ладно, и что такое для этого есть в C++ ?Если сейчас влезу-таки в пермский ПД-35, то расскажу подробно. Просто я знаю людей, которые умеют в целях наживы разрабатывать эти аксиоматики, но не знаю, кто как дальше их использует.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39505978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилmaytonВся вычислительная техника начиная с работ Тьюринга пахала на военку.

И давайте покончим с этим. Нудно ведь, капец!
Любое надёжное ПО будет выглядеть нудным как и процесс его написания
Херак-херак и в продакшн - куда веселее
Да я не про разработку ПО. А про нудность наших "военных" кодеров...

От их пафоса уже некуда бежать...
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39506244
dbpatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iv_an_rudbpatchпропущено...


ой да ладно, и что такое для этого есть в C++ ?Если сейчас влезу-таки в пермский ПД-35, то расскажу подробно. Просто я знаю людей, которые умеют в целях наживы разрабатывать эти аксиоматики, но не знаю, кто как дальше их использует.

господи, да кому это интересно? есть какая-то проприетарная самописка в прериях замкадья, и что? к чему это вообще было упомянуто?

подобные вариации экспертных систем можно исполнить на чем угодно, да хоть на QBasic, это в принципе не интересно в аспекте обсуждения применимости языков и сред.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39668020
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот очень хорошо написано by Allen Holub:
(коротко: C++ для больших ООП-проектов, где требуется сопровождение (без хорошего ООП сопровождение = АД))
автор 90.1. Если проект не ориетирован на объекты, то используйте С.
Позвольте мне начать, сказав, что нет абсолютно ничего дурного в хорошо выполненном структурном проектировании. Как то так получилось, что я предпочитаю объектно-ориентированный (ОО) подход, ибо мне кажется, что я мыслю ОО способом, но было бы самонадеянным назвать ОО проектирование "лучшим". Я верю, что ОО подход дает вам легче сопровождаемый код, если программа большая.
Выгода менее явна в случае программ меньшего размера, потому что объектная ориентация обычно добавляет сложность на уровне приложения. (Главная выгода ОО заключается в лучшем сопровождении за счет абстракции данных, а не сокращения сложности).

С++ особенно не выносит небрежного проектирования. Мой опыт говорит, что программы на С++, которые не придерживаются объектно-ориентированного подхода, почти несопровождаемы, соединяя все худшие свойства структурного и объектно-ориентированного проектов и не давая каких-либо выгод как от того, так и от другого. Со мной не проходит такой аргумент, что можно использовать С++ как "улучшенный" С. Для того, чтобы это было правдой, этот язык слишком сложный - кривая обучения слишком крутая. Если вы не используете преимущества объектно-ориентированных свойств этого языка, то в его использовании мало смысла. Некорректное использование объектно-ориентированных свойств лишь увеличит число проблем.

С++ - язык трудный как для изучения, так и для использования. При написании программ на С++ столько тонкостей, что даже опытные программисты временами их забывают. Кроме того, даже простой поиск достаточного количества программистов на С++, чтобы писать, и значительно меньшего, чтобы сопровождать ваш код - трудный процесс. Вы вводите себя в заблуждение, если верите, что С++ может быть использован безыскусно. Слишком просто для неопытного программиста сделать что-нибудь неправильно и даже не знать об этом, способствуя бесполезным затратам времени на выслеживание ошибки, которая и так хорошо видна. Многие ошибки такого типа даже проникают необнаруженными через этап тестирования и попадают в конечный продукт, делая сопровождение сомнительным предприятием.

Зачем же вообще использовать С++? Ответ состоит в том, что должным образом использованный С++ дает вам значительные выгоды в сопровождении. Вы можете делать значительные изменения в поведении программы (типа перевода всей программы с английского языка на японский или переноса в другую операционную среду) при помощи незначительных изменений в исходном коде, ограниченных малым уголком этого кода. Подобные изменения в структурной системе обычно потребуют модификации поистине каждой функции в программе.
ВЕРЕВКА ДОСТАТОЧНОЙ ДЛИНЫ, ЧТОБЫ ВЫСТРЕЛИТЬ СЕБЕ В НОГУ
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39668337
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereПреимущества на C: думаю, скорость и большая универсальность (C понимают и некоторые другие языки).
Преимущества на C++: больше всяких новинок (начиная с C++11), больше манёвров для изменений.
Кто что думает?

Я возможно уже писал...
Я думаю, ты просто не разбираешься в программировании на этих двух родственных языках...

У С++ большая строгость и большая выразительность (это значит, возможность написать больше меньшим кол-вом строк кода).
У чистого С нет сейчас никаких преимуществ перед С++, при условии что на целевой платформе есть компиляторы обоих языков.

Так что однозначно лучше писать код на С++.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39668788
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivУ С++ большая строгость и большая выразительность (это значит, возможность написать больше меньшим кол-вом строк кода).
Что достигается заметанием тонн говнотемплейтов с глаз долой в стандартную библиотеку.
...
Рейтинг: 0 / 0
На чём лучше писать код при одинаковом количестве строк: на C или на C++?
    #39669757
Фотография iv_an_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Наличие стандартизованных говнотемплейтов --- уже плюс, само по себе. А то наблюдал недавно у клиента самописные хэш-таблицы, в которых всё было замечательно, только в одном месте был пропущен '&', из-за чего все вносимые ключи получали один и тот же хэш. Оно, в принципе, даже работало, только "чуть-чуть" медленнее, чем ожидал автор :)
...
Рейтинг: 0 / 0
474 сообщений из 474, показаны все 19 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / На чём лучше писать код при одинаковом количестве строк: на C или на C++?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]