LINUX.ORG.RU

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

Обычно как раз требуется очень приличная квалификация программиста C, чтобы код работал быстро, чётко и прозрачно. Медитировать над классами можно в user-space, в ядро же засовывается очень специфичный базовый код - классы там нах не нужны, равно как и в широком классе вычислительных задач (обычно они там очень вредят).

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

P.S. Уважаемый сэр видел код Linux? Может даже задумывался почему в нём в большинстве случаев common case выполнения функций - это fall through до первого return? Да и вряд ли можно придумать нормальную иерархию классов, т.к. а эффективном моноядре каждая подсистема тесно связана с другими...

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

Это уже ближе к делу. Наверное это Эндрю имел в виду когда говорил о религиозных проблемах с C++ у теперешних разработчиков Линукс?

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

2Murr
> Может даже задумывался почему в нём в большинстве случаев >common case выполнения функций - это fall through до первого return? >Да и вряд ли можно придумать нормальную иерархию классов, т.к. а >эффективном моноядре каждая подсистема тесно связана с другими..

Как тут уже выше правильно заметили ООП это последняя стадия ООД - так что если переписывать (именно переписывать !!!)
ятро на C++ то нужно начинать с его перепроектирования
плюс ко всему пока что нет адекватного инструмента для работы ++
в КМ (g++ часть конструкций языка держит в UM-библиотеках)
А вот про скорость не волнуйся - благодаря тому что C++ это
гибридный язык - узкие места можно будет обойти за счет некоторой
потери абстракции


А так на ++ прекрасно пишутся дрова для NT/2K/XP так что сказка
про 100% кода ядра NT на С/ASM это только сказка ...

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

> Но они забывают, что C++ это полное надмножнство C ...

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

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

Драйвер железяки - это исключительно тривиальная вещь. Регистрирует прерывание, регистрирует диапазон ввода-вывода, ловит прерывание, делает минимальный post-processing и I/O.

Нахрена там нужен C++?

А по поводу Linux - его разработчики используют C не потому что настолько глупые, что не видят огромной ценности использования плюсов, а скорее наоборот ;)

Murr ★★
()

> Это уже ближе к делу. Наверное это Эндрю имел в виду когда говорил о религиозных проблемах с C++ у теперешних разработчиков Линукс?

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

Зачем искать себе на попку проблемы, когда и так все хорошо?

anonymous
()

Первая покупка лицензии SCO Linux

ятро на C++ то нужно начинать с его перепроектирования

А оно кому нужно ?

Вот я пользую ядро прошедшее 10 летний цикл разработки/тестирования.

Ждать еще 10 лет когда появится стабильное ядро на с++ ?

Sun-ch
()

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

Murr ★★
()

2Murr> ООП - это концепция быстрого и простого создания ПО

ну, это ты парень загнул...

я бы сказал по-другому:

сторонняя библиотека, созданная с ипользованием концепций ООП, как правило, может быть легко использована другими для быстрого создания ПО; при этом часто не требуется высокая квалификация (сколько таких программеров знаю...)

а вот создать такую библиотеку на основе ООП - это очень не хилый труд, требующий порою весьма высокой квалификации.

так то, вот :-)

dave ★★★★★
()

Первая покупка лицензии SCO Linux

Драйвер железяки - это исключительно тривиальная вещь. Регистрирует прерывание, регистрирует диапазон ввода-вывода, ловит прерывание, делает минимальный post-processing и I/O.

Ну не все железяки простые, некоторые имеют на борту процессоры с

собственным фирмваре и кучей режимов/подрежимов работы.

Sun-ch
()
Ответ на: комментарий от dave

>сторонняя библиотека, созданная с ипользованием концепций ООП, как правило, может быть легко использована другими для быстрого создания ПО; при этом часто не требуется высокая квалификация (сколько таких программеров знаю...)

Эээ... по вашему нет разницы между модульным программированием и объектно-ориентированным? ;)

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

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

То есть вы можете аргументированно возразить Эндрю Мортону и, в частности, вот этому его высказыванию: "I love C++. Yo can do marvellous things in it. The language can really watch your back for you. Going back to C for Linux was THE HARDEST part for the first couple of months. So crude, so bug-prone..." ?

asaw ★★★★★
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

Обычно программы управления железом реализуются в user-space (по крайней мере у душевно здоровых людей). Драйвер - это другое (его задача куда меньше).

Murr ★★
()

> Эээ... по вашему нет разницы между модульным программированием и объектно-ориентированным? ;)

конечно, есть разница :-)

только я стараюсь делить программистов, как минимум, на две категории (сам прикладной математик):

1) те, кто использует; 2) те, кто создает

в прошлом посте я хотел сказать, что ООП позволяет резко снизить планку для представителей первой категории; а сложности алгоритмов и методов никто, конечно, не отменял; и ООП тут не поможет... :-(

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

2anonymous (*) (2003-08-13 16:50:03.981016);

"Но они забывают, что C++ это полное надмножнство C и поэтому на C++ по определению всегда можно написать то же, что и на C."

Ты обкурился и гонишь ! Нукася, забатцай мне такое на плюсатом 8)
-----------------------------------------------------------------
#include <stdlib.h>
struct flex {
    int mem;
    int arrayWoBoundsSpecified[];
};
struct NotAflex {
    int a[]
    int mem;
};

int main()
{
   size_t len = sizeof(struct flex); 
   struct flex *p = malloc(len + 100);
   p->arrayWoBoundsSpecified[49];

   struct flex *p2 = malloc(len + 80);
   p2->arrayWoBoundsSpecified[39];

   struct flex *p3 = malloc(len + 3);
   p3->arrayWoBoundsSpecified[0];

   struct flex *p4 = malloc(len + 1);
}
-----------------------------------------------------------------

Плюсы это отстой и тупик программирования. Читайте Страустрапа, он честно признался что плюсы изначально через жопу делались методом (то чего нам нехватает мы воткнём, а на последствия пох..)

anonymous
()

Первая покупка лицензии SCO Linux

Обычно программы управления железом реализуются в user-space (по крайней мере у душевно здоровых людей)

Адресное пространство DSP процессора отображено в окно за 640к

процессор фигарит на частоте 2 ГГц, нужно быстро забирать обработанные

буфера,

Какой у тебя будет оверхед переключения km/user mode ?

Sun-ch
()

> То есть вы можете аргументированно возразить Эндрю Мортону и, в частности, вот этому его высказыванию: "I love C++. Yo can do marvellous things in it. The language can really watch your back for you. Going back to C for Linux was THE HARDEST part for the first couple of months. So crude, so bug-prone..." ?

Могу конечно. Коммерческая фирма может позволить себе надрочить десяток программистов и использовать C++ в каких-то проектах. При использовании волонтеров этого делать нельзя ни в коем случае.

Сейчас поднимается время от времени один вопрос - надо ли использовать С++. Вы думаете кому-то из топ-девелоперов хочется объяснять почему не надо использовать те же exception? Или переопределение операций? Или шаблоны?

Вместо одной темы (по которой есть уже фак), будут обсуждаться десятки тем. Будут присылаться сотни заведомо кривых патчей.

И все это без единого мнения за, кроме не умения программировать на С. Нет никого, кто мог бы внятно объяснить, зачем нужен C++?

"THE HARDEST part for the first couple of months."

Два месяца. А потом стало нормально.

anonymous
()

во разорались про плюсы, хоть бы кто-то сказал чем конкретно плюснутое ядро будет лучше, а то создается впечатление, что лучше будет только некоторым личностям которые смогут сказать: "а вот ядро на ц++ написано!"

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


>Драйвер железяки - это исключительно тривиальная вещь. >Регистрирует прерывание, регистрирует диапазон ввода-вывода, >ловит прерывание, делает минимальный post-processing и I/O.

А драйвер FS ? ;)

>Нахрена там нужен C++?

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

>А по поводу Linux - его разработчики используют C не потому что >настолько глупые, что не видят огромной ценности использования >плюсов, а скорее наоборот ;)

"Почему" Мортон вроде бы сказал - ленивые они ;)

sS ★★★★★
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

Ну вообще периферийные устройства в PC уже десятки лет используют DMA, но для техники, не имеющей средств ввода-вывода кроме polling, может и правда имеет смысл делать кусок в ядре (it's not the common case).

Кстати, зачастую такие устройства обслуживаются специализированными процессорами без MMU. Никакого overhead при переключении на ISR на них нет.

P.S. Что такое "kernel mode"? "mode" какого компонента PC? ))

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


>Ты обкурился и гонишь ! Нукася, забатцай мне такое на плюсатом 8)
[skip]

Скипнутый бред это шутка ?

Тогда в каком месте смеятся ?

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


2Murr
>P.S. Что такое "kernel mode"? "mode" какого компонента PC? ))

А у тебя код чем исполняется ? Контроллером прерываний ? :)

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

>> Но они забывают, что C++ это полное надмножнство C ...

>Нет. Не надмножество. Если б он был надмножеством,

ну почти полное надмножество... В C++ более жесткая проверка синтаксиса. Такие опасные и поощряющие разгильдяйство вещи, как вызов ф-ций без прототипов, неописание аргументов функций и.т.д. в C++ запрещены. Да и в C, похоже, все идет к ужесточению синтаксиса. K&R С уже не совсем ANSI С ;)

Murr: >Странно читать рассуждения о необходимой квалификации программиста >плюсов в то время как ООП - это концепция быстрого и простого создания >ПО. ООП это концепция разработки сложных и больших систем. По крайней мере при разработке C++ автор именно это имел в виду. А сложные и большие системы мало имеют общего с низкоквалифицированными програмистами. ;)

anonymous
()

C vs. C++

Знаете, просто есть такая вещь, как привычка. Наверное, все дело в этом.

И много бы людей можно было заставить лет так 30 писать на C? Многие, наверное, ответили бы: "какой там C, это мы напишем на Fortran, PL/I или Кобол! Зачем нам C?" ;-)

dave ★★★★★
()

Первая покупка лицензии SCO Linux

Ну вообще периферийные устройства в PC уже десятки лет используют DMA

А ты думаешь буфер в 128 М видюхи закачивается через DMA :)

Я же сказал адресное пространство отображено в на окно ввода/вывода

Sun-ch
()
Ответ на: комментарий от sS

sS: Нет кодом ядра (kernel address space code), но в параде мод он не участвует.;) Этот термин из документации MS что ли взят? Помню у них такое чудо встречал ...

Murr ★★
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

Sun-ch:

Причем тут видео? Ты ей просто даешь память под текстуры, а карточка самостоятельно их вытягивает (без всякого подсобничества процессора). Или имеется в виду кадровый буфер? Тогда зачем там драйвер? Битблиттинг можно и в user-space реализовать ...

Murr ★★
()

C vs. C++

Некоторые возможности C++ требуют специальной поддержки со стороны компилятора и run-time библиотек. То есть неявно генерируют код (причём неизвестно какой). А это ведёт к потере абсолютного контроля над кодом (имеющимся в C, за исключением setjump/longjump), что для ядра как-то не очень :) Да и для создания эффективного кода на C++ требуется гораздо более высокая квалификация программистов. В C++ возможностей больше, поэтому наломать дров гораздо проще.

c0ff
()

Блин...

Я понял!
На ЛОР-е наверное дохрена писателей ядер операционных систем.
Просто им некогда и влом.

Dimentiy ★★
()

"Знаете, просто есть такая вещь, как привычка. Наверное, все дело в этом. "

Ага. К 2000 году все станут писать на Ада. Рождение и смерть языков несколько разнятся с их рекламой.

anonymous
()

Первая покупка лицензии SCO Linux

Или имеется в виду кадровый буфер? Тогда зачем там драйвер? Битблиттинг можно и в user-space реализовать ...

Где начало кадрового буфера ? Адрес в студию !

Покажи как ты туда запишешь из юзер спейс ?

Учи матчасть про архитектуру x86.

Sun-ch
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

>Где начало кадрового буфера ? Адрес в студию!
Я бы тебе посоветовал что-нибудь по программированию видео-карточек, но что-то в голову ничего не приходит.

>Покажи как ты туда запишешь из юзер спейс?
Отображаешь туда диапазон шинных адресов (через MapViewOfFile или mmap или что-угодно) и пишешь.

>Учи матчасть про архитектуру x86.
Увы, боюсь ты мне ничего нового о ней рассказать не сможешь :( Как и многие другие...

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


>> Но они забывают, что C++ это полное надмножнство C ...

>Нет. Не надмножество. Если б он был надмножеством, то любая >верная >программа на C являлась бы верной программой на C++ причем >с той же семантикой. Что, очевидно, не так.

Пожалуйста те места С которые не являются частью С++
в студию

hint: разница уместится на четверти странички

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


>Слыш эсэсовец, начинай смеятся отсюда http://david.tribble.com/text/cdiffs.htm

И чего ? Где в приведенном куске кода C99 style о котором идет речь
в ссылке ?


BTW: C99 только сейчас стали широко применять в ядре

sS ★★★★★
()

Первая покупка лицензии SCO Linux

Отображаешь туда диапазон шинных адресов (через MapViewOfFile или mmap или что-угодно) и пишешь.

Круто, так я могу любые буфера в ядре переписать из юзер спейс :)

А админу на консоль вывести "Дай чирик, сука, на пиво"

Вся секюрити нафиг.

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

>Ты обкурился и гонишь ! Нукася, забатцай мне такое на плюсатом 8)
>-----------------------------------------------------------------
>#include <stdlib.h>
>struct flex {
> int mem;
> int arrayWoBoundsSpecified[];
>};
>struct NotAflex {
> int a[]
> int mem;
>};

Хорошим тоном было бы перед тем как постить код, попробовать его скомпилить самому. ;)

anonymous
()

плюсы у Страуструпа нарисовались ОЧЕНЬ аппетитными
на это многие и запали, я тоже, грешен :)
постоянно испытываю тягу описать эдак все в одном классе, а затем красиво это дело понаследовать.. затем динамически клепать уже готовые обьекты со всеми их функциями, конструкторами и деструкторами..

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

а вообще говоря в некритичных к эффективности кода приложениях выбор языка - дело вкуса

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


>sS: Нет кодом ядра (kernel address space code)

;)

А я всю жисть думал что код исполняется процессором
(не обязятельно CPU)

sS ★★★★★
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

Насчет MapViewOfFile я утрирую, разумеется. Но всё же в своё время GDI жило в user-space в винде и GDI HEL вроде бы тоже был реализован в user-space. Разумеется, нормальный драйвер должен поддерживать возможности видеокарточки, но это не значит, что в нём сразу иерархия классов появится ;)

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


>Отображаешь туда диапазон шинных адресов (через MapViewOfFile или mmap или что-угодно) и пишешь.

Вообще то через ioremap()

sS ★★★★★
()

C и C++ хоть и являются родственниками исторически разошлись уже давно и являются РАЗНЫМИ языками
о надмножестве и подмоножестве возникает желание говорить разве что после чтения книженок 15 летней давности :)

NiKel
()
Ответ на: Первая покупка лицензии SCO Linux от Sun-ch

2Sun-ch
>Kруто, так я могу любые буфера в ядре переписать из юзер спейс :)

Только ремапленые - если у тебя есть права на сооттветствующий
девайс (обычно адреса ремапят для всяких /dev/*)


sS ★★★★★
()

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

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

>ioremap - это ядреный интерфейс. Он из user-space недоступен.
А ты из UM и не сможешь ничего сделать если нужный кусок адресного пространства не проремапить к себе

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


2NiKel
Тут есть тонкость - про какой С/C++ мы говорим
ANSI/ISO 9899-1989 aka C89 он же ANSI C
ISO/IEC 9899-1990 aka C90 или
ISO/IEC 9899-1999 aka C99

Я говорил про ANSI C vs С++ (последний из стандартов по моему 98 года)

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

BTW, забавно, что Linux не позволяет отобразить диапазон шинных адресов, отличных от RAM. Я был сильно удивлен когда впервые с этим столкнулся.

Murr ★★
()

...только это всё равно не имеет отношения к работе с кадровым буфером ;)

Murr ★★
()

Робяты!!!
А как Иксы в усер спасе жывуть?!
А ведь живуть. И переключение в усер спасе происходит.
А как вообще ОСь работаеть. Аааа тама есть девайса MMU и дривер оный. Так он вообще каждый чих к памяти отрабатывает (че усер, че не усер) - инструкций по двести за раз. И куды производительность только тратится. На фига нам дривер, который просессор загрязняет?!

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