Автор Гілка: Стандартна бібліотека C  (Прочитано 2410 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
От замислився над таким питанням: якщо писати прикладну консольну програму використовуючи лише стандартну бібліотеку - її можна компілити під лінукс, вінду, OS/2, dos ...Те, що під досом моментально виникнуть проблеми з пам'яттю - зрозуміло й дурню.
Питання виникає наступне: які переваги виникають при використанні  Linux перед Масдайкою тобто чи виграю я в швидкості, чи існують якісь інші перваги? Чи єдиною перевагою є відсутність зневаджувача, спряженого з редактором тексту  ;)  і гордість, що не сидиш за піраткою.
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній 235

  • Кореспондент
  • ***
  • дописів: 238
  • Карма: +0/-0
Re: Стандартна бібліотека C
« Відповідей #1 : 2006-12-10 01:56:00 »
переваги почалися ріків сорок тому, як придумали операційні системи - щоб не писати прямо лише сам код, а мати середовище для роботи. Швидкість оцінюється в прикладних тестах, але вже тоді відмічу, що програма буде швидше за все працювати в ДОСі. Бо там просто немає багатозадачності й фонових процесів.
Олександр Приймак |  Google Web Toolkit

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Стандартна бібліотека C
« Відповідей #2 : 2006-12-11 09:28:51 »
Не факт. Все залежить від компілятора. Якщо, наприклад, тре працювати з long double і ви компілюєте програму без підтримки mmx, то тоді така програма під досом буде працювати (можливо не на багато, а можливо я зовсім помиляюсь <Паша розглядає стелю> ) повільніше. Теж саме стосується sse[1,2,3], багатопроцесорності, і т.і.
debian

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Стандартна бібліотека C
« Відповідей #3 : 2006-12-11 12:29:08 »
Забудьмо про дос: програми для моделювання багатоатомних систем вимгають ду-у-уже багато пам'яті (в порівнянні з 1 Mb  ;) ). Я розпитував саме про 32 розрядні системи, де вже точно є фонові процеси. До того ж в мене нема щось типу мейнфрейма, де масдайку ставити не можна   :( .
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Стандартна бібліотека C
« Відповідей #4 : 2006-12-12 14:59:50 »
Я колись проводив експеримент такий: звичайна ansi-c програма для розрахунку працює під лінуксом і під віндою, при цьому вимірюється час роботи програми. Під віндою я використовував borland c++3.1 , під лінуксом - gcc, звичайно. Результати були такі: прога під віндою працювала десь у 1.7 разів довше.

Можливо якщо побігати з бубном, можна оримати інші результати. До того ж я розумію, що borland 3.1 це компілятор  не для вінди, а для дос, і тому, мабудь, не можна порівнювати ці результати, або спиратися на них "офіційно". Але все ж, якщо вам потрібно багато пам`яті, то під лінукс можете повимикати усі ті самби, sshd, apache, X, etc. і пам`яті у вас буде дещо більше. Чого від вінди з її "крутим і зручним" інтерфейсом годі й чекати.

До речі ще одне, але це мабудь актуально якщо вам необхідно ну _дуже_ багато пам`яті. Під віндою своп - файл, під лінукс - розділ. Зважте на це. Звичайно і в лінукс можна зробити "своп-файл" але це, на мій погляд, ... якби це сказати ... "staff only" :)
« Змінено: 2006-12-12 15:12:47 від lpi »
debian

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Стандартна бібліотека C
« Відповідей #5 : 2006-12-12 16:26:17 »
Власне борландівським софтом під віндою не користуюсь/користувався  використовував непоганий компілятор lcc (поширюється вільно, робить маленькі екзешки) та gcc (єтака штука під вінду, здається, з джерелтними кодами) сполученим з dev c++ - виходило щось штибу kate  разом з gcc для лінукс, тільки мейкфайли мишкою робились :)

Під лінуксом використовую лише kate як текстовий редактор файлів програм. Може хтось використовує щось краще - порадьте ;) Тільки не emacs  :o
« Змінено: 2006-12-12 16:29:10 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Стандартна бібліотека C
« Відповідей #6 : 2006-12-13 10:24:06 »
Я використовую vim.
зі інколи під kate бува коли виходжу, клацаю Esc,:,w,q,enter :)
debian

Відсутній AEX_CHECKER

  • Новачок
  • *
  • дописів: 21
  • Карма: +0/-0
  • I Love YaBB 2!
Re: Стандартна бібліотека C
« Відповідей #7 : 2006-12-17 00:09:16 »
переваги почалися ріків сорок тому, як придумали операційні системи - щоб не писати прямо лише сам код, а мати середовище для роботи. Швидкість оцінюється в прикладних тестах, але вже тоді відмічу, що програма буде швидше за все працювати в ДОСі. Бо там просто немає багатозадачності й фонових процесів.

Не факт. Все залежить від компілятора. Якщо, наприклад, тре працювати з long double і ви компілюєте програму без підтримки mmx, то тоді така програма під досом буде працювати (можливо не на багато, а можливо я зовсім помиляюсь <Паша розглядає стелю> ) повільніше. Теж саме стосується sse[1,2,3], багатопроцесорності, і т.і.

Ви помиляєтесь. :) ДОС &#x2014; це Дискова ОПЕРАЦІЙНА Система чи будь-яка інша ОС - це робоче оточення (читай управління ресурсами і доступом до них), а sse та mmx - це РЕГІСТРИ і КОМАНДИ процесора.
Операційна Система не має жодного відношення до Кількості, Послідовності і Типів Регістрів Процесора, що використовуються у Прикладних Додатках.
« Змінено: 2006-12-17 00:13:20 від AEX_CHECKER »

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Стандартна бібліотека C
« Відповідей #8 : 2006-12-19 12:01:18 »
Цікаво, а в стандартних бібліотеках нема чогось, що допомогло б обробляти текстові файли програм?  
Просто непогано було б розробити програмне керування програмами штибу молекулярної динаміки тобто моделювалками: там ніколи на перед не відомо що буде треба: не буднш же кожного разу переписувати код, коли потрібні прості зміни, які міг би внести користувач.
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: Стандартна бібліотека C
« Відповідей #9 : 2006-12-19 12:55:22 »
Якщо я правильно вас зрозумів, то вам допоможуть генератори коду - lex та yacc, а точніше, їх ГНУ-версії flex та bison. Flex - для розпізнавання ключових слів, так званий tokenizer, а bison - для розпізнавання синтаксичних конструкцій, як надбудова над flex.

Відсутній Паша

  • Кореспондент
  • ***
  • дописів: 142
  • Карма: +0/-0
  • хайо!
Re: Стандартна бібліотека C
« Відповідей #10 : 2006-12-19 17:10:48 »
переваги почалися ріків сорок тому, як придумали операційні системи - щоб не писати прямо лише сам код, а мати середовище для роботи. Швидкість оцінюється в прикладних тестах, але вже тоді відмічу, що програма буде швидше за все працювати в ДОСі. Бо там просто немає багатозадачності й фонових процесів.

Не факт. Все залежить від компілятора. Якщо, наприклад, тре працювати з long double і ви компілюєте програму без підтримки mmx, то тоді така програма під досом буде працювати (можливо не на багато, а можливо я зовсім помиляюсь <Паша розглядає стелю> ) повільніше. Теж саме стосується sse[1,2,3], багатопроцесорності, і т.і.

Ви помиляєтесь. :) ДОС &#x2014; це Дискова ОПЕРАЦІЙНА Система чи будь-яка інша ОС - це робоче оточення (читай управління ресурсами і доступом до них), а sse та mmx - це РЕГІСТРИ і КОМАНДИ процесора.
Операційна Система не має жодного відношення до Кількості, Послідовності і Типів Регістрів Процесора, що використовуються у Прикладних Додатках.

Дякую Вам за зауваження, але я і не мав на увазі операційну систему. Мається на увазі якщо у вас під досом програма компілюється без mmx, а під linux - з підтримкою mmx. Все залежить від компілятора.
« Змінено: 2006-12-19 17:11:24 від lpi »
debian

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Стандартна бібліотека C
« Відповідей #11 : 2006-12-20 14:16:12 »
Я використовую vim.
зі інколи під kate бува коли виходжу, клацаю Esc,:,w,q,enter :)

Це стандартна проблема. Якби ж то vi-подібний режим працював у всій системі.  :'( Напевно такого не буде доки всілякі смартфони і кишенькові комп'ютери не стануть масовими - бо там клавіатура якраз для vim-а.

PS.
ZZ швидше вводиться ніж :wq
[Fedora Linux]

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Стандартна бібліотека C
« Відповідей #12 : 2006-12-20 14:43:25 »
Цікаво, а в стандартних бібліотеках нема чогось, що допомогло б обробляти текстові файли програм?  
Просто непогано було б розробити програмне керування програмами штибу молекулярної динаміки тобто моделювалками: там ніколи на перед не відомо що буде треба: не буднш же кожного разу переписувати код, коли потрібні прості зміни, які міг би внести користувач.
Я думаю що вам допоможе знайомство з декларативним програмуванням, зокрема із автоматичною побудовою програм на основі дерева залежностей. Гарні представники такого підходу - це шаблон IoC (інверсія контролю), програма make. У своїх скриптах вам можливо допоможе програма tsort з coreutils.

Приклад програми з використанням tsort.

Нехай у нас є набір функцій a b c d e, які можна виконувати в довільному порядку але результат роботи програми залежить від порядку виконання. Нехай користувач може вказувати, яку функцію слід виконати перед виконанням іншої функції.

Приклад:
#!/bin/bash

function a() {
  echo "A"
}

function b() {
  echo "B"
}

function c() {
  echo "C"
}

function d() {
  echo "D"
}

DEPENDENCIES="
c d
a c
b d
"

ORDER="`echo "$DEPENDENCIES" | tsort`"

eval "$ORDER"

Результат виконання:
$ ./test.sh
A
B
C
D

І ніяких IF-ів. :-)
[Fedora Linux]

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
scanf
« Відповідей #13 : 2007-02-22 14:26:45 »
Цікаво, як примусити scanf читати данні з подвійною точністю (в мне правильно читає лише в float*  :'(, а я хочу в double * )
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: scanf
« Відповідей #14 : 2007-02-22 15:17:11 »

#include        <stdio.h>

int main ( void )
{
float a;
double b;
long double c;

        puts ("Input float");
        scanf ("%f",&a);
        puts ("Input double");
        scanf ("%lf",&b);
        puts ("Input long double");
        scanf ("%Lf",&c);

        printf ( "Float:\t\t%.100f (%.100Lf)\n", a, (long double)a );
        printf ( "Double:\t\t%.100lf (%.100Lf)\n", b, (long double)b );
        printf ( "Long Double:\t%.100Lf (%.100Lf)\n", c, (long double)c );

        return 1;
}

isbear@monstruozo:~$ vim t.c
isbear@monstruozo:~$ cc t.c
isbear@monstruozo:~$ for (( i=0 ; i<3 ; i++ )); do echo -n "123." ; for (( j=0 ; j<10 ; j++ )); do echo -n "123123456" ; done ; echo ; done | ./a.out
Input float
Input double
Input long double
Float:          123.1231231689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (123.1231231689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
Double:         123.1231234561231246971146902069449424743652343750000000000000000000000000000000000000000000000000000000 (123.1231234561231246971146902069449424743652343750000000000000000000000000000000000000000000000000000000)
Long Double:    123.1231234561231234550526814075510628754273056983947753906250000000000000000000000000000000000000000000 (123.1231234561231234550526814075510628754273056983947753906250000000000000000000000000000000000000000000)
isbear@monstruozo:~$