LINUX.ORG.RU

Системное программирования.

 , ,


4

5

Только знакомлюсь с системный программированиям в среде Линукс. Сейчас читаю книжку Роберта Лав «Системное программирования» (1 издания Питер 2008). Знаю, что уже есть 2 издания, но пока в интернете оно на анг., а покупать не хочу. ( С английским туго. ) Может у кого есть скан 2 издания?

В этой книжке идется о программировании на Си и соответственно есть проблемы с С++.

Я понимаю, что программист С++ должен знать Си, но ...

Есть какая нибудь хорошая книжка о системном программировании С++? Или лучше книжка, где проводится сравнения системного программирования Си и С++?

Чтобы параллельно ее читать вместе с Робертом Лав.



Последнее исправление: beastie (всего исправлений: 3)

У C++ нет стандартизированного ABI и мэнглинга. Более того, оные часто меняются просто от версии к версии компилятора. Кроме того, в C++ куча граблей, типа эксепшнов, и разных фич, для которых нужен рантайм.

C++ для системного и низкоуровневого программирования абсолютно непригоден.

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

Получим, внезапно, обычный Си.

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

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

Отрицательные тезисы не доказываются, вообще говоря, ну да ладно.

1) В стандарте C++ нет ни слова об ABI и менглинге(«высокоуровневый язык», херли, негоже такими мелочами заниматься)

2) Докажем от противного. Допустим у C++ есть стандартизированный ABI и мэнглинг. Попробуем написать библиотеку под винду, у которой C++ интерфейс(классы там, функции принимающие C++ные конструкции типа ссылок, итд). Пишем на MSVC++. Попробуем использовать библиотеку из GCC под MinGW/Cygwin. ОЙ. НЕ РАБОТАЕТ. Ч.Т.Д.

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

Отрицательные тезисы не доказываются

Это ты к тому, что можешь ляпнуть «у Си++ нет ABI» и не доказывать свои слова?

В стандарте C++ нет ни слова об ABI и менглинге(«высокоуровневый язык», херли, негоже такими мелочами заниматься)

Покажи мне описание ABI в стандарте Си.

Докажем от противного [...]

Ты даже не понимаешь смысла слова «доказательство».

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от lovesan

ну все, пока.

Бида пичаль, мне так нравились твои сказки.

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

не чуешь разве? говном воняет. вон там выше кучи...

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

Есть тезис и есть антитезис. Тезис доказывается либо энтимемами и силлогизмами, либо опровержением антитезиса. Так что понятие «отрицательный тезис» абсурдно.

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

если допустить, что «программист С++» знает С++, то отсюда будет следовать, что он знает Си

Неверный вывод.

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

уже пригодилась, школота. так что подумай лучше о себе.

Малыш, сколько тебе лет?

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

У C++ нет стандартизированного ABI и мэнглинга.

Это действительно проблема. Но вопрос в другом - а что мешает их сделать? На самом деле, если поставить цель, она будет легко достигнута (в той же винде смогли более-менее стандартизировать всякие COM/ActiveX и экспорт классов из dll, так что задача принципиально решаемая).

Только исходить надо не от всяких BeOS/Haiku, а от более-менее солидного комитета по стандартизации.

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

И много того ООПа в Tk?

При желании даже в Haskell можно найти ООП не выходя за рамки функций и каррирования :) А если упоротся, то ООП даже в bash'е мерещится...

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

Если бы "царь" не изрыгал потоки говна, то было бы значительно интересней. А так — только до конструктива дойдет, как он всех обматерит и получит очередной бан..

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

Так он и изрыгает тонны говна, чтоб до конструктива не доходить. Это типичная защитная реакция при комплексе неполноценности и осознании собственной ущербрости. А потом еще начнется «я пишу только под линух», «я пишу только под gcc», «я пишу только под такой-то процессор и чтоб такой-то производитель памяти». За всем этим просто нулёвый трус, который хочет быть похожим на кого-то, но умишко не позволяет. Остается только изрыгать тонны говна, потому что больше ничего не умеет.

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

По крайней мере, иной раз насчет gcc в линуксе он дельные вещи говорит. Просто фильтровать среди потоков говна сложно.

А мастдайка и т.п. нафиг не нужны на этом форуме. Как и буржуйские компиляторы. Разве что clang под "буржуйские" не подходит. Но он вроде как пока еще не до конца оформился... Я не думаю, что ближайшие лет 5 (а то и 10) стоит ждать массового перехода на clang: народ привык к gcc и его препроцессорным директивам; чтобы радикально менять компилятор, нужна очень веская причина (скажем, возможность более детальной трассировки на стадии отладки или что-нибудь подобное).

Eddy_Em ☆☆☆☆☆
()

NegatiV, придумай что-нибудь эдакое, на час-полтора сидения за компьютером. И посмотрим, как "царь" и "аноним" справятся. =D

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

Да вот думаю.) Он упрекает меня в том что я перевожу задачу в сферу где эрланг не соснет (распределенка и параллелизм), а при этом тянет одеяло в сторону производительности, где не соснет си. Пока склоняюсь к фронтэнду с балансировщиком (может даже с round-robin'ом) на 2-5к соединений, динамически подключаемые вычислительные узлы. В качестве полезной работы склоняюсь к вычислению хэшей для блоков данных, их сохранение и фетчинг - здесь будет огромный выигрыш у си.

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

Числодробилки на С не проблема и вполне решаются «в лоб». Хочется потоков, распределенки, сети и прочих прелестей. Тем более Эрланг для числодробилки не фонтан, а мы договорились что я пользусь только стандартным бандлом эрланга и не пишу ничего на С для числодробления.

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

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

Эрланг для числодробилки не фонтан

Каким тут боком этот эрланг?

Eddy_Em ☆☆☆☆☆
()

должен

Никто ничего никому не должен. Ядро хайку, например, написано на Си++, ЕМНИП.

проводится сравнения системного программирования Си и С++?

Не помню такого.

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

Хорошо если алгоритм параллелится (tree hash, например), иначе ничего кроме как считать год не остается. Эрланг при том что я на нем должен буду воспроизвести такую же функциональность.

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

То, что ты ламер и не понимаешь шуток про строки в эрланге...

... не даёт тебе права кукарекать по этому поводу.

anonymous
()

Смотрю, здесь происходит вынос Царя из треда...

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

Создание списка.

N = 1000,
Di = [ I || I <- lists:seq(1, N).
Добавляем элемент в конец списка (примитивная версия, лень юзать аккумулятор):
push_back(Lst, El) ->
  Lst ++ [El].
Выкидываем элементы начиная с первого:
pop_front([]) ->
  empty;
pop_front([H | Tail]) ->
  {H, Tail}.
Циклы писать лень, ибо рекурсия и ничего интересного.

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

Lst ++ [El]

лучше так [El|Lst], а потом revert. Так быстрее будет. Лучше спроси у него в ответ, как он будет на сях писать рекурсивный обход графа с 100000000 элементами для поиска какого-нибудь экстремального пути например.

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

Я знаю. =) Специально написал что версия примитивная. =)

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

В данном случае, кстати, не критично: Список придется обойти все равно один раз: либо reverse'ом либо ++. Жопа начинается на конструкциях вида L1 ++ L2 ++ L3.

NegatiV
()
Последнее исправление: NegatiV (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Что подразумевается под системным программированием?

То, что во втором разделе man'a.

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

Системное программирование нужно, спрюс-сплюс нужен, а С ненужен.

Если не ставить вопрос ребром, то С++ упрощает многие задачи, возникающие при программировании на С.
Вот к примеру: как с функции на С вернуть строку заранее неизвестного размера?

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Где наследование?

Ахтунг, вещества. Да пожалуйста:

typedef struct base_t {
    int a, b;
};

typedef struct derived_t {
   int c;
   base_t base; 
};

void foo(base *b) {
    if (b) {
        printf("a: %d b: %d\n", b->a, b->b)
    }
}

int main() {
    derived_t d = { 3, { 2, 1 } };
    foo(d->base);

    return 0;
}

Только вручную риходится делать работу static_cast. И не надо меня упрекать в том, что я не отличаю наследование от агрегирования.

KennyMinigun ★★★★★
()
Ответ на: комментарий от nanoolinux
int get_and_return_string(char *str, int *str_len);

Но ведь тут мы получаем строку извне (непонятно где и как инициализированную). Ладно, допустим:

int size = 128;
int real_length = size;
char *str = (char *)malloc(size);

int real_length = get_and_return_string(str, &real_length);
if (real_length > size) {
    // вызываем снова с большим буффером?
}

KennyMinigun ★★★★★
()
Ответ на: комментарий от NegatiV
size_t get_and_return_string(char **out);

char *str = NULL;
size_t sz = get_and_return_string(&str);

И что потом делать со строкой? free? А вдруг она статическая? А если статическая и дёрнуть get_and_return_string еще раз — str вдруг поменяется.

Да, но это сколько мороки на ровном месте. А ведь с использванием stl это как «два байта об асфальт»:

// in-place
std::string& getAndReturnString(std::string &str);

// copy
std::string getAndReturnString(const std::string &str);

// и вообще: задача была только вернуть строку
std::string mkstring();

И тут же получаем умный контейнер «искаропки», а на С для «образумливания» наверняка бы структура понадобилась. Да и с выделением памяти морока.

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 2)
Ответ на: комментарий от KennyMinigun

Ты чего хочешь? Выделить место под строку? Юзай маллок. Ты же знаешь её размер правда? Если ты с ней хочешь что-то там сделать - вот тебе указатель и размер - бери и делай. Хочешь удобства юзай йаву или связный список буковок.

И вообще, с (как и спп в общем то) и строки - ссзб.

nanoolinux ★★★★
()
Последнее исправление: nanoolinux (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.