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


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

>> Да, конечно, с языком как с абстракцией это никак не связано. Просто реализовать возможности объектно-ориентированного подхода по-другому невозможно.
>
> Неправда ваша ;)

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

>>>> Я лично к фортану равнодушен, но знавал людей, писавших на нём компиляторы и не видевших в этом ничего особенного.
>
> Я вот как-то не уверен, что они писали компайлеры на Фортран IV.

Я с ними работал в конце 80-х годов, а компиляторы они писали ещё до того, как я туда пришёл. Какой это мог быть фортран?

>> Слишком уж легко сделать ошибку и употребить где-то в выражении адрес переменной вместо её значения (или наоборот). А компилятор (в силу особенностей языка) пережуёт это в код и ни слова поперёк не скажет.
>
> Брр. Это как? Любой компилятор выругается на несоответствие типов.

В языке, в котором отсутствует строгая типизация (а С ведь такой, не так ли?) полно ситуаций, когда выполняется автоматическое преобразование типов, поэтому компилятору в них ругаться просто не на что.
Не будучи специалистом по написанию программ на С, пример привести не могу, но мои знакомые об указанную выше ситуацию обжигались неоднократно - прямо у меня на глазах (потому я о ней и знаю).

>> Или вот работа с библиотеками (особенно чужими) - это же просто кошмар какой-то. Строго говоря, библиотек и нет вовсе - компилятор после препроцессора имеет дело просто с монолитным потоком текста. В результате то, что в одном файле (подключённом через include) было определено с помощью define, может быть запросто угроблено в каком-то из последующих файлов - и программист об этом подозревать не будет.
>
> Компилятор скажет, что у тебя имеет место Macro redefinition и укажет в каком файле и месте.

По поводу undef Славик уже сказал (я, кстати, именно об этом и думал, когда писал). Но вот сейчас передо мной лежит учебник по С, и в нём такой пример напечатан:
---------
#define HUGE 5
[...]
#define HUGE 10 /* HUGE переопределён как 10 */
---------
и никаких #undef между ними...
Должен ли я не верить учебнику?

>> Или случай, когда в двух используемых библиотеках имеются одноимённые функции - тоже кровь попортить может.
>
> Линкер тебе сообщит, что имеются одноименные функции (укажет имена) в двух либах (укажет либы) и чего-то некругло.

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

>> В общем, заниматься написанием надёжных программ на подобном языке я бы не стал - здоровье дороже.
>
> Поскольку все приведенные аргументы ложны, то истинность суждения под вопросом ;)

У меня в университетет был такой предмет - "Логика". Так там наc учили, что из ложных утверждений вполне может следовать истинный вывод :-)

Sun 15 Jul 2007 00:50 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.