LINUX.ORG.RU

Вторая часть интервью с Bjarne Stroustrup


0

0

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

Первую часть интервью можно прочитать здесь: http://www.techreview.com/InfoTech/17...

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

★★★★★

Проверено: Shaman007 ()

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

>>C++ это метаязык.

>Вдвоем курили?

+1

видно один и тот же писал -)

в перлы записать надо -)

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

>судя по твоим ты только начинающий, раз так о с++ пишешь

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

> ... вы слишком молоды

Спасибо, вы тоже неплохо сохранились :)

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

>А ничего, что язык с++ ничуть не менее кроссплатформенный, чем жава? :)

Ну напишите C++ окошко с надписью Hello world. Под win32 и Linux. И под сотовый. Сравните код. Мы посмеёмся.

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

>Простите, меня бесят сишники пишущие на c++ сишный код и потом орущие что c++ говно, а темплейты вобще понять невозможно. И сишники же пишут, что c++ низкоуровневый язык.

вы прям телепат: все о всех знаете, кто на чем пишет и кто что знает -)

с чего вы взяли что я пишу на С++ в стиле С ? -)

даже очень С++ тока вот запал он уже порядком своими многочисленными UB

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

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

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

по моему это не нормально, даже фанатично

вспоминается рассказ Лема про дракона и известный топик на rsdn

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

>>C++ это метаязык. >Как забрало....

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

Теперь попробуем добавить средствами java в язык сборщик мусора и автоматическое управление память.

Средствами java. Чтобы было прозрачно для пишущего программиста.

Неполучилось?

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

Тоже самое проделайте с сигналами. Сигналы на C++ реализуются, но в язык не входят.

Весьма малое количество парадигм нельзя реализовать на C++ прозрачно для программиста.

Прозрачно можно реализовать сборщик мусора, сигналы и прочее, что в язык C++ _НЕ ВХОДЯТ_. Ну нет c++ этого, а с помощью языка реализовать можно.

Чем не метаязык?

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

>>С++ - мультипарадигменный язык.

>Вдвоем курили?

В каком именно месте (:)) Вы не согласны?;) Вы не знали, что С++ поддерживает несколько парадигм программирования? Сочувствую. И советую почитать это: http://www.piter.com/book/978594723895/

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

>А теперь попробуем добавить в C++ средствами C++ сборщик мусора и автоматическое управление памятью, чтобы было прозрачно для программиста. У меня получилось.

Сурьезно? И heap compaction оно делать умеет? А за libjpeg подметает?

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

>даже очень С++ тока вот запал он уже порядком своими многочисленными UB

Я даже и слова то такого незнаю UB. Последний год пишу только на C++. Отладчиком не пользуюсь.

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

Уж поверьте мне.

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

Вы определённо чтото делаете не так, раз уж книжки не помогают.

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

Точнее Sun JVM написана на С++ и еще вставки ассемблерные там есть, вот.

Далее. Ну нет там некоторых операций (для работы с указателями, например)... Зато межплатформенна, и не на уровне исходных кодов, а гораздо лучше - на уровне бинарных кодов (точнее байт кодов). Это плюс, поскольку на уровне исходных кодов межплатформенность не всегда получается. Ах да... Еще сборщик мусора (ну да, я знаю что он впервые появился в лиспе), а в С++ только smart pointers (вроде) И еще встроенная многопоточность (есть ли она в С++? ну pthreads, и то там имеются некоторые платформозависимые штуки), 10-ти летняя история, и в связи с ней (10-ти летней историей): 1) до фига либ (много открытых есть), 2) Огроменное сообщество 3) Много документации

Уж это лучше чем эти поганые COM, ATL и нет, бля

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

>И heap compaction оно делать умеет?

А оно нужно? Как же тогда обычные c++ new delete работают %)

Кошмар какой, в C тоже нет heap compaction %)

>А за libjpeg подметает?

Нет, а вам сложно сделать обертку которая будет представлять удобный объектный интерфейс и всё подеметать? Или опять в стиле C пишем?

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

>Ну напишите C++ окошко с надписью Hello world. Под win32 и Linux. И под сотовый. Сравните код. Мы посмеёмся.

Ага, а вы найдите в стандарте ISO c++ хоть одну не-кроссплатформенную возможность. Мы и я тоже посмеёмся :) Хотя, собственно, уже смешно.

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

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

>Я даже и слова то такого незнаю UB. Последний год пишу только на C++. Отладчиком не пользуюсь.

позвольте узнать, что пишете?

на сколько большой проект

сколько человек

компилятор/компиляторы под которыми постоянно идет сборка

платформы (ОС)

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

>а гораздо лучше - на уровне бинарных кодов

Преимущество без которого можно без проблем обойтись.

>Это плюс, поскольку на уровне исходных кодов межплатформенность не всегда получается.

Взять межплатформенные обертки. Или самому за раз написать.

>Еще сборщик мусора

в c++ делается на раз

>С++? ну pthreads, и то там имеются некоторые платформозависимые штуки

Опятьже pthreads - С стиль. Взять кросплатформенную обертку и небудет проблем. (по крайней мере с win, unix (linux, mac))

>до фига либ (много открытых есть)

С этим АБСОЛЮТНО согласен. Большой плюс java. Для веба и веб сервисов очень хороша.

>Много документации

Тоже большой плюс, но c++ тоже освоится и приудобнится можно.

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

>А оно нужно? Как же тогда обычные c++ new delete работают

Нет конечно. Мужики то и не знают. Например они придумали себе такую проблему - фрагментация памяти.

>Нет, а вам сложно сделать обертку которая будет представлять удобный объектный интерфейс и всё подеметать?

Нет конечно. В конце концов можно на C++ написать недоделаный JVM. Нихто не спорит. А если напрячся можно и доделаный написать. ТАкое себе 10е правило гринспуна перефразированное в сторону жабы.

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

>Ну напишите C++ окошко с надписью Hello world. Под win32 и Linux. И под сотовый. Сравните код. Мы посмеёмся.

Пожалуйста. Вам с использованием какой библиотеки виджетов? Я лично предпочитаю Qt (Qt, кстати, это не только виджеты - это полноценный кроссплатформенный framework).

На Qt это делается так. Cорри за косоватое форматирование - нельзя смешивать TeX и preformated text (2админы: Ну когда уже тэги [code], [/code] приделаете?):

#include <QApplication>

#include <QLabel>

int main(int argc, char ** argv)

{

QApplication app(argc, argv);

QLabel hello;

hello.setText(tr("Hello World!"));

hello.show();

return app.exec();

}

Пожалуйста. Счас поднимете визг, что мол это не на чистом С++. Не на чистом. Ну а какого, извините, чёрта тащить всё и вся в язык?

Кстати качество языка определяется не краткостью написания Hello World на нём, а, ИМХО, тем, насколько удобно и качественно на нём создаются конкретные серьёзные приложения. В понятие качества приложения входит и скорость их выполнения. Ребят, только не надо орать, что жаба не тормозит и что надо копьютеры помощнее покупать. Не смешите людей, а?...

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

>позвольте узнать, что пишете?

Межплатформенный сетевой клиент. Под linux - gtk+, под win - winapi, под mac os - carbon. Своя ui библиотека.

>на сколько большой проект

Около 18 тысяч строк. Пока написано...

До этого ещё проекты были, но в этом проекте ui либа существенно дописана.

>сколько человек

Простите, я один. Я ISV. Неужели сторонние программисты так всё портят?

>компилятор/компиляторы под которыми постоянно идет сборка

gcc, mingw, mac os gcc.

>платформы (ОС)

win, linux, bsd, mac os x

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

>Преимущество без которого можно без проблем обойтись.

Не, межплатформенность в сорсах не всегда работает

>Взять межплатформенные обертки. Или самому за раз написать.

Хорошо если они есть

>в c++ делается на раз

Мне интересно на это посмотреть, хоть это и возможно (мне так думается)

>Опятьже pthreads - С стиль. Взять кросплатформенную обертку и небудет проблем. (по крайней мере с win, unix (linux, mac))

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

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

>Мужики то и не знают. Например они придумали себе такую проблему - фрагментация памяти.

Мужики действительно незнают. Встречали заметно только в firefox, но он говорят много на C написан.

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

Ну дался вам этот ассенизатор! Проектируйте ПО, прежде чем кодить и не будет память течь. Да и smart pointers отлично помогают решать спорные вопросы (непонятно кто владеет экземпляром класса и т.п.)...

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

>>Опятьже pthreads - С стиль. Взять кросплатформенную обертку и небудет проблем. (по крайней мере с win, unix (linux, mac))

>Ну опять же если есть эта обертка. Парень из параллельной группы пытался найти, в итоге написал свою

Boost library (www.boost.org) ему в помощь.

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

>Около 18 тысяч строк совсем не серьезно

>Простите, я один. Я ISV. Неужели сторонние программисты так всё портят? у всех свои тараканы в голове

>gcc, mingw, mac os gcc.

один и тот же компилятор

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

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

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

>http://www.piter.com/book/978594723895/

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

But more to the point, C++ supports multiple paradigms well. C++ has templates, overloaded functions, inheritance, and virtual functions - a rich collection of facilities to express a broad spectrum of patterns of commonality and variability.

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

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

>>gcc, mingw, mac os gcc.

>один и тот же компилятор

Ну и? Если есть для необходимых платформ, почему не пользовать?

У меня был подобный проект, тоже *nix/Win/Mac. Пользовали gcc и MSVC. Проблем не было. Хотя M$ компилер конченный...

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

>Мне интересно на это посмотреть, хоть это и возможно (мне так думается)

Начинаешь отсюда http://rsdn.ru/article/cpp/GCcpp.xml, потом понимаешь как всё это работает. Оптимизируешь и делаешь красиво. (сложно это)

Просто только кролики размножаются.

>Парень из параллельной группы пытался найти, в итоге написал свою

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

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

>Да и smart pointers отлично помогают решать спорные вопросы (непонятно кто владеет экземпляром класса и т.п.)...

где вам эта гадость то понадобилась кроме исключений? -)

и что это за хорошо спроектированная система в которой неизвестно что происходит (непонятно кто владеет экземпляром класса и т.п.)

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

>что вы имеете конкретно? >или забыли про extern "C"?

У с++ компиляторов несовместимый ABI. Стандартного средства вызывать с++ код из Си-кода не существует. extern "C" - как логично можно было бы предположить, как раз для обратной задачи.

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

Может и молодец, но это называется "написание велосипеда". Уж лучше тогда Qt, Boost или GTK P. S. 1) Ну Вы ведь не пишете имплементацию связанных списков каждый раз как она понадобится?

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

>Стандартного средства вызывать с++ код из Си-кода не существует.

PS: Разумеется, за исключением CORBA ;)

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

>совсем не серьезно

Пиписьками будем меряться или деньгу зарабатывать?

Я видел коммерческие проекты с меньшим кодом и приносящие по паре мерседесов в год.

>один и тот же компилятор

Если всё устраивает, зачем больше? Ни одного warning'а с -Wall. И отладчиком не пользуюсь. Смотрел утечки памяти - их нет.

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

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

"Ниасилил, многабукаф"? Понятно.

>But more to the point, C++ supports multiple paradigms well. C++ has templates, overloaded functions, inheritance, and virtual functions - a rich collection of facilities to express a broad spectrum of patterns of commonality and variability. Если наличие шаблонов, перегрузки, наследования и виртуальных функций - это "мультипарадигменность"....то я умываю руки.

Умывайте.

Наличие шаблонов и позволяет применять сразу аж 2 парадигмы: шаблонное метапрограммирование (почитайте Александреску, удивитесь) и обобщённое программирование.

Наследование, перегрузка, виртуальность - поддержка ООП.

А также в наследство от С достался структурный подход - можно ведь и так писать (что большинство и делает, а потом орёт на формумах - "С++ - аццтой!").

Dixi

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

>Может и молодец, но это называется "написание велосипеда".

Использование boost где неследует называется катанием на велосипеде с сорока пудовыми колесами :)

>Ну Вы ведь не пишете имплементацию связанных списков каждый раз как она понадобится?

Так сложно написать? На c++ 20 строк будет тупого кода.

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

> Мужики действительно незнают.

Ага - они все шизонулись. Кернел хакеры шизонулись со своей buddy. Ребяты которые пишут долгоживущие серверные приложения (типа постгреса) - все как один больны на голову со своими MM. А всего то было просто использовать new/delete и все вопросы были бы решены....

И самая шизонутая - мозилла со своими coding conventions, где хтэмэлом по белому написано - что самое первое правило C++ в таком большом проекте как мозилла - никакого C++, для сохранения портабельности кода. Им забыли объяснить про обертки мультиплатформенные, которые пишутся на раз.

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

>А Java это не только язык. Это платформа и технология. J2me программы отлично бегают на сотовых.

Для мобильных устройств существует Symbian, винда ME и Linux, Java же на мобильных телефонах - просто бесполезная примочечка.

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

>что самое первое правило C++ в таком большом проекте как мозилла - никакого C++, для сохранения портабельности кода.

Вот только mozilla почемуто всех больше памяти и жрет. Не особо поворотлива и пускается не везде где пускается opera.

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

> Так сложно написать? На c++ 20 строк будет тупого кода.

Тогда это называется Ctrl-C + Ctrl-V, или дублирование кода. Писать имплементацию надо уметь, но не писать ее каждый раз с нуля везде где она понадобится

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

>Так сложно написать? На c++ 20 строк будет тупого кода.

Гораздо правильнее использовать готовое, отлаженное и стандартное решение. Правда в некоторых случаях зависимости важны, да. boost, qt и там еще мало ли что качать ради консольной утилитки в 50 строк было бы прямо скажем, напряжно :)

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

>Тогда это называется Ctrl-C + Ctrl-V, или дублирование кода.

Если своя реализация в своей библиотеке которая статически подключается к своим программам.

Ctrl-C + Ctrl-V - не люблю.

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

typedef int FooHandle;

extern "C" int createFoo(FooHandle* );

extern "C" int destroyFoo(FooHandle* );

extern "C" void FooSomeFunc(FooHandle );

#ifdef __cplusplus

struct Foo

{

Foo() {}

~Foo() {}

void someFunc(int iNum)

{

m_iNum = iNum;

}

};

#endif

думаю понятно что делают С ф-ции

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

>где вам эта гадость то понадобилась кроме исключений? -)

Пример навскидку: возращаемое значение по вызову сигнала, если к оному подцеплено более 1го слота в многопоточной среде; применялись для контроля жизни Singleton'ов.

>и что это за хорошо спроектированная система в которой неизвестно что происходит (непонятно кто владеет экземпляром класса и т.п.)

Озадачил;). Помню, что было и вписывалось в проект. Но что именно счас не припомню - подновато ужо. Завтра отпишу.

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

>думаю понятно что делают С ф-ции

Да, конечно, так без проблем. Но в c++ можно включать C код компиллируя его без изменений C++ компилятором. Если C код придется использовать несколько раз, то лучше написать C++ обертку для него.

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

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

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

>>где вам эта гадость то понадобилась кроме исключений? -)

>Пример навскидку: возращаемое значение по вызову сигнала, если к оному >подцеплено более 1го слота в многопоточной среде; применялись для >контроля жизни Singleton'ов.

вот опять проблема - контроль за порядком жизни Singleton's -), осталось тока александреску зачитать про singletons и его трюки

ну и таких проблем в с++ до попы

ps: против александреску ничего не имею против, мне самому очень понравилась когда то это книжка(typetraits, typelist, visitor, acyclic visitor, functors, factories)

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