RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Может я не прав, но..


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Юрий Пронякин
To : LightElf
Subj : Может я не прав, но..

>> --------
>> char ch;
>> int i;
>> float fl;
>> fl = i = ch = 'A';
>> --------
>> Что-то не вижу я здесь явных кастингов.
>
> А что плохого в этом примере? Что здесь неправильно работает? Я ни одной даже потенциальной проблемы не вижу. Числовые типы совместимы по присваиванию снизу вверх.

Ну да: char - числовой тип, логический тип - тоже числовой, да и указатель - тоже число. Специально только что проверил - вот эта программка компилируется без ошибок и предупреждений:
-------------
main()
{
int i;
int *p;
i = func(*p);
}

int func(int x)
{
return x+1;
}
-------------

и вот эта программка компилируется тоже без ошибок и предупреждений:
-------------
main()
{
int i;
int *p;
i = func(p);
}

int func(int x)
{
return x+1;
}
-------------
Разница между ними - в одной-единственной звёздочке. О чём я и говорил несколько писем назад, когда друзей вспоминал.

Что же до самого верхнего примера, то это он в книге такой. На самом деле ведь и наоборот предупреждений не будет:
-------------
i = 1000;
ch = i;
-------------
и даже если вот так:
-------------
fl = 1.7;
ch = fl;
-------------
- ни те ошибок при компиляции, ни хотя бы предупреждений. Потому как в полном соответствии с правилами языка. Хотя ни одного кастинга по-прежнему нет.

> > Для того, чтобы сделать вывод о проблемах, не обязательно вспоминать историю и изучать сам язык. Достаточно послушать публичные чертыхания пишущих на этом языке программистов. А их и сейчас предостаточно.
>
> Чертыхания обычно связаны либо с кодом каких-то пионеров, либо с плохим алгоритмом, либо с плохими комментариями ну или с багами компилятора. Очень редко проблема возникает из-за Си как такового.

"А мне пофиг, с какой стороны у тебя козырёк!" Если при пользовании средством можно столкнуться с проблемами, то я предпочту другое средство - с которым проблем нет. Мы ведь о надёжности говорим, а не о том, что можно "в принципе".

> Хотя вполне согласен, что язык Си вовсе не шедевр. Тем не менее на нем проработаны многие задачи, к которым хрен пойми как подступиться из других языков.

А ты пробовал? На той же Модуле я спокойно решу практически любую задачу, решаемую на Си. Но хотел бы я посмотреть, как ты будешь на Си манипулировать битовыми флажками, если их больше, чем помещается в long int (ну, хотя бы 256 битов). А между тем, подобные манипуляции в системном программировании встречаются сплошь и рядом. (Когда я смотрю на сишное манипулирование масками - повеситься хочется.)

> К примеру, как на фортране написать обработчик прерываний?

Не понял - а в чём проблема? Чем оно сложнее, чем аналогичный обработчик на Паскале или любом другом компилируемом языке.

> Как к фортрановской проге прикрутить паскалевскую библиотеку?

А к сишной как?

> Как на паскале описать функцию с переменным числом параметров?

Этого ещё не хватало! Зачем уродовать неплохой, в принципе, язык? Функции с переменным числом параметров - один из важнейших элементов _ненадёжности_.

>> "Приспичило" несколько другое - я же говорил о случае, когда для создания программы используются чьи-то чужие библиотеки. Вот как быть, если без них нельзя, а они конфликтуют таким вот образом?
>
> Убить об стену разработчиков библиотек. ;)

Библиотеки от этого насмерть перепугаются и исправятся?

> Есть такая устоявшаяся практика - давать библиотечным функциям префиксы.

Но это всего лишь практика. Языком оно не навязывается.

> Например все публичные функции в uIP начинаются с символов uip_. Все функции OS/2 имеют префикс Dos. А у PM обычно Win.

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

> Мне всегда и на всех языках было проще поставить скобки, чем вспоминать чего там написано в стандарте. Тебе то же самое советую :)

Чему равно у после "y = ++x - ++x;" (скобки расставить по вкусу)?
Это пример из моих студенческих лет. Сейчас бы я спросил: что вернет mult(++x, --x), если функция mult() возвращает произведение своих аргументов? И чему будет равна переменная x после этого?

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

Mon 16 Jul 2007 02:51 Mozilla/5.0 (OS/2; U; Warp 4.5; ru-RU; rv:1.7.12) Gecko/2005




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.