Тема: Почему большинство софта для *nix систем написано на С, а не на С++

Ответить в теме
Страница 5 из 6 ПерваяПервая ... 3 4 5 6 ПоследняяПоследняя
Показано с 81 по 100 из 109
  1. Вверх #81
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    короче, я решил продолжить преподачу
    специально для людей, которые не любят шаблоны, обожают препроцессор, считают, что язык ограничивается синтаксисом, что компилятор сводится к парсеру, что с компилируется с линейной скоростью, а с++ - с нулевой

    Код:
    [18:47:19 pal@localhost ~/tmp/4]$ cat d.cpp 
    #include <iostream>
    #include <cstdlib>
    
    int main ( int argc, const char * * argv ) {
    	int n = 5;
    	if ( argc == 2 )
    		n = std :: atoi ( argv [ 1 ] );
    	std :: cout << "#include <stdio.h>\n"
    		"#define xstr(s) str(s)\n"
    		"#define str(s) #s\n"
    		"#define F0 0\n";
    	for ( int i = 1; i <= n; i ++ )
    		std :: cout << "#define F" << i << " F" << i - 1 << "+F" << i - 1 << '\n';
    	std :: cout << "int main ( ) {\n"
    		"	const char * a = xstr(F" << n <<");\n"
    		"	puts ( a );\n"
    		"	return 0;\n"
    		"}\n";
    }
    g++ -o d d.cpp
    Код:
    [18:45:35 pal@localhost ~/tmp/4]$ for i in `seq 10 100`; do ./d $i > t$i.c && echo $i && time gcc t$i.c -o t$i; done
    10
    
    real	0m0.100s
    user	0m0.032s
    sys	0m0.019s
    11
    
    real	0m0.072s
    user	0m0.041s
    sys	0m0.018s
    12
    
    real	0m0.099s
    user	0m0.031s
    sys	0m0.024s
    13
    
    real	0m0.099s
    user	0m0.039s
    sys	0m0.024s
    14
    
    real	0m0.099s
    user	0m0.043s
    sys	0m0.031s
    15
    
    real	0m0.116s
    user	0m0.060s
    sys	0m0.021s
    16
    
    real	0m0.168s
    user	0m0.065s
    sys	0m0.042s
    17
    
    real	0m0.221s
    user	0m0.102s
    sys	0m0.055s
    18
    
    real	0m0.339s
    user	0m0.191s
    sys	0m0.082s
    19
    
    real	0m0.630s
    user	0m0.343s
    sys	0m0.137s
    20
    
    real	0m1.276s
    user	0m0.611s
    sys	0m0.295s
    21
    
    real	0m2.609s
    user	0m1.207s
    sys	0m0.610s
    22
    
    real	0m4.603s
    user	0m2.410s
    sys	0m1.183s
    23
    
    real	0m9.249s
    user	0m4.674s
    sys	0m2.305s
    24
    											^C													
    real	0m26.975s
    user	0m0.000s
    sys	0m0.004s
    последнее ушло в дикий свопомет на 4г, пришлось прибивать
    Код:
    [18:59:34 pal@localhost ~/tmp/4]$ ls -l t*
    -rwxrwxr-x 1 pal pal     9063 Май  6 18:45 t10
    -rw-rw-r-- 1 pal pal      314 Май  6 18:45 t10.c
    -rwxrwxr-x 1 pal pal    10743 Май  6 18:45 t11
    -rw-rw-r-- 1 pal pal      334 Май  6 18:45 t11.c
    -rwxrwxr-x 1 pal pal    14839 Май  6 18:45 t12
    -rw-rw-r-- 1 pal pal      354 Май  6 18:45 t12.c
    -rwxrwxr-x 1 pal pal    23031 Май  6 18:45 t13
    -rw-rw-r-- 1 pal pal      374 Май  6 18:45 t13.c
    -rwxrwxr-x 1 pal pal    39415 Май  6 18:45 t14
    -rw-rw-r-- 1 pal pal      394 Май  6 18:45 t14.c
    -rwxrwxr-x 1 pal pal    72183 Май  6 18:45 t15
    -rw-rw-r-- 1 pal pal      414 Май  6 18:45 t15.c
    -rwxrwxr-x 1 pal pal   137719 Май  6 18:45 t16
    -rw-rw-r-- 1 pal pal      434 Май  6 18:45 t16.c
    -rwxrwxr-x 1 pal pal   268791 Май  6 18:45 t17
    -rw-rw-r-- 1 pal pal      454 Май  6 18:45 t17.c
    -rwxrwxr-x 1 pal pal   530935 Май  6 18:45 t18
    -rw-rw-r-- 1 pal pal      474 Май  6 18:45 t18.c
    -rwxrwxr-x 1 pal pal  1055223 Май  6 18:45 t19
    -rw-rw-r-- 1 pal pal      494 Май  6 18:45 t19.c
    -rwxrwxr-x 1 pal pal  2103799 Май  6 18:45 t20
    -rw-rw-r-- 1 pal pal      514 Май  6 18:45 t20.c
    -rwxrwxr-x 1 pal pal  4200951 Май  6 18:45 t21
    -rw-rw-r-- 1 pal pal      534 Май  6 18:45 t21.c
    -rwxrwxr-x 1 pal pal  8395255 Май  6 18:45 t22
    -rw-rw-r-- 1 pal pal      554 Май  6 18:45 t22.c
    -rwxrwxr-x 1 pal pal 16783863 Май  6 18:46 t23
    -rw-rw-r-- 1 pal pal      574 Май  6 18:45 t23.c
    -rw-rw-r-- 1 pal pal      594 Май  6 18:46 t24.c
    Код:
    [19:05:01 pal@localhost ~/tmp/4]$ cat t24.c 
    #include <stdio.h>
    #define xstr(s) str(s)
    #define str(s) #s
    #define F0 0
    #define F1 F0+F0
    #define F2 F1+F1
    #define F3 F2+F2
    #define F4 F3+F3
    #define F5 F4+F4
    #define F6 F5+F5
    #define F7 F6+F6
    #define F8 F7+F7
    #define F9 F8+F8
    #define F10 F9+F9
    #define F11 F10+F10
    #define F12 F11+F11
    #define F13 F12+F12
    #define F14 F13+F13
    #define F15 F14+F14
    #define F16 F15+F15
    #define F17 F16+F16
    #define F18 F17+F17
    #define F19 F18+F18
    #define F20 F19+F19
    #define F21 F20+F20
    #define F22 F21+F21
    #define F23 F22+F22
    #define F24 F23+F23
    int main ( ) {
    	const char * a = xstr(F24);
    	puts ( a );
    	return 0;
    }


  2. Вверх #82
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    то что вы указали я уже опровергнул. Эрланг ВМ имееет совершенно другие принципы. Там для блокирующих операций есть потоки ОС, и используются они как расходный материал. когда нужна блокирующая операция(да и любое общение с внешним миром), из пула берётся свободнй поток и сообщение шлётся ему.

    Таким образом на 10000 зелёных потоков мы имеем 100 ОС-потоков поторые можно подставить под удар.

    Неожиданно ?
    т.е. они используют схему mxn
    это не ново, давно испытано и выброшено
    во первых, использование ядерных потоков - это уже совсем не "Монотридный сервачок", так что тут дискуссию можно сразу завершать
    во вторых тема назначения разным потокам разных realtime scheduling policies не раскрыта
    во третих, давно показано, что mxn не сосет только на кривых ядрах
    на ядрах с быстрыми потоками mxn просасывает 1x1
    на то есть много причин, в которые тут нет смысла углубляться

  3. Вверх #83
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    во первых препроцессор не любимый. просто наименьшее из зол. во вторых при компиляции вы забыли -o1(никто же не виноват что программист хочет 0+0+0+0+0+...n).

  4. Вверх #84
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    препроцессор - наибольшее из зол

    а этот параметр, во первых, пришется по другому, а во вторых, ничем не поможет, т.к. там результат не вычисляется, а просто все преобразуется в строку, т.е. программа выглядит так : main ( ) { a = "0+0+0+0....."; puts ( a ); }

  5. Вверх #85
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    сгенерировали дерево ~16 783 863 байт и бог знает сколько нодов рекурсией за 10 секунд и вам мало ? да вы наверное шутите..

  6. Вверх #86
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    ты нить не потерял ?
    мы обсуждаем линейную зависимость времени компиляции от размера программ на с
    а в моем наглядном примере она квадратичная

  7. Вверх #87
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    s/программ/исходников/

  8. Вверх #88
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    времени компиляции
    по идее тут время обработки препроцессора.
    я думаю она квадратичная, потому что генерируемое дерево квадратично.

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

  9. Вверх #89
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    s/квадратичная/экспоненциальная/

  10. Вверх #90
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    по идее тут время обработки препроцессора.
    я думаю она квадратичная, потому что генерируемое дерево квадратично.

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

  11. Вверх #91
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    да. я тоже чувствовал противоречие. да и маловато что то получается.
    Ну так и что ?
    Генерим дерево с количеством узлов экпоненциально зависящим от высоты дерева, получаеем экспоненциальную сложность по времени.. и немножечко больше по памяти изза рекурсии.

  12. Вверх #92
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    а если вывести в файл то, что получилось после проходя компилятора, то скорость вообще будет бесконечной
    эм. s/скорость/время ?

    как вы сами обьяснили, генерируется просто строка.
    ну не всё ли равно, пихать в исходник массив на 1к кб, или 100мб.

  13. Вверх #93
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    эм. s/скорость/время ?
    нет, время как раз будет нулевым
    как вы сами обьяснили, генерируется просто строка.
    ну не всё ли равно, пихать в исходник массив на 1к кб, или 100мб.
    дык, в исходнике массива нет
    в исходнике несколько строк, а массив генерится препроцессором
    тут некоторые сильно ругали шаблоны за то, что они могут генерить

  14. Вверх #94
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    а я понял. вы таким грязным способом просто опровергаете то что было.
    обьективность такая обьективная...

    использование ядерных потоков - это уже совсем не "Монотридный сервачок"
    любое планирвоание потоков - тоже поток. ассинхронная работа с сокетами - тоже поток, только в режиме ядра. Всё "зелёное" выполняется отдельно, всё блокирующее отдельно.

    ну и я не уверен что програмные потоки эрланга, где вообще нет разделяемого состояния можно сравнивать с Осью и жавой. Никто не притендует на хард рилтайм. Честного адекватного времени отклика вполне вхатает для энтерпрайза jabber.ru, facebook...

    Пока живут... еще никто выкидывал это с криками "так оно ж mxn, которое ересь и не есть выход."
    Последний раз редактировалось blackSun; 06.05.2009 в 19:32.

  15. Вверх #95
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    любое планирвоание потоков - тоже поток. ассинхронная работа с сокетами - тоже поток, только в режиме ядра. Всё "зелёное" выполняется отдельно, всё блокирующее отдельно.
    это просто челы нутром понимают, что на зеленых далеко не уедешь, а бросать жалко
    "у нас типа почти зеленые потоки"
    я утверждаю, что у таких потоков нет существенных отличий от многопоточной программы, в которой есть select(2), это просто частный случай нормальной многопоточной программы
    ну и я не уверен что програмные потоки эрланга, где вообще нет разделяемого состояния можно сравнивать с Осью и жавой
    там конечно же есть разделяемое состояние, оно просто в той или иной степени недоступно программисту
    это опять частный случай

  16. Вверх #96
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    тут некоторые сильно ругали шаблоны за то, что они могут генерить
    Ну я не люблю макросы. Да и страшные они своей непредсказуемостью и тяжестью отладки. на них только swap всякие были, да и то с инлайнами можно о них забыть.

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

  17. Вверх #97
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    еще никто выкидывал это с криками "так оно ж mxn, которое ересь и не есть выход."
    в линухе выкинули даже не взяв, в freebsd помучались и выкинули
    кто следующий ?

  18. Вверх #98
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    Цитата Сообщение от blackSun Посмотреть сообщение
    А темплейты юзают повсеместно, и даже говорят что это нормальная и хорошая практика.
    ибо это правильно сделанные макросы
    которые знают о типах, о строках исходников и вобще о языке, в отличие от препроцессора, которому все равно, что за мусор обрабатывать
    в с++0х с концептами будет вообще песня

  19. Вверх #99
    Посетитель
    Пол
    Мужской
    Возраст
    36
    Сообщений
    202
    Репутация
    7
    там конечно же есть разделяемое состояние, оно просто в той или иной степени недоступно программисту
    это опять частный случай
    ну в контексте машины эрланга нету. абстракция же.
    в линухе выкинули даже не взяв, в freebsd помучались и выкинули
    Ваще мне всёравно убого/не убого. пока что хорошо работает, и если буду писать сервер то обязательно на эрланге. Тоесть я не хочу спорить но, вы меня не убедили.
    ибо это правильно сделанные макросы
    Если я считаю что макросы нехорошие, то наверное об этом я думаю "ну сделали два языка в одном, потому что компилятор не способен сам делать хороший полиморфизм...".

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

    Конечно ваш подход более ТРУ и я понимаю ваше негодование. но всёже я не хочу так жить
    Последний раз редактировалось blackSun; 06.05.2009 в 20:15.

  20. Вверх #100
    Посетитель
    Пол
    Мужской
    Возраст
    47
    Сообщений
    237
    Репутация
    18
    рантайм полиморфизм и компайлтайм полиморфизм не исключают, а дополняюи друг друга


Ответить в теме
Страница 5 из 6 ПерваяПервая ... 3 4 5 6 ПоследняяПоследняя

Похожие темы

  1. З "Win" на "Nix" + GUI
    от YOKO в разделе Программное обеспечение
    Ответов: 10
    Последнее сообщение: 18.10.2007, 14:50
  2. 3d графика и *NIX системы
    от Alisan в разделе Программное обеспечение
    Ответов: 23
    Последнее сообщение: 26.02.2007, 13:27
  3. Ищу *nix livecd с GCC компилятором
    от cTcangel в разделе Программное обеспечение
    Ответов: 54
    Последнее сообщение: 19.12.2006, 00:35
  4. FTP-client API for *nix
    от krieger в разделе Программирование
    Ответов: 4
    Последнее сообщение: 23.05.2005, 03:26

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения