Новость: C++ в ядре Linux?
(Категория: Linux)
Добавил Roman I Khimov
Пятница, 29 Октябрь 2004, 14:27

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

Патч можно применить к коду ядра (есть версии для ядер 2.6.6 и 2.6.9) и далее использовать все воможности C++ с компилятором GNU g++. Как говорит сама компания, этот патч может помочь, в частности, разработчикам драйверов, которым ранее приходилось использовать лишние "обертки". Данная реализация C++ ABI основана на исходниках GNU g++, но обеспечена работа в режиме ядра и сделано немалое количество оптимизаций.

Но Линус Торвальдс (Linus Torvalds) еще в начале этого года недвусмысленно высказался в отношении использования C++ в ядре. В Linux пытались применить C++ еще в далеком 1992 году, но, по заверениям Линуса, ничего хорошего из этой затеи и не могло выйти.

написал(а) ...
Факт в том, что компиляторы C++ ненадежны. С этим было еще хуже в 1992, но некоторые основополагающие факты не изменились:

  • вся концепция обработки исключений в C++ не работает. Она особенно не работает для ядер
  • любой компилятор или язык, который пытается скрыть от ваших глаз такие вещи как выделение памяти, не есть хороший выбор для ядра
  • вполне можно писать объектно-ориентированный код (полезно для файловых систем и т. д.) на C без того мусора, каким является C++
В целом, я бы сказал, что любой, кто проектирует свои модули для ядра на C++ или
(a) ищет проблем
(b) фанатик C++, который просто не видит, что то, что он пишет, на самом деле все равно C
(c) такое у него задание в школе.

Вы свободны это сделать (d)


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


Источник этой новости Центр информации по операционным системам
( http://www.osrc.info/news.php?extend.946 )