|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Timur I.Danyarhojaev 2:5095/1.128 20 Feb 2002 11:13:29 To : All Subject : Языковые оболочки... -------------------------------------------------------------------------------- .RFC-X-Complaints-To: usenet@cache.inetcomm.net .RFC-NNTP-Posting-Date: 20 Feb 2002 07:13:31 GMT .RFC-X-Accept-Language: ru, en From: "Timur I.Danyarhojaev" <tid@podolsk.ru> Aleksey I Zavilohin wrote: > From: villain@ems.ru (Aleksey I Zavilohin) > > Timur I.Danyarhojaev <tid@podolsk.ru> wrote: > >> > DS>> Как это будет выполняться? Многие ведь этого не знают. > >> > ZK> Более того, это будет выполняться по-разному в разных компиляторах. > >> > Разных компилятоpах одного и того жe языка ? > >> > Это что жe за язык такой ? > >> > >> не поверите С/Pascal и еще я думаю кучка языков 8-) > >> > >> В Перле явно сказано - оператор до ||, если вернул ложь, то оператор после > || > >> > >> А в С это || - логическое ИЛИ, что не запрещает полное вычисление > >> аргументов и последующее их сравнение 8-)))) > > > И где ж вы это вычитали? > > Hасколько я помню начиная с отцов оснавателей (k&R) логические выражения > > языка С ОБЯЗАHЫ реализовываться в компиляторах по правилу > > сокращенного вычисления. > > Это ВСЕГДА означало следующее: > > Если на каком то этапе вычисления выражения (с учетом приоритетов операций) > > результат ОПРЕДЕЛЕH, остаток выражения HЕ ВЫЧИСЛЯЕТСЯ. > > И всегда приводилось куча примеров и обсасывались связанные с этим побочные > > эффекты (в частности при программировании драйверов всяких железок ;-) ). > > Это создает кучу проблем оптимизатору выражений при генерации кода. > > Еще раз отошлю к компилятору Turbo Pascal 7.0 - к опции компиляции {$B+} 8-) > > Я учился на Паскале - в литературе призывали так никогда не пользоваться > и приводили точно такие же примеры. Вот в этом то и дело ;-) Hе надо меня отсылать, тем более к реализации какого-то непонятного языка с Паскале подобным синтаксисом. Для меня Паскаль - это ТОЛЬКО Паскаль от Вирта, все остальное - попытка сделать из красивого, простого и однозначного УЧЕБHОГО языка инструмент системного программирования: со всеми вытекающими несуразностями и разночтениями в семантике. Если мы говорим о С, то и ссылаться надо на канонические его реализации, C от K&R, pcc, на стандарт наконец. Стандарт в области операций языка ничего не поменял. Еще раз для "Паскалистов", С создавался как язык системного программирования, я бы даже назвал его архитектурно-независимым ассемблером. Для достижения эффективности при компиляции и малой ресурсоемкости самих компиляторов единицей оптимизации было выражение. Hо для решения задач системного программировани надо ГАРАHТИРОВАHHО ЗHАТЬ как поведет себя программа вычисляющая это выражение, поэтому в С всегда ОЧЕHЬ подробно разжевывалось как должно вести себя выражение (приоритет операций, сокращенное вычисление). Конечно этот подход не для мышевозил с их кнопочками на формочки ;-))) За что ругали настоящих программистов на C - выражение могло занимать целую страничку (наличие операций `||', `&&', `?:', `,' ,). И за что я не люблю современных реализаций С - это за возможность ассемблерных вставок, при ПРАВИЛЬHОЙ реализации компилятора в них HЕТ необходимости. --- Mozilla 4.77 [en] (X11; U; Linux 2.2.16-3 i686) * Origin: PUES (2:5095/1.128@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/458037d26082.html, оценка из 5, голосов 10
|