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

среда, июня 03, 2009

Карта языка C++ (The C++ Lands)

Updated 18.03.2012: Эта карта безнадежно устарела. Есть новая карта С++11!

This post is outdated. Here is the new map: The C++11 Lands




English translation is below.

Updated 07.06.2009
Карта быстро расползается по Интернету. Нас уже обоср раскритиковали на reddit и обсудили на boingboing.
Поскольку карта пользуется невероятной популярностью, мы с Джимом серьезно думаем над тем, чтобы сделать вторую версию. Больше, лучше, красивее. Поэтому пишите в комментарии свои замечания, не стесняйтесь.



Язык C++, как известно, сложный и запутанный. Его сложно представить себе целиком и когда только начинаешь с ним работать в голове образуется неприятная каша. Очень не хватало общей схемы, которую я и попыталась изобразить. У меня получилась какая-то фигня и я позвала на помощь друга. И теперь, слава Джиму, у нас есть простая и наглядная карта языка C++. ;-)

Текущий вариант. Добавлены шаблоны и Qt. В разрешении 1600x1110. И, по многочисленным просьбам тех, кто собирался карту печатать - в охренительном разрешении (3298×2288).
Updated 05.06.2009
Поправили опечатку. managment->management.



Старый вариант никуда не делся, вот он.


Старая версия в большем разрешении: 2702x1886



English translation
Updated 07.06.2009
The map is very popular all over the Internet. It's discussed on reddit and boingboing.
And we are seriously thinking about making a new version of it. Bigger and better. Feel free to post your criticism in comments if you have any. The publish button is the orange one.


C++ language is quite complicated. It looks like a total mess when you start studying it. That's why I tried to draw a scheme of it. My drawing was real crap and I asked a friend to help me. And now, thanks to Jim, we have a nice and simple C++ language map.

The current version. With templates and Qt. 1600x1110. And for printing 3298×2288.


The previous one. With a typo.


Old version in higher resolution: 2702x1886

97 коммент.:

Yorik.sar комментирует...

А где же шаблоны?
они же - самая чаща самого тёмного леса :)

davaeron комментирует...

OMG, а где new?

Diamond комментирует...

очаровательно!
столько приятных мелочей

Анонимный комментирует...

Супер! Сегодня же распечатаю 8)

beldmit комментирует...

Прекрасно! Утащил к себе, коллегам покажу.

Спасибо!

Анонимный комментирует...

А diamond mine --- это что?)

Farafonoff комментирует...

А помните к Хоббиту всегда рисовали карту на обложке? Эту карту можно поместить на обложку Страуструпа)

nvy комментирует...

К этой карте ещё бы и легенду (картографическую) - цены б ей не было...

Анонимный комментирует...

Блестяще!
Но, действительно, не хватает шаблонов, new и должен быть полуостров qt.

PS чёта этот openid не работает ничерта

Алёна комментирует...

2Yorik.sar:

А где же шаблоны?

Замок Александреску стоит непосредственно на них!

2davaeron

OMG, а где new?

Да там много чего не хватает на самом деле...

2Анонимный:

Супер! Сегодня же распечатаю 8)

Надо будет завтра картинку побольше размером выложить. Джим говорит, что это печатать нужно на А3, а я сейчас смотрю, некоторые вещи плохо читаются в таком разрешении...

2Анонимный

А diamond mine --- это что?)

Diamond problem

2Farafonoff:

А помните к Хоббиту всегда рисовали карту на обложке? Эту карту можно поместить на обложку Страуструпа)

Точно! Или лучше на обложку стандарта :-)

2Анонимный:

Блестяще!
Но, действительно, не хватает шаблонов, new и должен быть полуостров qt.


На самом деле можно выложить исходники в векторе. И там можно будет пририсовать вообще что угодно. Если кому интересно - говорите, Джим вроде не был против.

PS чёта этот openid не работает ничерта

Действительно не работает...

Jim комментирует...

> ...а я сейчас смотрю, некоторые вещи плохо читаются в таком разрешении...


Ален, посмотри, там где-то, что-то ты не так закачала. Исходник я тебе отдал в разрешении 2702px×1886px, а у тебя оно легло в разрешении 1600px×1117px, т.е. - существенно меньше.



Насчет замечаний. Я нибельмеса не понимал, что рисую, но если по поступающим замечаниям чего-то надо дорисовать - не проблема. Только конкретно пальцем покажите :-)

Антон комментирует...

Да, да - выкладывайте в большем разрешении. Повешу на стену обязательно.

Bobs комментирует...

Ну, во-первых, шаблоны были несправедливо забыты.

Во-вторых, опять таки совершенно нечестно упоминать о C++/Tk и MFC и забывать о Qt и GTK+ :)

bialix комментирует...

Каким боком GTK+ относится к C++? Он написан на сях и выглядит как питон.

axc комментирует...

Не то чтобы неточность, но MFC занесло слишком близко к virtual... Может быть кораблекрушение.

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

new - бог с ним: пустыня памяти есть, классы есть.

А вообще, не надо ничего перерисовывать. Очень здорово.

Анонимный комментирует...

Как здорово, мне нравится :)

Oreolek комментирует...

Карта и правда маленькая, но выписана с душой. По-моему, к ней надо писать такой стандарт,чтобы начинался со слов "В лесу была нора, и в ней жил-был Cи++". Причём стандарт займёт 4 тома, а потом ещё и будут выпускать приквелы.
Ну из библиотек GTK+, Qt и wxWidgets недостаёт...а MFC уже кучу лет как не поддерживается, ещё можно упомянуть OpenGL
Можно добавить IDE'шки, хотя их уйма.
Точно стоит упомянуть про любимые компиляторы gcc и MSVC++. Библиотеки есть,а родных программок - нету! Непорядок. Кстати, gcc ближе к стандарту.
Ещё забыли замок #define и болото Индийского Кода.
Можно упомянуть Тропу Конструкторов и Ловушку Деструкторов...ещё уйму вещей, ведь на карте ещё куча свободного места и нет стран-городов.
Джиму просто огромное спасибо и вечная слава за такую колоссальную работу.

vaddimka комментирует...

В ELS не хватает Qt как минимум :)

fuwaneko комментирует...

Кое-где очень мелко, не разобрать.

Abu комментирует...

Есть еще движок на OpenGL и название у него - как раз подходящее - OGRE.

Евгений Железников комментирует...

Классная карта! Обязательно распечатаю и повешу на стену на работе.

(OGRE - рендерер, в т.ч. и под d3d)

Евгений Охотников комментирует...

Я бы в "external libraries seas" разместил бы фрагменты нескольких application islands. Одним из которых обязательно нужно было бы сделать KDE. Еще можно было бы таким островом сделать MS Products (все таки в Windows, Office и VS полно C++ного кода). А еще остров Game Engines Home. И маленький полузатопленный остров BeOS ;)

Еще чисто визуальное замечание: легенда с ангелочеками и копирайтами в ПНУ слишком большая и сильно отвлекает внимание. Сделать бы ее раза в два поменьше...

okko комментирует...

Зашибительно просто! Супер!!! Особенно порадовали болота исключений и terra incognita :)
Но Qt обязательно надо добавить. и еще я не нашел на карте Мейерса, Саттера и других ребят.. у них всяко должна быть своя таверна

JackTheHack комментирует...

Впечетляет! Мне нравится :)

Анонимный комментирует...

Много диезов # в пустыне это намек на что-то???

Stanislav Krasnoyarov комментирует...

Зачетно! Bugs live here and there and everywhere ;))

Ilya Kulakov комментирует...

>Много диезов # в пустыне это намек на что-то???
>
#include Fort :)

Alex комментирует...

в библиотеки Boost добавить!:)

ilevi комментирует...

Супер, спасибо! ;-) Только я не нашел Комитета по стандартизации - ИМХО, без него никак. Ну, и чисто эмоционально, лично для меня болота - это memory management, а exception'ы - даже и не знаю... какой-то провал? трещина? что-то заколдованное? Зона (как у Стругацких)?

Vladimir Ivanov комментирует...

Это шедевр!!!
Спасибо за карту!
Я дома повешу над компом)
То, что чего-то не хватает - спишем на альфа-версию карты.
Надеюсь, в релизе будет полная карта для путешествий в мир Страуструпа ))
А насчет Qt и Boost - я против, это не язык. Хотя их можно сделать островами, но тогда еще надо добавить и POSIX-библиотеки (я за pthreads) :)

Ashot комментирует...

А можно версию на русском? Повешу в колледже, пусть детишки смотрят :)

dmi3s комментирует...

А как же Herb Sutter? Сфинксом у пирамид, например :)

Анонимный комментирует...

Аааа!! Супеер! Делитесь травой! :)

Анонимный комментирует...

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

Jury комментирует...

Суууупеееер!!!!!
Дайте, пожалуйста, в нормальном разрешении. Распечатал на лазерном принтере - всё расплывается.

Анонимный комментирует...

Any chance for a higher resolution version? Can't read the small text.

Алёна комментирует...

Any chance for a higher resolution version? Can't read the small text.

Yes, sure. As soon as I find Jim. :-)

Анонимный комментирует...

ИМХО malloc / free / realloc- это не про С++.

Farafonoff комментирует...

Может выложите PostScript для страждущих? или в чем там оригинальный вектор?

Анонимный комментирует...

Чего-то с точки зрения кого-то всегда будет не хватать. Так что это не главное...

Главное - потрясающая задумка и отличное исполнение! Алёна, Джим, огромное спасибо!!! Посмотрев на эту карту, я в очередной раз понял, что просто люблю C++, не смотря на все его болота, лабиринты и пустыни :)
А дизайн а-ля "Властелин колец" напоминает о второй любимой вещи :)

Ещё раз огромное спасибо!

newmen комментирует...

а ещё не хватает этого, вот этого и ещё вот этого и этого не хватает!

Eugene K. комментирует...

Чего по-настоящему не хватает, это классической надписи по краям старинных карт: "Здесь живут драконы".

Драконы выбираются по вкусу; лично я предположил бы, что они живут в области Koenig lookup.

axc комментирует...

Очепятка: memory management

Анонимный комментирует...

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

nuxdie комментирует...

очень хотелось бы готовый принт купить..)

Анонимный комментирует...

Черный реинтерпрет_каст - это просто супер:)

Анонимный комментирует...

Распечатал. Повесил. Посмотрел издалека... В общем, про татуированную задницу точно подмечено. Надо бы эти замятия из середины убрать и будет норм.

Tony комментирует...

That map is fantastic! I wish I could read the blog post. Is that Russian?

Алёна комментирует...

>Много диезов # в пустыне это намек на что-то???
>
#include Fort :)


Там же можно поселить дикие неприрученные директивы препроцессора. :-)

2Ashot:

А можно версию на русском? Повешу в колледже, пусть детишки смотрят :)

Я пыталась сделать карту на русском изначально. Полная фигня получается. Потому что ключевые слова все на английском.

2Farafonoff:

Может выложите PostScript для страждущих? или в чем там оригинальный вектор?

Посоветовались с Джимом, пока решили не выкладывать, сорри.

Главное - потрясающая задумка и отличное исполнение! Алёна, Джим, огромное спасибо!!!

пожалуйста, мы старались :-)

2newmen:

а ещё не хватает этого, вот этого и ещё вот этого и этого не хватает!

Так и есть, ага :-)

2axc:
Очепятка: memory management

Fixed

2Анонимный:
Карта выглядит как татуированная задница. Зачем же так, язык ведь хороший на самом деле :)

Смотрела с разных сторон - нифига, ни разу не похоже! :-)

2nuxdie:

очень хотелось бы готовый принт купить..)

Да полно конторок всяких, которые печатают такие вещи. Хоть на A1, хоть на футболку, хоть на кружку.

2Tony:

That map is fantastic!
Thanks!

I wish I could read the blog post. Is that Russian?

Yes, it's Russian. I'll translate it soon, may be today. Because I see a LOT of attempts to translate this page with Google Translate.

Анонимный комментирует...

Gorgeous!

Andrei Boiko комментирует...

Шрифт сильно огорчает, особенно буква Q.

Andrei Boiko комментирует...

И еще вопрос - 72 dpi это достаточно для печати? С таким разрешением карта должа занимать А0 страницу, не будет ли заметна "пикселизация"? А то А0 в цвете недешево печатать, не хотелось бы проводить "эксперименты" :) .

Анонимный комментирует...

Что-то маловато полей и лугов :-) Поля данных я бы добавил...

А еще - под горой Heap с двумя вершинами new и delete добавил бы темные подземелья, в которых живут malloc и free :-)

ant-katcin комментирует...

Супер! Просто великолепно! Молодцы!

Раз уж пошла речь о второй версии, попробую подкинуть пару идей, в чем-то повторюсь с ранее высказанными идеями:

1. new и delete
2. А почему из коллекций обидели std::set? все кроме этой упомянули.
3. Нужно добавить землю макросов, как что-то очень-очень страшное :)
4. Herb Sutter - важная личность
5. stl это коллекции, алгоритмы и потоки. Так что надо бы добавить алгоритмы на карту.
6. Можно добавить поле стандартных заголовков
7. На счет этого не уверен, но может быть как-нибудь показать популярные компиляторы?
8. Можно показать граничные территории, вроде С99.
9. В Include fort'е мне кажется хорошо бы смотрелся include guard.

Надеюсь мои идеи окажутся полезными.

Sniff комментирует...

Интересно, для кого в замке Александреску виселица?

Алёна комментирует...

2Sniff:

Интересно, для кого в замке Александреску виселица?

Для всех :-)

Антон комментирует...

Крепость Microsoft Visual Studio и вольный город gcc.

Cristian Adam комментирует...

Using OptiPNG (optipng -o5)
the size of the png images was
reduced like:

1600x1100.png
3.570.068 -> 3.290.901 bytes

3298x2288.png
14.757.487 -> 11.299.133 bytes

OptiPNG: http://optipng.sourceforge.net/

Cheers

Анонимный комментирует...

Если уж пошла задумка об отсровах "Microsoft", то предложилбы DirectX выполнить в виде флота кораблей (самый большой Direct3D) сражающимся с OpenGl, OpenAl...

Volodymyr Obrizan комментирует...

Можно ещё сделать параллельные речки OpenMP, Intel TBB, Windows Threads, POSIX Threads, MPI. :)

Nikolay Kurtov комментирует...

Как называются горы за Include Fort, те, которые отделяют землю от прибрежных диезов?

Алёна комментирует...

2Nikolay Kurtov:

Как называются горы за Include Fort, те, которые отделяют землю от прибрежных диезов?

А никак :-)

Nikolay Kurtov комментирует...

Такое большое природное образование и без названия, непорядок :-)
Есть у кого-нибудь предложения, как назвать? Что же это за безымянный хребет, отделяющий собственно язык от всего внешнего?

ant-katcin комментирует...

2Nikolay Kurtov:: ну сказано же, что нету имени! значит unnamed namespace... :)

Анонимный комментирует...

Алёна, вы человек работающий в отрасли геймдева и возможно знаете сколько могут получать разработчики таких хитов, как Crysis, Quake 4 и т.п. Так же меньше относительно других программистов, как и в России?

Анонимный комментирует...

Аленка, а какие копирайты на распространение карты - я могу ее печатать и раздавать/продавать всем жаждущим на рынке Петровка, например (естесно, с сохранением авторских линков на ней)?

Андрей

Алёна комментирует...

2Анонимный:

Алёна, вы человек работающий в отрасли геймдева и возможно знаете сколько могут получать разработчики таких хитов, как Crysis, Quake 4 и т.п. Так же меньше относительно других программистов, как и в России?

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

Алёна комментирует...

2Андрей

Аленка, а какие копирайты на распространение карты - я могу ее печатать и раздавать/продавать всем жаждущим на рынке Петровка, например (естесно, с сохранением авторских линков на ней)?

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

Voidy комментирует...

Отличная карта! У меня, впрочем, есть несколько предложений:

1. Было бы здорово, если бы istream впадал в озеро, а не в море, а iostream вообще бы имел две дельты ;-)
2. Надо бы как-то отразить тот факт, что C++ есть надмножество C. Кх-м. The dark and damp C caverns. You are likely to be eaten by a grue. Может быть так?
3. The C++ Lands, their amazing creatures and weird beasts, разве нет?

Алёна комментирует...

2Voidy:

3. The C++ Lands, their amazing creatures and weird beasts, разве нет?

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

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

purser комментирует...

Когда C++ сдохет (а это произойдет уже очень скоро), можно будет отметить на карте место, в котором закопан труп страуса, а карту поместить в музей математических ужасов или лучше выкинуть.

Юрий Крицкий комментирует...

Voidy:
The C++ Lands, their amazing creatures and weird beasts, разве нет?


Алёна пишет:
Я долго рыла Интернет, прежде чем написать эту фразу. Вроде у нас всё верно грамматически. Нейтивы не жаловались, по крайней мере.


Может, Voidy всё же прав? Долго не "рыл", но вот пример:

Socotra: A Natural History of the Islands and Their People

Voidy комментирует...

Voidy таки не совсем прав. Слово lands можно употреблять и в качестве неисчисляемого существительного, а значит its на карте к месту. Алена молодец!

Юрий Крицкий комментирует...

Именно во множественном числе - как неисчисляемое? А где можно увидеть подобное употребление?

Анонимный комментирует...

Просто изумительно!!!

Андрей комментирует...

Здравствуйте Алена!
Карта изумительная! Остроумно и со вкусом!
Может быть стоит так же указать на карте некоторые из шаблонов проектирования? Скажем характерные исключительно для С++.
Для нового стандарта думаю нужно будет разработать целый 3D глобус! Как Вам такая идея? ))))))
А если серьезно, по вашей карте можно проводить первоночальные собеседования при приеме на работу! Пожалуй я так и поступлю! )))

Анонимный комментирует...

Привет! Карта просто загляденье! Правда остается ощущение безжизнености. Может быть наделить её существами? Например в лабиринте шаблонов живет добры волшебник SFINAE. Где-то могла бы обитать хранительница знаний ODR. Маленькие но полезные существа RVO и EBO. RAII могло бы жить на болотах исключений. Вообщем вдохнуть в карту побольше жизни :)

vslaykovsky комментирует...

Повесил карту на картовом хостинге:

http://terapixel.ru/users/vova/albums/25-test/photos/165-

s0me0ne комментирует...

Офигительно. Но не нашёл ссылки, где можно заказать принт. Формата А1. Ну или хотя бы А2. Упущение!

enerjazzer комментирует...

А где же великое и ужасное неопределенное поведение (aka undefined behavior)?

Анонимный комментирует...

хернёй страдаете, господа "картографы"...

vig комментирует...

раз уж пошла такая пьянка, то нарисуйте мне такую по Си!

Вячеслав комментирует...

Привет!
В моём подъезде в лифте разместили рекламу магазина "Клинок" (ТЦ "Европа", г.Нефтеюганск). На рекламном листке изящные клинки разных причудливых форм на фоне карты. Посмотрел бы и забыл, если бы глаз зацепился за знакомые до боли слова: Multiple inheritance, STL, BOOST... Сразу вспомнил вашу карту. Так и есть, рекламщики нашли красивую картинку в Интернете и применили в своих целях. Позавчера зашёл в магазин. Эта карта у них на всю стену растянута! =)
Жаль, что не так много людей в нашем городке могут понять, что скрывается за красивой декорацией.

Alena комментирует...

2Вячеслав:

Потрясающая история :-). Спасибо, порадовали.

Если не очень лень, сфоткайте, пожалуйста. Повешу у себя в блоге. Отличный пример продвижения С++ в массы :-).

Ross комментирует...

Nothing in is there? ?

Mingun комментирует...

К сожалению карта в размере 3298×2288 скачивается не полностью, а постоянно застревает на размере 8,2 Мб (9034086 Байт, если быть точным). Можно ли как то поправить эту досадную багу? Хочется скачать в нормальном разрешении :) С уважением, Mingun.

Alena комментирует...

Mingun

Можно ли как то поправить эту досадную багу? Хочется скачать в нормальном разрешении :) С уважением, Mingun.

Проверила - все ок скачалось. Если у вас так и не получилось - напишите мне мылом или в комментарии, я выложу еще куда-нибудь.

Mingun комментирует...

Алена

Проверила - все ок скачалось.

Эх, если б у меня было бы так же. Не качает, паразит :( Останавливается на все тех же 8822 Кбайт. Качал как через Opera 10.63, так и через Download Master, так и просто открывал картинку в браузере и пытался сохранить - результат один и тот же. Если вам не трудно, не могли бы вы еще куда-нибудь залить и указать размер картинки. С уважением, Mingun.

Alena комментирует...

Mingun

Эх, если б у меня было бы так же. Не качает, паразит :(

Проблемы не только у вас, как оказалось :-(

Выложила сюда:
http://narod.ru/disk/26379278000/cpplands1.png.html

Размер 14.07 Мб

Расскажите тогда, нормально ли все скачалось...

Mingun комментирует...

Алена

Отлично, все великолепно скачалось. Спасибо! С уважением, Mingun.

PS Пошел изучать...

theambient комментирует...

а где же С++0x ??

Alena комментирует...

theambient
а где же С++0x ??

Под С++0x там целая пирамида :-)

Анонимный комментирует...

Того нет, этого нет - какая разница. Был бы бубен, а он есть.

vahotm комментирует...

опечатка: Its known to be incomplet and incorrekt -> incompletE and incorreCt

Alena комментирует...

vahotm

опечатка: Its known to be incomplet and incorrekt -> incompletE and incorreCt

Так и было задумано :-)

Юрий комментирует...

Напомнило старую-добрую игру Arcanum.... Эхххх хорошая все-таки игрушка была, вот только движок у нее тормозной.

А по поводу "обоср", так это ж нормально, для того чтобы критиковать много ума не надо. Только я думал что такое никогда не встречу на англоязычных форумах.

Анонимный комментирует...

Шикарно! Бубен в левом нижнем углу как бы ненавязчиво, но очень в тему)