LINUX.ORG.RU

Замену C++ делают неправильно

 


0

3

Уже не первый год человечество пытается избавиться от переусложненности C++ и массы его исторического наследия со старыми костылями. Появляются полумертвые D, Rust. Почему бы не пойти более простым путем и просто форкнуть нынешний стандарт C++ ? Выпилить оттуда весь груз обратной совместимости, странности и неочевидности, и естественно, добавить улучшательств. Преимущества подхода: а). Программистам в целом не придется переучиваться, библиотеки тоже портировать легче. б). Готовые уже компиляторы, из которых понадобится в большей степени выпилить всякую хрень (можно даже сделать флаг типа --no-legacy-compat). Так где же оно?



Последнее исправление: CatsCantFly (всего исправлений: 1)
Ответ на: комментарий от anonymous

Т.е. взять D вместо С++ - это норм, а взять еще и стандартную библиотеку - не норм?

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

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

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

Если потомки ссылаются на родителей - да, получаем. Но это не «любая древовидная» и не «любой граф».

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

С чего это вдруг? На корень то никто не ссылается.

wolph ★★
()
Ответ на: комментарий от Dudraug

И этого говорит человек, который жалуется на совместимость с С в С++. Да у вас шизофрения.

anonymous
()
Ответ на: комментарий от anonymous

Как минимум еще одной проблемой shared_ptr является хранение счетчика в отдельном аллоцируемом блоке памяти.

Я предложил решение, выделять в начале работы программы статический сегмент памяти (контекст программы). А наш «новый указатель» будет ссылаться и на память объекта и хранить смещение в контексте, где хранится счетчик.

Dudraug ★★★★★
()
Ответ на: комментарий от wolph

Стиль D намного проще и короче. Если писать «максимально в стиле плюсов» - зачем тогда переходить?

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

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

И этого говорит человек, который жалуется на совместимость с С в С++. Да у вас шизофрения.

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

Проблема не в совместимости с «неким языком», проблема именно в совместимости конкретно с Си=)

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

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

Ааа, ну да. Но это не «любое дерево» же.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

В С# есть указатели на память, именно указатели, не ссылки

anonymous
()
Ответ на: комментарий от anonymous

#ifdef так не сделать, например

Ну это можно оставить. А вот некоторые люди частенько целые куски кода запихивают в дефайны (ну шоб не копипастить же!). Это похуже констант через дефаны и ifdef, это вообще трындец.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

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

anonymous
()
Ответ на: комментарий от Dudraug

Чтобы выделять память и не задумываться о delete?

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

Ну и если хочется «не задумываться» о работе с памятью, то лучше взять что-то другое, а не С++, пусть и «улучшенный».

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Чего то серьезного - нет. Осваиваю, хочу обмазаться Vibe.d

wolph ★★
()
Ответ на: комментарий от anonymous

В том же расте ни одного нормально парсера xml так и нет, так как или unsafe

Почему unsafe делает парсер ненормальным?

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Как минимум еще одной проблемой shared_ptr является хранение счетчика в отдельном аллоцируемом блоке памяти.

make_shared, пусть это и не требуется в стандарте, но (как правило) использует один кусок памяти.

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

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

В моем случае скорее в отладке.

Dudraug ★★★★★
()
Ответ на: комментарий от DarkEld3r

Дык, в твоём решении точно так же будет два блока памяти.

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

Dudraug ★★★★★
()
Последнее исправление: Dudraug (всего исправлений: 1)
Ответ на: комментарий от DarkEld3r

Ну и если хочется «не задумываться» о работе с памятью, то лучше взять что-то другое, а не С++, пусть и «улучшенный».

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

Dudraug ★★★★★
()
Ответ на: комментарий от DarkEld3r

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

anonymous
()
Ответ на: комментарий от Dudraug

А вот некоторые люди частенько целые куски кода запихивают в дефайны (ну шоб не копипастить же!)

Ну да, запихивают. Но если это просто запретить, то лучше не станет - надо дать замену. А это несколько сложнее чем запрещать.

DarkEld3r ★★★★★
()
Ответ на: комментарий от Dudraug

не будет издержек на выделение/удаление памяти в куче.

Речь о блоке памяти для подсчёта ссылок? Ну используй make_shared. Сам объект всё равно надо где-то хранить.

Ну и на запуск различных копирующих конструкторов. и всякого такого.

А их-то почему не будет?

DarkEld3r ★★★★★
()
Ответ на: комментарий от Dudraug

А голые только если точно надо.

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

anonymous
()
Ответ на: комментарий от Dudraug

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

Умные указатели - это не значит, что о памяти думать не надо. Каждый раз «приходится думать» о том можно ли создать объект на стеке, будет ли у него один владелец или много, возможно ли циклические ссылки и т.д.

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

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

Во первых, не для всех структур данных нужен unsafe. Во вторых, я надеюсь код не целиком из этих «структур данных» состоит? Интерфейс у них вполне может быть безопасным. Ну и в конце-концов, даже в unsafe-блоках раст проверяет больше вещей.

DarkEld3r ★★★★★
()
Ответ на: комментарий от kawaii_neko

Какие петли в ссылках - там при включенном ARC нельзя вручную память освобождать. Или ты намекаешь, что у них память течёт из-за этого ARC? Так там профайлеры есть, которые и не снились под Линуксом - бери ищи где накосячил и правь баги - ARC прекрасно отрабатывает. В питоне ARC простой как пень - там может быть всё что угодно, если студенты сядут писать. Между прочим, питон один из лучших «скриптовых» языков по потреблению памяти.

menangen ★★★★★
()
Ответ на: комментарий от Dudraug

Но я бы хотел видеть в НОВОМ языке (а именно это здесь обсуждается) четкое разделение на pod/не под.

А зачем в си++ без си POD, который, по сути, является структурой, которую можно безболезненно использовать в си?

vzzo ★★★
()
Ответ на: комментарий от I-Love-Microsoft

Ну, я с тобой относительно согласен, просто ТС хочет D, но чтобы он был популярный и с хорошей IDE, и чтобы позеры там были :) писали и коммитили толпами всякие хипстеры, появлялись новые движки на этом языке и т.п. Это все хотят. Но сейчас настало время новых языков, которые нужно поддерживать, вон гугл с эплом деньги вливают в 2 языка - и только они и выстрелили. Это печальная ситуация, ведь, есть ещё неплохие поделия, которые должны развиваться, слишком много трудов в них вложено.

menangen ★★★★★
()
Ответ на: комментарий от peregrine

нет, нельзя. в винде кругом i386 в нативкоде, а С# умеет в Jit, с другой стороны — на линуксе apt в нескольких вариантах + есть вообще source-based дистрибутивы. поэтому, картина на онтопике у плюсов в среднем лучше.

next_time ★★★★★
()
Ответ на: комментарий от tailgunner

Чтобы задавать форматы данных в памяти.

POD не задаёт формат данных в памяти: есть платформоспецифичные размеры и выравнивания.

Тогда уж надо packed-структуру, в которой можно использовать только (u|)int(8|16|32|64|128)_t.

vzzo ★★★
()
Последнее исправление: vzzo (всего исправлений: 1)
Ответ на: комментарий от vzzo

POD не задаёт формат данных в памяти

Отлично задает.

есть платформоспецифичные размеры и выравнивания.

Не противоречит.

tailgunner ★★★★★
()
Ответ на: комментарий от DarkEld3r

Ну да, запихивают. Но если это просто запретить, то лучше не станет - надо дать замену. А это несколько сложнее чем запрещать.

Шаблоны же

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

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

В с++ это так, но в сферическом с++ без си не обязательно

Dudraug ★★★★★
()
Ответ на: комментарий от kawaii_neko

И как его прикрутить к Clion, например? Он может в режиме реального времени показывать сколько жрёт прога/отдельные thread'ы? Я с ним не сталкивался, но мне он показался несколько чудоковатым по докам. Тупо из терминала запускать и смотреть трейсы?

menangen ★★★★★
()
Ответ на: комментарий от tailgunner

С точки зрения чтения блобов/гифок — бесполезно.

есть платформоспецифичные размеры и выравнивания.

Не противоречит.

Непривязанность к Си и платформозависимость — противоречит.

vzzo ★★★
()
Ответ на: комментарий от vzzo

С точки зрения чтения блобов/гифок — бесполезно.

Щито?

Непривязанность к Си и платформозависимость — противоречит.

Вроде бы вопрос был в том, зачем нужны POD в Си++.

tailgunner ★★★★★
()
Ответ на: комментарий от menangen

Clion
режим реального времени

Рассмешил, содомит!

Я с ним не сталкивался

Ну если ты привык «прогать мышкой», то да, будет тяжко, ибо дело обстоит примерно так:

Тупо из терминала запускать и смотреть трейсы

Но, конечно, не настолько хардкорно, как, например, у gperf

kawaii_neko ★★★★
()

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

anonymous
()
Ответ на: комментарий от anonymous

Был бы он свободным и кроссплатформенным, без анальной протекции МС - то так и было бы, язык то вроде отличный.

wolph ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.