OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 13:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 24 Июль, 2009 17:39 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Не секрет, что в Си функции не могут быть вложенными.
И пусть меня забросают тухлыми помидорами, но я готов подписаться под этим правилом.
Вот моё обоснование. Процедуры, которые имеют вложенные (локальные) процедуры конкурируют с модулем. А значит в них нет острой необходимости. Ведь модули и так уже есть! А как насчёт ортогональности?

Возьмём, к примеру, классы. Казалось бы ну очень мощная концепция. Ан-нет! Уступили место расширяемым (EXTENSIBLE) записям и связанным процедурам. Не выдержали конкуренции с модулем.

Вложенность процедур, конечно, очень удобно реализовать в компиляторе используя стек. Ну и что? Разве язык создаётся ради компилятора?

Червячок сомнения всё-таки гложет. Хотелось бы услышать мнение других специалистов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 18:23 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
В книжках по компиляторам пишут, что вложенные процедуры реализуются далеко не тривиально. То есть компиляторописателю от них удобства нет, а наоборот дополнительная головоломка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 18:37 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Тем более...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 18:54 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я понимаю этот вопрос так.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 19:38 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
igor писал(а):
А значит в них нет острой необходимости. Ведь модули и так уже есть! А как насчёт ортогональности?


Да, да! Давайте еще чего-нибудь неортогональное отрежем! :) Я вот давно предлагаю в жертву CASE - он неортогонален IF :) Или вот множества - давно можно было в библиотеку засунуть (как это сделано в некоторых других, намного более "неортогональных" языках :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 20:36 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Кроме того, часто непростую управляющую логику уложить в структурные конструкции без вынесения дублирующих участков во вложенные процедуры не получается.
Лично я в таких случаях стараюсь вместо сложных процедур использовать простые модули. Никаких комплексов по поводу малых размеров модуля не испытываю. Ведь разбиение на модули производится по функциональному признаку, а не по размеру.

2Vlad
Влад, я готов принести ортогональность в жертву практичности, но не за дарма. Я должен знать цену, которую за это приходится платить. В случае отказа от CASE цена велика, а в случае отказа от вложенных процедур -- грош цена.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 21:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
igor писал(а):
Илья Ермаков писал(а):
Кроме того, часто непростую управляющую логику уложить в структурные конструкции без вынесения дублирующих участков во вложенные процедуры не получается.
Лично я в таких случаях стараюсь вместо сложных процедур использовать простые модули. Никаких комплексов по поводу малых размеров модуля не испытываю. Ведь разбиение на модули производится по функциональному признаку, а не по размеру.


Нет, я имею в виду обычную управляющую логику внутри одной процедуры. Не будет вложенных процедур - придётся в нескольких ветках IF-а переписывать одно и то же.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 21:28 

Зарегистрирован: Воскресенье, 08 Март, 2009 17:54
Сообщения: 372
igor писал(а):
...я готов принести ортогональность в жертву практичности, но не за дарма. Я должен знать цену, которую за это приходится платить. В случае отказа от CASE цена велика, а в случае отказа от вложенных процедур -- грош цена.

И в чём заключается такая великая цена за CASE?
P.S. Сам очень редко пользуюсь и CASE и вложенными процедурами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 24 Июль, 2009 23:34 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
igor писал(а):
Влад, я готов принести ортогональность в жертву практичности, но не за дарма. Я должен знать цену, которую за это приходится платить. В случае отказа от CASE цена велика, а в случае отказа от вложенных процедур -- грош цена.


Не знаю. Я редко пользуюсь свитчом. А если пользуюсь, то в 99% случаев по енумам, которых в обероне все равно нет ;)

P.S. А еще можно SHORT выкинуть и прочие целочисленные вариации, оставить только INTEGER. Засунуть все остальные целые в SYSTEM для интеропа с внешним миром, ни для чего другого они не нужны.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 00:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Не факт. На здоровых вычислительных задачах может быть существенно, сколько памяти будет жрать матрица какая-нить или кубик.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 00:38 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Не факт. На здоровых вычислительных задачах может быть существенно, сколько памяти будет жрать матрица какая-нить или кубик.


Почему-то я всегда думал, что под матрицы используются вещественные числа :) Ну да лано. Будет эта матрица жрать 10 мегабайт, а 20. Это существенно? Если существенно, то это такой частный случай, который не стоит тащить в язык - в SYSTEM его. А лучше сразу в какой-нибудь Math :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 00:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Есть задачи, где счёт на сотни мегабайт, и с подкачкой с винта.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 00:46 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Есть задачи, где счёт на сотни мегабайт, и с подкачкой с винта.


И чего, в этих задачах именно SHORT'ы используются? Или это просто задачи с подкачкой (все тех же вещественных)? ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 07:31 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
igor писал(а):
И пусть меня забросают тухлыми помидорами, но я готов подписаться под этим правилом.
Под каким?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 08:59 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
igor писал(а):
Не секрет, что в Си функции не могут быть вложенными.
Это один из самых больших недостатков Си, имхо.
igor писал(а):
Возьмём, к примеру, классы. Казалось бы ну очень мощная концепция. Ан-нет! Уступили место расширяемым (EXTENSIBLE) записям и связанным процедурам. Не выдержали конкуренции с модулем.
ВАУ! Что я пропустил?? Когда это произошло???
Мне лично известно всего несколько языков, где так сделано -- Оберон и Ада(-95). Кто продолжит этот список? (Я бы назвал ещё и O`Haskell, но он практически не используется никем, так что пролетает...)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 10:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Неужели не видно, что "народное ООП" себя исчерпало... Полностью. И находится в глубоком ступоре относительно параллельности и относительно вообще адекватного отображения прикладных задач (откуда и, кстати, DDD всякие появляются косяками...; и ФП есть где развернуться...)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 12:18 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Ну исчерпало и исчерпало. Будет дальнейшая гибридизация с ФП и параллельными вычислениями. Не одним ООПом, в конце концов, сыт программист...
Как сейчас даже MS пошли в эту сторону со своими F# и Axum...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 12:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да я-то не переживаю по этому поводу :)

Гибридизация, конечно, будет.
Но будет и полноценное решение, можно надеяться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 12:55 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Нет, я имею в виду обычную управляющую логику внутри одной процедуры. Не будет вложенных процедур - придётся в нескольких ветках IF-а переписывать одно и то же.
Согласен с тем, что если все локальные процедуры заменить на глобальные, то им как-то надо передать параметры той процедуры, в которой они были, а это не всегда удобно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 25 Июль, 2009 13:03 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
GUEST писал(а):
igor писал(а):
И пусть меня забросают тухлыми помидорами, но я готов подписаться под этим правилом.
Под каким?
Я имел в виду правило: "Процедуры не могут быть вложенными" (см. название темы)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB