Linus VS C++
От: Кирилл Блаженнов  
Дата: 15.06.11 08:43
Оценка: 1 (1)
Вот здесь Торвальдс расписывает следующее:
1) С++ — говно.
2) С рулит

Прочитал статью — там вообще здоровая аргументация имеется?
Кто что думает по этому поводу?
Re: Linus VS C++
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 15.06.11 08:48
Оценка:
Здравствуйте, Кирилл Блаженнов, Вы писали:

КБ>Вот здесь Торвальдс расписывает следующее:

КБ>1) С++ — говно.
КБ>2) С рулит

КБ>Прочитал статью — там вообще здоровая аргументация имеется?

Нет, аргументация неосилятора.
КБ>Кто что думает по этому поводу?
Ну он гнёт свою линию С форева, С++ мастдай.
Sic luceat lux!
Re: Linus VS C++
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.06.11 08:59
Оценка: 3 (2) +5 -1
Здравствуйте, Кирилл Блаженнов, Вы писали:

КБ>Вот здесь Торвальдс расписывает следующее:

КБ>1) С++ — говно.
КБ>2) С рулит

Вообще-то в этой статье Торвальдс ничего не расписывает. Расписывает автор статьи, и он заметно уводит разговор в сторону.

КБ>Прочитал статью — там вообще здоровая аргументация имеется?


У кого? У Торвальдса — да. У автора статьи — нет, у него национальное русское блюдо "каша в голове", потому что он не представляет себе отличия программирования для ядра и пытается применять аргументы типа "в C stdio нельзя читать строки произвольной длины", хотя и ничего ему не мешает, и stdio не единственное IO для C (вспомним хотя бы sfio), и — что самое главное — stdio в ядре это полная чушь (хотя есть пара внешне похожих функций типа kprintf, тем не менее даже приблизительного аналога нет и не будет).

КБ>Кто что думает по этому поводу?


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

Если бы существовала промышленная поддержка промежуточного между C и современным C++ языка, который имеет классы и инкапсуляцию, наследование (можно без множественного) и виртуальные методы, пространства имён (то есть приблизительно равно так называемой C++ версии 1.5, по нумерации Страуса и cfront) — то это был бы отличный язык для ядра. Но C++ пошёл дальше и стал слабо пригодным к этому.

Если попытаться включить STL, то потребовался бы отдельный безумный пласт работы по её адаптации не на общепринятые в userland методы межзадачной синхронизации типа мьютексов, а на те, что в современном ядре, начиная с RCU и продолжая вплоть до спинлоков.

Именно об этом стоило бы говорить в контексте "Linus & C++", а не тот бред, что в статье.
The God is real, unless declared integer.
Re: Linus VS C++
От: denisko http://sdeniskos.blogspot.com/
Дата: 15.06.11 09:02
Оценка:
Здравствуйте, Кирилл Блаженнов, Вы писали:

КБ>Вот здесь Торвальдс расписывает следующее:

КБ>1) С++ — говно.
КБ>2) С рулит

КБ>Прочитал статью — там вообще здоровая аргументация имеется?хЪ

Неа, тезисно.
0. Сразу назвать оппонента *даком, это задаст нужный тон академической дискуссии (дискуссия там шикарная, есть даже пара адекватов).
1. C++ говно потому что говно, те кто думает иначе -- гавнюки.
2. Если бы единственной причиной использовать C было не допустить в проект программистов C++, то он бы это сделал, потому что он бохъ, а они см. п.1.
3. Те, кто не согласен со мной гавнюки и скорее всего пишут на С.
4. Халва!Халва!Халва!
5. Не нравится C, переходи на ....
КБ>Кто что думает по этому поводу?
Либо у Торвальдса ПМС и плохое настроение, либо он настоящий вождь красноглазых.
<Подпись удалена модератором>
Re: Linus VS C++
От: Artifact  
Дата: 15.06.11 09:25
Оценка:
Здравствуйте, Кирилл Блаженнов, Вы писали:

По мне, так Торвальдс наехал на объектно-ориетированное программирование, а не на С++. Там конкретно про С++ ничего не написано.
__________________________________
Не ври себе.
Re[2]: Linus VS C++
От: Abyx Россия  
Дата: 15.06.11 09:55
Оценка:
Здравствуйте, netch80, Вы писали:

КБ>>Прочитал статью — там вообще здоровая аргументация имеется?


N>У кого? У Торвальдса — да. У автора статьи — нет, у него национальное русское блюдо "каша в голове", потому что он не представляет себе отличия программирования для ядра


так у вас та же каша

N>Ряд факторов, которые для обычного прикладного софта имеют малое значение, принципиальны для ядра. И именно эти факторы являются слабоуправляемыми или вообще неуправляемыми при написании на C++. В их число входит, например, объём сгенерированного кода (в основном того, что из шаблонов), детали реализации структур данных в STL и аналогах. Невозможно без существенных потерь исключить обработку исключений и поддержку RTTI.


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

а что там с исключениями? я хз как у вас в линуксе, но например в винде в ядре есть исключения, причем в Си

N>Если попытаться включить STL, то потребовался бы отдельный безумный пласт работы по её адаптации не на общепринятые в userland методы межзадачной синхронизации типа мьютексов, а на те, что в современном ядре, начиная с RCU и продолжая вплоть до спинлоков.


какая еще синхронизация в STL?
или вы не про STL а про стандартную библиотеку? так там тоже нет синхронизации %)
In Zen We Trust
Re[3]: Linus VS C++
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.06.11 10:03
Оценка: 1 (1)
Здравствуйте, Abyx, Вы писали:

N>>У кого? У Торвальдса — да. У автора статьи — нет, у него национальное русское блюдо "каша в голове", потому что он не представляет себе отличия программирования для ядра

A>так у вас та же каша

В чём?

N>>Ряд факторов, которые для обычного прикладного софта имеют малое значение, принципиальны для ядра. И именно эти факторы являются слабоуправляемыми или вообще неуправляемыми при написании на C++. В их число входит, например, объём сгенерированного кода (в основном того, что из шаблонов), детали реализации структур данных в STL и аналогах. Невозможно без существенных потерь исключить обработку исключений и поддержку RTTI.

A>чем вам мешает RTTI которое никак не связано с ОС?
A>какбэ RTTI реализуется константными статическими структурами данных, привязанными к таблицам виртуальнцых методов.

Мешает, например, тем, что невозможно предсказать, в каком именно модуле будет заведена эта таблица. Практически она заводится в каждом, с помощью COMMON-блоков (в терминологии COFF — COMDAT-записей).
Это хорошо, если речь идёт о итоговом монолитном бинарнике, но с модульной структурой ядра это превращается в кошмар.

A>а что там с исключениями? я хз как у вас в линуксе, но например в винде в ядре есть исключения, причем в Си


Я знаю про SEH, но копировать его или аналог в Linux не стали. И, кстати, SEH достаточно сильно отличается от исключений C++ (и попытки объединить их в единый механизм имеют существенные проблемы).
В общем вопроса не понял. Исключения — достаточно специфический механизм; самое неприятное для ядерного программирования — что в некоторых случаях их в принципе нельзя допускать, или делать сложные и дорогие схемы перехвата.

N>>Если попытаться включить STL, то потребовался бы отдельный безумный пласт работы по её адаптации не на общепринятые в userland методы межзадачной синхронизации типа мьютексов, а на те, что в современном ядре, начиная с RCU и продолжая вплоть до спинлоков.

A>какая еще синхронизация в STL?
A>или вы не про STL а про стандартную библиотеку? так там тоже нет синхронизации %)

По тому, что я видел, она кое-где таки есть. Даже в сишной библиотеке не зря отличаются fputc() и fputc_unlocked().
The God is real, unless declared integer.
Re[4]: Linus VS C++
От: Abyx Россия  
Дата: 15.06.11 10:28
Оценка:
Здравствуйте, netch80, Вы писали:

A>>чем вам мешает RTTI которое никак не связано с ОС?

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

N>Мешает, например, тем, что невозможно предсказать, в каком именно модуле будет заведена эта таблица. Практически она заводится в каждом, с помощью COMMON-блоков (в терминологии COFF — COMDAT-записей).

N>Это хорошо, если речь идёт о итоговом монолитном бинарнике, но с модульной структурой ядра это превращается в кошмар.

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

N>>>Если попытаться включить STL, то потребовался бы отдельный безумный пласт работы по её адаптации не на общепринятые в userland методы межзадачной синхронизации типа мьютексов, а на те, что в современном ядре, начиная с RCU и продолжая вплоть до спинлоков.

A>>какая еще синхронизация в STL?
A>>или вы не про STL а про стандартную библиотеку? так там тоже нет синхронизации %)

N>По тому, что я видел, она кое-где таки есть. Даже в сишной библиотеке не зря отличаются fputc() и fputc_unlocked().

так библиотека ввода-вывода это не STL
In Zen We Trust
Re[2]: Linus VS C++
От: vdimas Россия  
Дата: 15.06.11 21:29
Оценка:
Здравствуйте, netch80, Вы писали:


N>Если бы существовала промышленная поддержка промежуточного между C и современным C++ языка, который имеет классы и инкапсуляцию, наследование (можно без множественного) и виртуальные методы, пространства имён (то есть приблизительно равно так называемой C++ версии 1.5, по нумерации Страуса и cfront) — то это был бы отличный язык для ядра. Но C++ пошёл дальше и стал слабо пригодным к этому.


Дык есть EC++: это просто С с классами и шаблонами. Без виртуального/множественного наследования и исключений.
Re[3]: Linus VS C++
От: ononim  
Дата: 16.06.11 06:38
Оценка:
A>а что там с исключениями? я хз как у вас в линуксе, но например в винде в ядре есть исключения, причем в Си
А вы в курсе что в ядре винды SEH не работает на irql>PASSIVE_LEVEL ?

N>>Если попытаться включить STL, то потребовался бы отдельный безумный пласт работы по её адаптации не на общепринятые в userland методы межзадачной синхронизации типа мьютексов, а на те, что в современном ядре, начиная с RCU и продолжая вплоть до спинлоков.

A>какая еще синхронизация в STL?
A>или вы не про STL а про стандартную библиотеку? так там тоже нет синхронизации %)
Ну фиг с ней, с синхронизацией. Но есть две большие неприятности, которые могут превратить в геморрой работу с СТЛ. Первая — размер стека. В ядре винды он 12кб. Потому стандартные тактики типа создать на стеке структурку и потом всунуть ее в vector уже чреваты. Вторая — irql и разные пулы памяти. Не любую выделенную на PASSIVE память мона читать на более высоком уровне. Придется вводить дополнительные аллокаторы с обязаловкой их указания при инстанциировании контейеров.
Как много веселых ребят, и все делают велосипед...
Re: Linus VS C++
От: __UNIX_hokum  
Дата: 17.06.11 11:32
Оценка: -1
На плюсах можно ваять эффективны код даже для 8-bit контроллеров. Так что, не все Торвальдсы одинаково полезны.
Re[2]: Linus VS C++
От: Erop Россия  
Дата: 17.06.11 11:55
Оценка: +1
Здравствуйте, netch80, Вы писали:

N>Невозможно без существенных потерь исключить обработку исключений и поддержку RTTI.


Это не так.

N>Если бы существовала промышленная поддержка промежуточного между C и современным C++ языка, который имеет классы и инкапсуляцию, наследование (можно без множественного) и виртуальные методы, пространства имён (то есть приблизительно равно так называемой C++ версии 1.5, по нумерации Страуса и cfront) — то это был бы отличный язык для ядра. Но C++ пошёл дальше и стал слабо пригодным к этому.


Ну, казалось бы, сильно ограничить использование шаблонов + полностью отказаться от stl и вперёд...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Linus VS C++
От: 0xC0DE  
Дата: 17.06.11 12:36
Оценка: -1
Здравствуйте, __UNIX_hokum, Вы писали:

__U>На плюсах можно ваять эффективны код даже для 8-bit контроллеров. Так что, не все Торвальдсы одинаково полезны.


Можно, но шаблоны таки использовать нежелательно — памяти может не хватить.
Re[3]: Linus VS C++
От: 0xC0DE  
Дата: 17.06.11 12:39
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, netch80, Вы писали:


N>>Невозможно без существенных потерь исключить обработку исключений и поддержку RTTI.


E>Это не так.


N>>Если бы существовала промышленная поддержка промежуточного между C и современным C++ языка, который имеет классы и инкапсуляцию, наследование (можно без множественного) и виртуальные методы, пространства имён (то есть приблизительно равно так называемой C++ версии 1.5, по нумерации Страуса и cfront) — то это был бы отличный язык для ядра. Но C++ пошёл дальше и стал слабо пригодным к этому.


E>Ну, казалось бы, сильно ограничить использование шаблонов + полностью отказаться от stl и вперёд...


На самом деле кому сильно надо — тот так и делает. Собсна и сама Atmel рекомендует такую практику, если пишешь для восьмибитных AVR, а чистый C не устраивает.
Re: Linus VS C++
От: Mamut Швеция http://dmitriid.com
Дата: 17.06.11 14:48
Оценка: +1
КБ>Кто что думает по этому поводу?

Mike Williams, один из создателей Erlang'а: «C++ и Java не нужны»


dmitriid.comGitHubLinkedIn
Re[3]: Linus VS C++
От: __UNIX_hokum  
Дата: 18.06.11 05:00
Оценка: 2 (2) +2
> Можно, но шаблоны таки использовать нежелательно — памяти может не хватить.

Ой, да ладно, вроде, без шаблонов невозможно наговнякать код, который отожрёт всю память, и ещё попросит. Если понимать работу шаблонов, то можно писать код, не уступающий обычному, C-шному, как по размерам, так и по скорости.
Re[3]: Памяти чего?
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 20.06.11 06:04
Оценка: +3
CDE>Можно, но шаблоны таки использовать нежелательно — памяти может не хватить.

Ау, в танке! Для разворачивания шаблонов память нужна во время компиляции! Размер/производительность/прожорливость скомпилиованного кода для шаблонов и #define будет абсолютно одинаковая.
Не надо путать с шаблоны исключениями и кучей.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re: Дочитал
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 20.06.11 08:16
Оценка:
Здравствуйте, Кирилл Блаженнов, Вы писали:

КБ>Прочитал статью — там вообще здоровая аргументация имеется?

КБ>Кто что думает по этому поводу?
ИМХО, всем этим дрочиловом а-ля "правильный язык — неправильный язык" занимаются люди, "сидящие на бюджете". Ни одна из мне известных фирм не выбирала язык по принципу "этот хороший, этот плохой".
А самая частая причина, по которой низкоуровневые вещи пищут на Си "in industry" — сишники дешевле плюсников того же уровня. Все дела.
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[2]: Дочитал
От: Eugeny__ Украина  
Дата: 20.06.11 08:59
Оценка:
Здравствуйте, Wissenschaftler, Вы писали:


W>А самая частая причина, по которой низкоуровневые вещи пищут на Си "in industry" — сишники дешевле плюсников того же уровня. Все дела.


Еще — Си просто проще. Я не сишник, и последний раз писал на Си(++) в институте лабы. Я жавист, с 3-го курса пишу на жабе. Но недавно проект на Си сделал без проблем(был единственный фейл — я забыл, что char в си однобайтный, но решилось быстро), причем проект под девайс с 64К памяти и прочими незавидными характеристиками(проц медленный, видно отображение символов на текстовом экране). На плюсах я бы задолбался. А так — несколько простых правил: выделяем все на стеке(памяти и так мало, с кучей заморачиваться нет смысла), не возвращаем локальные переменные и... Да и все, по сути. Разве что работа со строками немного парит(ну, после высокоуровневых языков, а либы не сильно поподключаешь в такой проект, ограничение на размер бинарника 90 килобайт), но все решаемо. А плюсовика на небольшой проект нанимать было бы дорого и бессмысленно.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[3]: Дочитал
От: sysenter  
Дата: 20.06.11 09:52
Оценка: -2
Здравствуйте, Eugeny__, Вы писали:

E__>был единственный фейл — я забыл, что char в си однобайтный


Ага, щас, в Си sizeof(char) = 4, в С++ sizeof(char) = 1.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.