Здравствуйте, Sorantis, Вы писали:
S>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?
ну например std::auto_ptr.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Здравствуйте, catBasilio, Вы писали:
S>>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?
B>ну например std::auto_ptr.
Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, criosray, Вы писали:
C>Э-э, классы и объекты в процедурных языках? Шаблоны в Delphi language или VB6?..
А зачем в процедурных то?
К тому же ты говорил об абстракциях которые можно выразить средствами языка, а не о фичах языка.
Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями (только не надо бустовских уродств, там замыкания не поддерживаются) и паттерн-матчинг.
ЗЫ
Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь! Единственное преимущество С++ — это возможность низкоуровневых оптимизаций и относительная дешевизна имеющихся абстракций. Это позволяет, при желании, не хилых усилиях и отсутствии алгоритмических противопоказаний, написать программу обладающую высокой производительностью. Больше преимуществ у этого отсталого языка нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, gandjustas, Вы писали:
G>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?
Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.
Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...
Единственное что в управляемых языках лучше — это невозможность такой ситуации:
std::vector<MyClass*> array;
array.push_back(new MyClass());
array.push_back(new MyClass());
array.push_back(new MyClass());
vector.clear()
или еще
class CopyableClass
{
public:
CopyableClass() : Value(new Object()){}
~CopyableClass() { delete Value;}
private:
Object* Value;
}
но подобные ситуации замечательно лечатся с использованием std::auto_ptr и std::shared_ptr.
и никакие мемори лики не страшны.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Здравствуйте, VladD2, Вы писали:
VD>Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.
Так... Попкорном я уже запасся.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, catBasilio, Вы писали:
B>Здравствуйте, gandjustas, Вы писали:
G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?
B> Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку. B>Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...
Но в Сишарпе так же можно использовать сборщик мусора ручками, если не доверяешь автоматической сборке.
Здравствуйте, VladD2, Вы писали:
VD>Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь!
угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект, или ммм... такую "фичу" как множественное наследование, или скажем, статический полиморфизм, слышал о таком?
неиспользуемые объекты будут держаться до заврешения программы.
И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.
P.S. это высосанный из пальца пример, но проблему он показывает вполне.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Здравствуйте, Хвост, Вы писали:
Х>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
Начиная со 2-й версии С++ нервно курит в сторонке.
А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.
Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,
Это чушь а не фича.
Х>или ммм... такую "фичу" как множественное наследование,
Когда есть нормальные средства композиции кода (особенно такие как миксины или макросы) оно не нужно. Оно скорее проблема нежели достоинство.
Х>или скажем, статический полиморфизм, слышал о таком?
О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.
В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали: VD>Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями
лично я заменяю их на императивный цикл for
сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Хвост, Вы писали:
Х>>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
VD>Начиная со 2-й версии С++ нервно курит в сторонке. VD>А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.
Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Здравствуйте, VladD2, Вы писали: VD>О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.
а погуглить? первая ссылка по запросу static polymorphism даёт представление что ето такое и как ето пользовать.
VD>В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)
ето твоему немерлю ничего не поможет, мертворождённый проект.
Здравствуйте, catBasilio, Вы писали:
B>Здравствуйте, gandjustas, Вы писали:
G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?
B> Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.
Это еще раз докузывает ущербность C++, этот язык не может работать со собрщиком мусора.
B>Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...
Этот "кто-то" умрет, если на него нету ссылок, вместе со всеми объектами, на которые он сам держит ссылки.
И это назвается не лик, а невнимательность программиста.
B>Единственное что в управляемых языках лучше — это невозможность такой ситуации: B>
//говнокод опущен
B>
Это далеко не единственное.
B>но подобные ситуации замечательно лечатся с использованием std::auto_ptr и std::shared_ptr. B>и никакие мемори лики не страшны.
С std::auto_ptr гемора не меньше, чем с указателями. Вместо ликов постоянно получаются AV
А std::shared_ptr далеко не бесплатен.
ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.
Здравствуйте, VladD2, Вы писали:
ГВ>>Так... Попкорном я уже запасся. VD>Тогда давай делись!
Дык!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, gandjustas, Вы писали:
G>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.
"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
Здравствуйте, Хвост, Вы писали:
Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект
Всю константность в С++ можно с успехом обмануть, кроме того константность не является абстракцией
Х>или ммм... такую "фичу" как множественное наследование
Ага, еще скажи что виртуальный базовый класс — нереальная фича
Х>или скажем, статический полиморфизм, слышал о таком?
Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
Здравствуйте, Хвост, Вы писали:
Х>Здравствуйте, gandjustas, Вы писали:
G>>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки. Х>"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
Ага, с такими же "высокоуровневыми абстракциями". Заканчивай, не смешно уже.
Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.
И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.