Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Арифметический IF, ...


Автор: regis 13.4.2006, 13:31
Когда-то был даже "базисный Фортран". Насколько помню, нормальных операторов IF (с логическими условиями в нем) в базисном не было вообще -- был только вычисляемый арифметический IF:

IF (выр) метка1, метка2, метка3 => если выр<0, на метку1, если выр=0, на метку2, иначе на метку3.

А еще меня совершенно убивали "холлеритовские" строки:

13HHello, world!


Автор: Cr@$h 13.4.2006, 19:00
Хорошо, обе конструкции исключены из языка. smile smile

Автор: Ignat 14.4.2006, 10:12
Цитата(Cr@$h @ 13.4.2006, 20:00 Найти цитируемый пост)
Хорошо, обе конструкции исключены из языка

Арифметический IF исключили?!
Одна из немногих прелестей, которая нравилась в 77.

Автор: Cr@$h 14.4.2006, 10:49
Цитата(Ignat @ 14.4.2006, 11:12 Найти цитируемый пост)
Арифметический IF исключили?!
Одна из немногих прелестей, которая нравилась в 77.

Прелесть, таящая в себе опасности. Давайте не забывать, что метки -- источник лапши в коде. Также компактно и более лаконично эта задача решается через if-then-else. Считаю, что метки нужно вообще убрать из языка. Для индустриальных технологий создания программного обеспечения такое вооружение вообще не подходит, я глубоко убежден.

Автор: Ignat 14.4.2006, 10:57
Цитата(Cr@$h @ 14.4.2006, 11:49 Найти цитируемый пост)
Давайте не забывать, что метки -- источник лапши в коде.

Насчет меток согласен, но можно было бы заменить метки вызовами функций, а не убивать совсем.

Автор: Cr@$h 16.4.2006, 18:22
Цитата(Ignat @  14.4.2006,  11:57 Найти цитируемый пост)
Насчет меток согласен, но можно было бы заменить метки вызовами функций, а не убивать совсем.

А что толку -- источник ошибок все равно будет, а значит будут ошибки. Хотя я не совсем понял концепцию такой замены. 

Автор: Ignat 17.4.2006, 09:42
IF (F(x)) PROC1, PROC2, PROC3

Т.е. не переход, а вызов процедуры... Как это в нынешнем стандарте выглядит не представляю. Надо попробовать. 

Автор: regis 17.4.2006, 10:46
Так если это очень нужно, это легко реализовать самому (напишите процедуру, которая первым аргументом принимает выражение, а еще тремя -- ссылки на вызываемые функции).
 

Автор: Ignat 17.4.2006, 10:51
Цитата(regis @  17.4.2006,  11:46 Найти цитируемый пост)
ак если это очень нужно, это легко реализовать самому

Как два байта... Вот только посмотрев машинный код, мы увидим лишний переход. В принципе это должно решаться inline-функциями, но есть ли они в современном фортране? В 77 не было, как я помню. 

Автор: FatalError 17.4.2006, 13:00
regis
Цитата

А еще меня совершенно убивали "холлеритовские" строки:

13HHello, world!

Не знаю, мне казалось, довольно удобная штука. Но поддержку этого дела вырубили радикально и повсеместно. 

Автор: Cr@$h 19.4.2006, 15:52
Цитата(Ignat @  17.4.2006,  10:42 Найти цитируемый пост)
IF (F(x)) PROC1, PROC2, PROC3

Т.е. не переход, а вызов процедуры... Как это в нынешнем стандарте выглядит не представляю. Надо попробовать.  

Да, выглядит практично. В последнем стандарте такой формы if нет ни в каком проявлении.
Цитата(regis @  17.4.2006,  11:46 Найти цитируемый пост)
Так если это очень нужно, это легко реализовать самому (напишите процедуру, которая первым аргументом принимает выражение, а еще тремя -- ссылки на вызываемые функции).

Будет много лишнего времени тратиться на вызов функций.
Цитата(Ignat @  17.4.2006,  11:51 Найти цитируемый пост)
Вот только посмотрев машинный код, мы увидим лишний переход. В принципе это должно решаться inline-функциями, но есть ли они в современном фортране? В 77 не было, как я помню.

inline-функции -- прерогатива компилятора. Устанавливается это дело директивами или опциями компиляции. Например, в Intel есть т.н. High Level Optimization, который смотрит в том числе, где бы эффективно заinlineить.
Цитата(XPEHOMETP @  17.4.2006,  14:00 Найти цитируемый пост)
Не знаю, мне казалось, довольно удобная штука.

Удобно? -- нужно же было считать число символов в строке, а если строку потом менять, то повторное использование совсем будет неэффективным. Я за их отмену. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)