LINUX.ORG.RU

Гражданин не понимает параллельного программирования. И он не один такой, тысячи их.

кто осилит перевод?

За каким хером?

anonymous
()

перевод

испорченный телефон не нужен

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

объясни мне параллельное программирование, я тоже не понимаю при чем здесь оно

nokachi ★
()

The compiler and the runtime have to always assume the worst — not only that any pointer can alias any other pointer but that a memory address can be stored as an integer or its lower bits could be used as bitfields

4.2

man strict aliasing

Manhunt ★★★★★
()

Imperative languages offer no protection against data races — maybe with the exception of D.

Такое чувство, что статью писал анонимный ЛОР-овский аналитик.

Manhunt ★★★★★
()

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

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

C++ давно пора объявить deprecated

fixed

anonymous
()

куда идёт Си++ в своём развитии

Будучи говном идет совершенно закономерным образом на говно.

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

Так и запишем: пока ты надеешься на раст, на с++ пишут ядра.

// я сам не люблю писать на с++ и не пишу практически.

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

Зря они это делают. Придется переписать еще раз на человеческом языке.

geometer ★
()

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

anonymous
()

Спроси у Страустропа.

ну и по листай его свежие этого года редакции книг по С++.

у него вполне чётко приписанно цели существования и эволюции сабжа.

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

Без этой совместимости С++ никому и даром не нужен.

Создать биндинги к сишным библиотекам элементарно и возможно наверно почти для любого языка программирования. А совместимость на уровне исходных текстов только приводит к костылям в синтаксисе C++. При чем эта совместимость все равно неполная.

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

На рутрекере есть chm на piratebay pdf и epub были

SergikXP ★
() автор топика

по ссылке не ходил как Ъ, но осуждаю

С++ не хватает возможности объявить parent класс «невидимым» для child. очень мешает делать callbackи. еще мне лично мешает невозможность вставлять подсказки для компилятора, например

std::list<class X> lx;
...
for(X& i : lx)
{
    USE_FEATURE_X {
        i->function();
    };
}
я тут проц придумал, если бабла за него в сколько не дадут, сделаю опенсорсным. и с этим процом подсказки очень даже пригодились бы компилятору

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

ckotinko ☆☆☆
()
Ответ на: комментарий от m0rph

на самом деле, С++ ABI придумали долбозвери. Сишный API предполагает подмену функций при динамической линковке через LD_PRELOAD. а с++ный класс хрен подменишь. тогда вообще не чего было сохранять совместимость для приплюснутых символов.

Кроме того, есть еще одна фича. Пусть есть класс Foo. в нем невиртуальный метод bar(). класс и его код сидят в библиотеке libfoo.so. как вызывается Foo::bar()? а тупо в приложение вставлен код

.text
call _Foo_barololololl123

.section .plt
_Foo_barololololl123:
jmp [.plt+ptr_to_real_Foo_barololololl123]

.section .got
ptr_to_real_Foo_barololololl123:long 0
вызов то по факту «виртуальный». и таких .got и .plt по всей проге после загрузки десятки. Вот линковка этих таблиц и тормозит старт сложных плюсовых прог

А ведь можно просто добавить экспортную версию vtable где виртуальными будут все методы, и даже статические функции будут «виртуальными». И экспортировать один символ на класс. Ибо что так 2 чтения(из plt и из got), что по новой читать указатель на vtable и прыгать прямо туда. Только указатель на vtable компилятор может скэшировать в стеке а got и plt хрен скешируешь.

ckotinko ☆☆☆
()
Последнее исправление: ckotinko (всего исправлений: 1)

эдвард руки-крюки С++

я ищу хорошую аналогию тому, на что похоже программирование на С++ и я вспомнил этот фильм Тима Бёртона 1990 года, «Эдвард Руки-ножницы».

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

с ножницами вместо рук не так уж и плохо . у Эдварда много талантов: он, например, может офигенно делать причёски для собак .

у меня часто были такие же мысли после посещения конференций по С++: на этот раз это была Становимся раком индейсами 2013 * назад, в пампасы 2013 * . в прошлом году, весь восторг был про новый свисто блестящий стандарт С++11 . в этом году это больше проверка реальности . не поймите меня неправильно, на выставке было много офигенных причёсок собак (я имею в виду код на С++, простой и элегантный), но основой объём конференции был про то, как не покалечиться и как оказать первую помощь в случае случайной ампутации.

anonymous
()
Ответ на: эдвард руки-крюки С++ от anonymous

-= эдвард руки-из-жопы: маразм нам дал стальные руки крюки, а вместо серца плазменный С++ головного мозга =-

Маленький магазинчик ужасов смотреть

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

у С++ есть отмазка: обратная совместимость — особенно, совместимость с С . вы можете думать о С подмножестве С++ как добросовестном исполнителе языка ассемблера, который вы не должны использовать в обычном каждодневном программировании , окромя того, что вам это так только кажется, по первому взгляду . вдругорядь и понеже, если вы тупо доберётесь до вашего С++ инструментария, скорее всего вы придёте к «голым указателям», к циклам for, и ко всёму этому уродству.

хорошо известный пример чего не надо делать: это использовать malloc для динамического выделения памяти, и free для деаллокации . malloc получает количество байт и возвращает указатель на void, который вам нужно привести к какому-нибудь более полезному типу — было бы сложно прийти к худшему API для управления памятью . вот пример действительно плохого кода (но почти правильного, если бы не возможность разыменования нулевого указателя):

struct Pod {
    int count;
    int * counters;
};

int n = 10;
Pod * pod = (Pod *) malloc (sizeof Pod);
pod->count = n
pod->counters = (int *) malloc (n * sizeof(int));
...
free (pod->counters);
free (pod);

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

с++ «решает» проблему избыточного приведения типов и вычисления размеров, не череватые ошибками заменой malloc и free на new и delete . правильная версия кода на С++ будет:

struct Pod {
    int count;
    int * counters;
};

int n = 10;
Pod * pod = new Pod;
pod->count = n;
pod->counters = new int [n];
...
delete [] pod->counters;
delete pod;

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

class Snd { // Sophisticated New Data
public:
    Snd (int n) : _count(n), _counters(new int [n]) {}
    ~Snd () { delete [] _counters; }
private:
    int _count;
    int * _counters;
};

Snd * snd = new Snd (10);
...
delete snd;

мы уже закончили? конечно, ещё нет! код не безопасен относительно исключений.

фолькЛОР на С++ говорит, что нужно избегать «голых» указателей, массивов и delete . так что средством от хромоты malloc является оператор new, который тоже поломан, потому что он возвращает опасный указатель, а указатели — это плохо.

мы все знаем (и можем это доказать, шрамами на своём лице), что нужно пользоваться STL контейнерами и умными указателями, везде, где это только возможно . ох, и используйте семантику значений для передачи . нет, подождите! семантика значений приносит накладные расходы по производительности из-за избыточного копирования . так что насчёт shared_ptr и векторов из shared_ptr? но это добавляет накладные расходы на поцсчёт ссылок! нет, вот новая идея: семантика перемещения и ссылки-rvalue.

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

anonymous
()

хилософия С++

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

С++ стал крайне сложным языком . есть бесчисленныое количество способов, как что-то сделать — почти все из них либо полностью неправильны, либо не поддерживаемы, либо и то и другое . проблема в том, что большинство кода конпелируется и, ВНЕЗАПНО, даже запускается . ошибки и недостатки обнаруживаются гораздо позднее, зачастую после выпуска продукта (то есть, код таки не работает).

вы можете сказать: ну, ничего не поделаешь, это флешъ С++  — такова природа программирования . если вы и правда так думаете, вам всерьёз нужно посмотреть на Хаскель . вашей первой реакцией будет: я не знаю как сделать самые первые шаги и очевидные вещи (кроме вычисления факториалов и чисел Фибоначчи) в этом крайне ограничивающем недоязычке . это полностью отличается от опыта на С++, где вы можете начинать хакать уже с первого дня . чего вы не понимаете так того, что у вас это займёт 10 лет, если повезёт, чтобы обнаружить «правильный способ» программирования на С++ (если такой способ вообще есть) . и, поди догадайся: чем лучшем программистом на С++ ты становишься, тем более функциональными выглядят твои программы . спросите любого гуру С++ и они скажут: избегай мутаций, побочных эффектов, не используй циклы, избегай иерархий классов и наследования . но вам понадобится строгая дисциплина и полный контроль над тем, с кем вы сотрудничаете чтобы это осуществить, потому что С++ так много разрешает.

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

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

управление ресурсами

я начал этот поцт примерами управления ресурсов (строго говоря, управления памятью), потому что это один из моих любимых примеров . я писал об этом и рекламировал это с 90х годов (см . список литературы в конце) . очевидно, у меня ничего не вышло, потому что 20 лет спустя техники управления ресурсами всё ещё не общепризнаны . Бьярн Страуструп почувствовал себя обязанным потратить половину его вступительной речи объясняя управление ресурсами толпе продвинутых С++ программистов . опять же, можно винить тупых (некомпетентных) программистов, не втыкающих в управление ресурсами, как основу программирования на С++ . хотя проблема в том, что в языке нет ничего такого, что сказало бы программисту, что в коде чего-то не хватает (см. код в начале поста) . на самом деле, зачастую изучить технику исправления — воспринимается как изучить новый язык.

почему так тяжело? потому что в С++ большинство управления ресурсами — это управление памятью . на самом деле, было зачастую указано, что сборка мусора не решает проблем управления ресурсами: всегда будут файловые хендлы, оконные хендлы, открытые базы данных и транзакции, и т.п . это всё важные ресурсы, но их управление омрачается нудятиной управления памятью . причина того, почему в С++ нет сборщика мусора не в том, что это нельзя сделать эффективно, но в том, что С++ сам по себе враждебен к GC . компилятор и среда выполнения всегда должны предполагать худшее — не только то, что любой указатель может быть алиасом (псевдонимом; aliasing) любого другого указателя, но в том, что адрес в памяти может храниться как целое или его младшие поля могут использоваться как битовые поля (вот почему для С++ рассматриваются только консервативные сборщики мусора). facepalm, йа ниасилил #pragma align

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

тщательное управление ресурсами и свободное использование shared_ptr может быть надёжно (заслуживать доверия) для однопоточных программ, но к моменту, когда вы начнёте использовать конкурентность, вы в большой беде . каждое увеличение/уменьшение счётчика требует блокировок! (locking) . эти блокировки обычно реализованы через атомарные переменные, но мутексы тоже! не будьте одурачены: доступ к атомарным переменным дорог . что показывает главную проблему с С++.

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

конкурентность (одновременность) и параллелизм

прошло 8 лет с того момента, как Герб Саттер, как известно, заявил: завтраки на халяву — закончились! . даже с тех пор, как большой танкер С++ с сотнями нефти медленно сменил курс апстену титанек . не похоже, что конкурентность была изобретена в 2005 году . нитки Posix были определены в 1995 . микрософт ввёл нитки в Шиндовз 95 и поддержку многопроцессорности в Шиндовз НТ . однако, конкурентность всё-таки признали в стандарте С++ 2011.

С++11 пришлось начинать с самого начала . нужно было определить модель памяти: когда и в каком порядке записи в память из разных ниток становятся видимыми другим ниткам . для практических надобностей, модель памяти С++ была скопирована с Явы (кроме некоторых противоречивых гарантий того, что Ява гарантирует в случае гонок данных data races) . однако, так как С++ нужно было соревноваться с языком ассемблера, полная модель памяти включает так называемые слабые атомарности, которые я описал бы как переносимые (портабельные) гонки данных, и рекомендовал бы избегать.

С++11 также определил примитивы для создания и управления нитками, и простые примитивы синхронизации как определённые Дейкстрой и Хоаром ещё в 1960х, такие как мутексы и условные переменные . можно спорить с тем, на самом ли деле это подходящие для целей синхронизации строительные блоки — но возможно, это пофиг: потому что как известно, они всё равно не составимы (composable) . составимая абстракция для синхронизации — это SТМ (программная транзакционная память), которую тяжело реализовать правильно и эффективно в императивном-то язычке . в Комитете По Стандартам есть группа изучения STM, так что есть шанс что однажды она станет частью Стандарта . но поскольку С++ не предлагает контроля над побочными эффектами, её будет очень тяжело использовать так как надо.

ещё была ошибочная и путанная попытка обеспечить поддержку параллелизма уровня задач с помощью асинхронных задач и не составимых (non-composable) будущих (оба всерьёз рассматриваются как устарелые в С++14) . переменные, локальные для нитки также стандартизировали подход уровня задачи, который гораздо труднее . блокировки и условные переменные также привязаны к ниткам, а не задачам . так что это было в основном, стихийное бедствие . Комитет По Стандартам ™ запилил их в план работ на много лет вперёд . это включает составимый (composable) параллелизм уровня задач, каналы для коммуникации, которые как надеемся, заменят futures, отмену задач и вероятно, в течение долгого срока времени, параллелизм уровня данных, включая поддержку GPU . производная микрософтовского PPL и интеловского TBB должна стать частью стандарта (надеемся, что не Microsoft AMP).

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

напряжёмся и поверим что все эти штуки будут стандартизированы и реализованы, скажем, к 2015 году . даже если это и случится, я всё ещё не думаю, что у людей получится использовать С++ для мейнстримного параллельного программирования . С++ проектировался для однопоточного программирования, и параллельное программирование требует революционных, а не эволюционных изменений . два слова: гонки данных . императивные язычки не предлагают защиты от гонок данных — возможно, за исключением D.

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

в D, по крайней мере, есть понятие о глубокой константности (deep constness) и иммутабельности (immutability) (никакая нитка не может изменить иммутабельную структуру данных) . ещё один кивок в сторону конкурентности от D это возможность определить чистые (pure) функции . к тому же, в D мутабельные объекты по умолчанию не разделяемые между нитками . хотя наиболее важно то, что нитки не являются хорошей абстракцией для параллельного программирования, так что этот подход не будет работать с легковесными задачами и очередями, ворующими работу (work-stealing queues), где задачи передаются между нитками.

но, С++ не поддерживает НИЧЕГО из этого и похоже, никогда не будет поддерживать.

конечно, вы можете узнать все эти особенности (features) про-конкурентноси и параллелизма как функциональное программирование — особенно, иммутабельность и чистые функции . рискую надоесть напоминаная: Хаскель на голову впереди кривой по отношению к параллелизьму, включая программирование GPU в factor тоже прикольно писать GPU-шныя шейдеры. это было причиной тому что я так легко перебрался на Хаскель после стольких лет проповедования (evangelizing) хороших С++ практик . каждый программер, серьёзно относящийся к конкурентности и параллелизьму должен выучить достаточно Хаскеля, чтобы понять как с этим справляться . есть отличная книженция Симона Марлоу, параллельное и конкурентное программирование для тех, кто в штанге . после того, как вы её осилите, вы либо начнёте применять функциональные техники, программируя на С++, либо поймёте какая непонятка и нестыковка (impedance mismatch) существует между параллельным программированием и императивным недоязычком, и переключитесь на Хаскель головного мозга.

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

выводы

я верую ad absurdum, что язык С++ и его хилософия напрямую конфликтует с требованиями параллельного программирования . этот конфликт отвечает за очень медленное осиливание (uptake) параллельного программирования в попсовой (мейнстримной, mainstream) разработке программ . мощь многоядерных процессоров, векторных блоков и ЖПУ (GPU) просераюцца проматываются из-за устарелой парадигмы программирования.

список литературы

вот я привёл некоторые мои публикации про управление ресурсами:

1 . Бартош Милевски, «Управление Ресурсами В С++», журнал по объектному ориентированию программированию, март/апрель 1997, том 10, № 1 . стр . 14-22 . это было ещё в эпоху до unique_ptr, так что я использовал auto_ptr, чего бы это ни стоило . поскольку у вас не может быть векторов auto_ptr я реализовал auto_vector.

2 . Отчёт о С++ в сентябре 1998 и феврале 1999 (всё ещё с auto_ptr)

сильные указатели и управление ресурсами в С++

управление ресурсами в действии

С++ в действии (всё ещё auto_ptr), Аддисон Висли 2011 . смотрите вырезку из этой книги про управление ресурсами

бродим вниз по лужайке памяти, Андрея Александреску CUJ октябрь 2005 (используя unique_ptr)

unique_ptr — насколько оно уникально? издательство WordPress (LOL) , 2009

Вот моя критика в бложике подхода С++11 к конкурентноси:

асинхронные задачи в С++11: ещё ниаслили поломанные обещания — будущие (futures) из С++0х-= эдвард руки-из-жопы: маразм нам дал стальные руки крюки, а вместо серца плазменный С++ головного мозга =-

// ваш К. О.

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

на самом деле, С++ ABI придумали долбозвери.

+10500. но, Ватсон, почему?

на самом деле в С++ не одно ABI, а несколько. вместо одного calling convention как в Cшном cdecl (для шиндосовцев — stdcall) есть целых три:

1. статический метод класса

2. невиртуальный метод

3. виртуальный метод.

и все эти соглашения разные для разных случаев. пруфлинки: 1 (angelcode.com) (у него ещё книжка есть), 2 (codeproject.com) 3 (hackcraft.net)

плюс, добавь к этому разные ABI для x86 и AMD64.

плюс, манглинг.

плюс, надо как-то вставлять в рантайм запуск всех этих конструкторов и деструкторов в нужный момент (см. например рантайм С++.NET)

плюс, линковка .got и .plt, как ты сказал (однако, есть prelink)

А ведь можно просто добавить экспортную версию vtable где виртуальными будут все методы, и даже статические функции будут «виртуальными». И экспортировать один символ на класс.

одним символом на класс, ИМХО, вряд ли обойдёшься. но вот в SOM например экспортировалось не более трёх

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

ведь можно просто добавить экспортную версию vtable где виртуальными будут все методы, и даже статические функции будут «виртуальными». И экспортировать один символ на класс. Ибо что так 2 чтения(из plt и из got), что по новой читать указатель на vtable и прыгать прямо туда. Только указатель на vtable компилятор может скэшировать в стеке а got и plt хрен скешируешь.

да или вообще, обойтись няшной сишечкой

или, если у вас диабёт, и хочется сахарку: взять vala или ooc

anonymous
()

хорошо известный пример чего не надо делать: это использовать malloc для динамического выделения памяти,

4.2

по-настоящему правильной версией будет:

расскажите уже человеку про STL:

vector<int> pod(10);

а то он переизобретает то, что давно уже есть

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

С++ стал крайне сложным языком

да

вам всерьёз нужно посмотреть на Хаскель

где можно посмотреть на то, что он написал на хаскеле?

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

у него в бложике есть то, как он из С++ пытается сделать хаскель. презентации с pdf-ами про всё это.

а что он написал на хаскелле, а не на плюсах — х.з., искать надо

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

у тебя преждевременная эякуляция пост-отправление?

дальше не читай @ сразу отправляй

он говорит про STL, что и это не решает всех проблем. потому что не exception safe, thread safe, constness/immutable safe.

и НИЧЕГО не поделаешь, это С++.

anonymous
()

маленький магазинчик ужасов

err, вот эта ссылка правильней

тёплый ламповый трешъ.

исчо рекомендую «атака крабов-монстров» того же автора.

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

Тёзка, что за пустой прогон?

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

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

link fixed Омары

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

дальше не читай @ сразу отправляй

я пролистал вниз, увидел много букав и ниосилил

он говорит про STL

т.е. просто решил позанудствовать, окай

что и это не решает всех проблем

идеальных решений вообще нет

потому что не exception safe

где можно найти человека, которому это помешало? я много видел проблем с С++, но вот, чтоб кто-то рассказывал, как плохой не exception safe std::vector ему помешал - нет

thread safe

ну так правильно - нужно брать thread safe версию, если не хочется думать, например такую:

http://msdn.microsoft.com/en-us/library/ee355343.aspx

constness/immutable safe

да ладно

и НИЧЕГО не поделаешь, это С++.

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

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

пойду погамаю в йоба-игры на хаскеле

кстати Кармак вроде несколько лет как переписывает на нем Wolfenstein 3D, вот как закончит - будет просто прорыв

wota ★★
()

8 лет я слышу про проблемы C++ и 8 лет программисты продолжают писать на нём. И это только моё впечатление, олдфаги поднимут это число разика так в 2 как минимум.

Ничего не поделаешь, недостатки есть везде, но достоинства C++ очень часто их перевешивают.

А вышеупомянутый Хаскель - далеко не панацея. И тоже имеет проблемы, не такие как у С++, а совершенно другие, понятное дело.

//прошу прощения за пост в стиле капитана Очевидности

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

переписывает на нем Wolfenstein 3D, вот как закончит - будет просто прорыв

где-то есть сорцы? ну кто ж в детстве не читал исподников того старого вольфенштейна 2.5D ещё на turbo C++.. (или там уже watcom был?)

простой, понятный рейкастинг.

а как это в зигохистоморфных препроморфизмах будет?

обратный кв. корень через монады? =))

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

где-то есть сорцы?

вроде нет, он когда-то упоминал это, потом в твиттер кинул сообщение и пока все глухо :(

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

тезисы в том, что

1. старая парадигма программирования на С++ мешает нормальному осиливанию параллелизма и конкурентности

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

3. а зачем тогда нужен скрипач С++? скрипач не нужен, родной

но достоинства C++ очень часто их перевешивают.

плюс, за ГОДЫ существования С++ он так и не стал платформой. ну почти как лисп, но с CL например другая история: это создание систем, и фичи лиспа для создания программы-как-системы вполне себе адекватны, в разрезе более общей системы.

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

но, в С++ и этого нет!! что же это такое, за что ни хватишься, ничего у большевиков С++-ников нет

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

но, в С++ и этого нет!! что же это такое, за что ни хватишься, ничего у большевиков С++-ников нет

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

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

внезапно, поковырял Factor. приходится ставить мозги раком, но игрушки на OpenGL с шейдерами и FFI в примерах занятные. внятный FFI, богатая библиотека, в полпинка прикручивается EBNF через PEG для всяческих DSL-лей (например, инфиксный синтаксис и т.п.). XML, вебсервисы, функциональные структуры данных и прочая прочая.

вот только писать на этом всём — надо окончательно упороться.

проще уж взять из contibs смоллток через PEG и писать на нём, как-то привычнее :))

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