LINUX.ORG.RU

Интервью с Бьярном Страустрапом

 ,


0

0

Бьярн Страустрап, автор одного из наиболее широко используемых и успешных языков программирования — C++, пару дней назад дал 8-страничное интервью computerworld.com.au, где рассказал то, что программистам полезно знать о C++:

  • его историю,
  • развитие языка в настоящее время,
  • и его будущее.

>>> Подробности

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

> А теперь расскажите, зачем в рендере нужен ООП? Эффективный рендер, для которого скорость критична, пишется на C в виде библиотеки.

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

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

> Ценная мысль, которая приходит в голову постоянно, но сейчас не до неё, так как доступ к вычислительным средствам уж очень дешёв. И машинное время не такое дорогое, как тридцать лет назад. :))

Т.е. текстовый редактор, жрущий 1гб оперативы в порядке вешей, ну-ну..

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

товарищ, открою тебе страшную тайну. Критичные к ПРОИЗВОДИТЕЛЬНОСТИ приложения пишутся исключительно на С. На С++ пишутся уродские программы, которые тормозят хуже некуда, потому что язык и программисты такие. Правильно говорят, какой язык, такие и программисты.

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

> Опровергните его, если можете.

Я пишу рендер на C++ и гарантирую, что на Си пишут только мудаки. Даже кармак, человек старой закалки, полностью перешел на С++. Потому, что это удобно и эффективно.

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

>>> Это, кстати, один из аргументов Xenocephal-а в пользу C:

>> Да, демагоги любят этот аргумент.

> Опровергните его, если можете.

Биндингов к Qt тебе мало? Что ж, примеры кода приводить не буду, но на пальцах, идея следующая: публичный интерфейс делается extern "C", но внутри используется Си++, "на границе" исключения отлавливаются и переводятся в коды возврата. Если у библиотеки есть достаточно сложные _внутренние_ структуры данных (а это обычно так и есть), выигрыш будет существенным.

Ну и очевидное - даже если интерфейс на Си++, можно писАть остальную программу на Си-подмножестве Си++.

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

>> А теперь расскажите, зачем в рендере нужен ООП? Эффективный рендер, для которого скорость критична, пишется на C в виде библиотеки.

>закопайся обратно откуда вылез. на си пишут только упертые красноглазики которым не важна ни производительность труда ни качество кода. anonymous (*) (28.06.2008 15:18:49)

ООООО пля еще один продавший свой моск на органы, заглянул на ЛОР по пути в биореатор (по-народному, фписду)

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

> товарищ, открою тебе страшную тайну. Критичные к ПРОИЗВОДИТЕЛЬНОСТИ приложения пишутся исключительно на С

ты сначала школу закончи, а потом тайны открывай.

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

>ты сначала школу закончи, а потом тайны открывай.

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

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

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

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

> рендер на плюсах пишут пидрилы. А настоящие мужики пишут в библиотеки на С.

ты лично сколько рендеров написал?

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

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

Да нет, вы обратно не поняли. При чём здесь обычные вызовы если это Door? Ну вроде "технологии" ненадёжных вычислений. Тут сравнение с вызовами вроде call вообще не уместно. Появляются два процесса - ведущий/ведомый - падай на здоровье. Насчёт неэффективности: я может не точно помню, но чем больше программных процессов, тем больше поводов использовать вашу Java - там же всё предусмотрено? Оберни классами хоть в бога душу мать через восемь абстракций - и работай. Тут ниже чего-то про байан даже написали "JMS"? Если всё так тривиально нафига exception на exception-е воротить? когда сами не догнали каким лесом они друг другу на стеки наступают? + машины разные. Ну попутного ветра, и конечно Java стандартнее всех стандартов... :-)

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

рендер на плюсах пишут пидрилы. А настоящие мужики пишут в библиотеки на С. А остальное менее критичное к тормозам пишут на Моно или пистоне, без всяких костылей-говнобиндингов. WinAPI рулит, потому что он на С. Слава патрегу, что его на плюсы не переписали, иначе пизда была бы полная. anonymous (*) (28.06.2008 15:33:08)

Во пля ышшо одно тело на постройку lexxа возникло, фбиореактор ящерица. "WinAPI рулит, потому что он на С" - приговор обжалованию не подлежит - на переработку и точка.

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

> рендер на плюсах пишут пидрилы. А

Вот тебе небесплатный рендер http://hoops3d.com/ написанный на плюсах и ДиректХ. Используется повсеместно в CAD/CAE софте. А твои сишные говнорендеры написаные настоящими мужиками пылятся на sf.net, нихера не умеют и никому нахер даже бесплатно не нужны.

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

Угу, не понял. Попробую объяснить на пальцах. Вот есть такая штука под названием миранда. У неё плагины на С++ пишутся (или на С, не помню, не суть важно). Она в своё время у меня падала из за какого то плагина. А плагин важный и нужный. Ещё пример непопулярный, но, тем не менее важный - IE, аналогичные проблемы. Теперь возьмём эклипс. В нём стоит куча плагинов. Какой то падал у меня, одно время. Тем не менее, это выливалось в диалоговое окошко, мол NullPointerException. ОК и работаем дальше.

Кстати, в эклипсе плагинов десятки. Если при запуске программы будет запускаться двадцать дополнительных процессов, будет немного неудобно.

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

> Тут сравнение с вызовами вроде call вообще не уместно.

Почему? Это самый заурядный RPC. По крайней мере в том смысле, в каком я представляю себе это.

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

Абстракции и эффективность это, вообще то, диаметрально противоположные понятия.

> Если всё так тривиально нафига exception на exception-е воротить?

Да никто вроде не воротит.

Legioner ★★★★★
()

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

anonymous
()

Пересел с делфей на C++ c Qрутым Тулкитом. Первое впечатление: "Ни х... не понятно!..." ВТорое впечатление: "Непривычно..." Третье и окончательное: "$^#$@#% мне в $^@%^%@$^ ДА ТУТ ЖЕ МОЖНО СДЕЛАТЬ ФФСЁ!!!! ДА ЕЩЕ И КРОССПЛАТФОРМЕННО!!!"

З.Ы. Qt4. З.З.Ы. Java - тож хорошо, но немного тормознуто, потому выбрал C++ и Qt З.З.З.Ы. .NET не нужен.

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

void f() {
auto h = AcquireSomeResource(); // Это еще не все.
scope(exit) ReleaseSomeResource(h); // Вот теперь все.
...
}

И почему это предпочтительней RAII? В каких случаях?

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

> Абстракции и эффективность это, вообще то, диаметрально противоположные понятия.

Ну как-то сильно смело. При наличии компилятора который все абстракции на этапе компиляции здраво выравнивает и оптимизирует не на лету - всё будет у нас хорошо. А вот про эффективность это вааще круто сказано. Если вы не имели в виду оптимальность как термин, то многие здесь считают Java эффективной,в то время когда она сплошная абстракция - противоречие?

Какие-то нормы у вас тут двойные. Если Java абстрактна, то она эффективна, если C++ заводит vtables то это всё, трында! :-D

> Кстати, в эклипсе плагинов десятки. Если при запуске программы будет запускаться двадцать дополнительных процессов, будет немного неудобно.

Как это не удобно?! Наоборот, все процессы спят, некоторые выполняются на наших виртуальных 256 процессорных ядрах. Далее, никто не заставляет именно кадный plug-in запускать в отдельном процессе, их можно группировать по типу, и автоматом перезапускать исключая из списка падучие.

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

>>void f() { 
>>auto h = AcquireSomeResource(); // Это еще не все. 
>>scope(exit) ReleaseSomeResource(h); // Вот теперь все. 
>>... 
>>} 

>И почему это предпочтительней RAII? В каких случаях?

Например, если нужно обеспечить транзакционность вставки информации
в несколько контейнеров:

class TransactionManager {
  public addTrx( TrxInfo info, ClientInfo client ) {
    activeTrx_.insert( info, client );
    // Если теперь вставка в activeClients_ приведет к
    // исключению, то информацию из activeTrx_ нужно изъять.
    scope(failure) activeTrx_.remove( info );

    activeClients_.insert( client, info );
  }
  ...
}

Если использовать только RAII, то здесь придется писать слишком
много вспомогательного кода.

Т.е. scope() -- это такой ad-hoc аналог RAII.

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

> Кстати, в эклипсе плагинов десятки. Если при запуске программы будет запускаться двадцать дополнительных процессов, будет немного неудобно.

Ты хоть в курсе, за какое время нормальная ОС (не винда) _запускает_ 100 процессов? У меня 100 раз ls запускается меньше чем за 1 с.

А инициализация структур -- в любом случае будет долго.

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

> кстати, почему Qt такое тормознутое говно, раз оно на быстрых плусах написано?

Ссылку на тесты в студию! Иначе наглый п*здёж!! ::))

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

анонимус не нужен. Моно и .НЕТ наше все, поэтому сдохни.

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

Под эффективностью я подразумевал эффективность выполнения программы - скорость, объём памяти и т.д. Если раньше пиксель рисовался правкой видеопамяти, то сейчас это вызов API тулкита, который раз 5 пройдёт до вызова функции xlib, потом по сокету/fifo идёт в Xserver, там ещё пару раз пропрыгает до драйвера (здесь мои познания смутны), который только здесь поправит видеопамять. Очевидно, первый подход на порядки эффективнее второго, а второй на порядок абстрактнее.

> Как это не удобно?! Наоборот, все процессы спят, некоторые выполняются на наших виртуальных 256 процессорных ядрах.

Вот только память все кушают одновременно. Стек и прочее. И всяческие коллбеки к ядру и другим плагинам будут ой, какими неэффективными. Идиотский пример, конечно, но вот если плагин предоставляет функцию сортировки, а ядро хочет предоставить компаратор, как это будет выглядеть? Либо трансфер компаратора как такового, в машинном коде, в плагин, там загрузка его, и вызов сто миллионов раз, либо вызов сто миллионов раз через IPC. Брр.

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

Можно. Только это уже получается что то очень сложное.

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

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

Остальные недоязычки имеют интерес только академический

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

> Ты хоть в курсе, за какое время нормальная ОС (не винда) _запускает_ 100 процессов? У меня 100 раз ls запускается меньше чем за 1 с.

100 раз в секунду считается быстрым? миллион раз в секунду ещё туда-сюда.

> А инициализация структур -- в любом случае будет долго.

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

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

> Можно. Только это уже получается что то очень сложное.

Ничего сложного лично я не наблюдаю. mmap -что зря придумали и везде суют по-вашему? :-D

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

> А инициализация структур -- в любом случае будет долго.

Вы что, теоретик что ли? Так ведь только нужных структур! Или на Java так не принято?

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

>> Ты хоть в курсе, за какое время нормальная ОС (не винда) _запускает_ 100 процессов? У меня 100 раз ls запускается меньше чем за 1 с.

> 100 раз в секунду считается быстрым?

Для запуска плагинов - да (по процессу на плагин). Или у тебя плагин - это короткоживущий процесс по типу оычного CGI (не fastCGI)?

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

> Ничего сложного лично я не наблюдаю

Тогда приведите примеры. Почему то ни одно модульное приложение, которым я пользовался, не использовало подобных техник. Либо тупо вызывают методы плагином через dlopen/dlsym, либо используют DSL для плагинов (Firefox вообще смешанный, там и на JS можно писать, и через XPCOM можно).

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

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

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

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

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

>И почему это предпочтительней RAII? В каких случаях?

RAII - наихудший вариант решения проблемы. Поэтому вопрос должен звучать так: Чем это не хуже RAII?

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

Эм, ну да. Просто сама цифра 100 в секунду меня немного поразила. Не прав, цифра вполне приемлема.

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

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

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

Если он падает раз в сутки, или при специфической обстановке, устроит. Ёжики кушают кактус, ага.

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

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

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

> 100 разных процессов не отожрут мегабайта по 2 каждый?

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

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

>>И почему это предпочтительней RAII? В каких случаях?

>RAII - наихудший вариант решения проблемы. Поэтому вопрос должен звучать так: Чем это не хуже RAII?

Может быть тогда благородный дон сможет сказать, что же лучше RAII?

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

>>> Ты хоть в курсе, за какое время нормальная ОС (не винда) _запускает_ 100 процессов? У меня 100 раз ls запускается меньше чем за 1 с.

>> 100 раз в секунду считается быстрым?

>Для запуска плагинов - да (по процессу на плагин). Или у тебя плагин - это короткоживущий процесс по типу оычного CGI (не fastCGI)?

Да, особенно прикольно будет делать RPC для работы с таким плагином. Как это в Qt делается - .idl-> скелет/стаб, два .so файла, два .h файла?

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

> Но вообще-то общий код есть общий код

Ну код то будет у плагинов разным, это не 100 одинаковых ls-ов (кстати, если вкомпилить все плагины в один бинарник, и fork-нуть его 100 раз, довольно любопытно получится :) мне это в голову не приходило).

> (если это не Ява - это большая претензия Яве с точки зрения десктопа).

Угу, это большой +1.

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

>>И почему это предпочтительней RAII? В каких случаях?

> RAII - наихудший вариант решения проблемы. Поэтому вопрос должен звучать так: Чем это не хуже RAII?

Абсурд, я тебя уже просил написать пример "многофазовой инициализации", где тебя РАИИ не устраивает. Когда?

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

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

Твоя аргументация в жопе, лол. Дальше не надо

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

>> Для запуска плагинов - да (по процессу на плагин). Или у тебя плагин - это короткоживущий процесс по типу оычного CGI (не fastCGI)?

> Да, особенно прикольно будет делать RPC для работы с таким плагином.

Веб-серверы так работают, и ничего.

> Как это в Qt делается - .idl-> скелет/стаб, два .so файла, два .h файла?

Qt использует IDL? Прикольно.

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

> Если он падает раз в сутки, или при специфической обстановке, устроит.

Раз в сутки свой любимый комбайн можно и перезапустить ЦЕЛИКОМ.

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

>>>И почему это предпочтительней RAII? В каких случаях?

>>RAII - наихудший вариант решения проблемы. Поэтому вопрос должен звучать так: Чем это не хуже RAII?

>Может быть тогда благородный дон сможет сказать, что же лучше RAII?

gc для памяти (90%), finally для всего остального (10%)

Absurd ★★★
()

ПИЛЯТЬ Как фсё уныло!

ТетеревятниГ Пля!

Прехожу на уровень ЛОРа ООП нинужин, пля и чоцка!

Быдлокодеры идут в биореактор на материал для постройки LEXXа,

фсе остальные - фгазенваген.

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

>Qt использует IDL? Прикольно.

Не спец по IPC в Qt. Я написал как это делается классически.

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

Можно. Но удобнее, когда не приходится.

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

> На западе ООП преподают только на Ява, а не каких-то говноплюсах....

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

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

>С++ представляет интерес только для некрофилов. Ява являестся истинно промышленным языком, а также и академическим. На западе ООП преподают только на Ява, а не каких-то говноплюсах. То что какая-та манда присвоила плюсам статус промышленного языка, говорит только об ущербности сего поделия, который промышленным не является.

Да что ты всё про запад, своего мозга уже нет? А ява уныла как никогда. Сливает даже пейтону!!

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