Автор Тема: ещё про цикл дейкстры  (Прочитано 96149 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #120 : Август 10, 2012, 10:13:02 am »
Кстати, я точно помню на этот вопрос именно в контексте этого случая (эмулятор процессора от Зефирова) и именно тебе несколько лет назад на оберонкоре отвечал Geniepro, и отвечал именно про ленивость :-) Подобное знание видимо плохо усваивается, и заменяется снова "знанием" аля "это все сишный рантайм виноват!".

Ну, я понял это пояснение так, что из-за ленивости логика сборки мусора сложнее, и рантайм оказался неспособен правильно отработать.
А, ну тогда все ок - ты просто тогда не правильно понял :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #121 : Август 10, 2012, 10:21:03 am »
Что касается краткости и эффективности пути, то он начинается с хорошей модели, качественного проектирования и, наконец, кодирования. А поскольку на первых двух этапах напряг, то о кодировании лучше вообще не вспоминать... всуе. Остаётся любимое занятие врямяубийцев - искать серебряную пулю.

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

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #122 : Август 10, 2012, 11:15:00 am »
Ну, я понял это пояснение так, что из-за ленивости логика сборки мусора сложнее, и рантайм оказался неспособен правильно отработать.
Вы неправильно поняли, Илья.
Отложенные вычисления не являются мусором -- ведь на них есть живые ссылки, в отличие от мусора.
Отложенные вычисления могут быть в любой момент востребованы во время вывода результатов на печать/файл/сеть и тд. -- вот тогда они и вычисляются, а пока они не оказались востребованы, они находятся в памяти в виде формулы вычисления значения.
Проблема лишь в том, что эта формула занимает много места, иногда на много порядков больше, чем результирующее значение...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #123 : Август 10, 2012, 11:20:16 am »
Ну так я и говорю о том, что передовой край ФП (статические функциональные языки с мощной системой типов) относятся именно к "любым сложным языкам". ФП чрезмерно повышает уровень программирования, а значит, требует более жирных рантаймов.
При чём здесь ФП? В ФП есть только один язык, который можно отнести к этой категории (статические функциональные языки с мощной системой типов) -- это Хаскелл.

А ведь существуют подобные языки, которые не являются ФЯ -- Scala, например. Сложность её системы типов не меньше, чем у Хаскелла.

Есть так же системы доказательства теорем со своими языками (Agda2, Coq) -- не знаю, можно ли их относить к только ФП, там всё-таки много больше, чем просто программирование...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #124 : Август 10, 2012, 11:32:42 am »
...
Отложенные вычисления не являются мусором -- ведь на них есть живые ссылки, в отличие от мусора.
Отложенные вычисления могут быть в любой момент востребованы во время вывода результатов на печать/файл/сеть и тд. -- вот тогда они и вычисляются, а пока они не оказались востребованы, они находятся в памяти в виде формулы вычисления значения.
Проблема лишь в том, что эта формула занимает много места, иногда на много порядков больше, чем результирующее значение...
Это то же самое, что в императивном представлении можно сделать в рекурсии?..

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #125 : Август 10, 2012, 11:46:27 am »
...
Отложенные вычисления не являются мусором -- ведь на них есть живые ссылки, в отличие от мусора.
Отложенные вычисления могут быть в любой момент востребованы во время вывода результатов на печать/файл/сеть и тд. -- вот тогда они и вычисляются, а пока они не оказались востребованы, они находятся в памяти в виде формулы вычисления значения.
Проблема лишь в том, что эта формула занимает много места, иногда на много порядков больше, чем результирующее значение...
Это то же самое, что в императивном представлении можно сделать в рекурсии?..
Я не понял вопроса, если честно. При чём здесь рекурсия?
Рекурсия -- это разновидность цикла.
Отложенное вычисление -- это ссылка на функцию, которую нужно вычислить, что бы получить значение вместо этой ссылки.
Это совершенно несвязанные вещи...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #126 : Август 10, 2012, 11:49:40 am »
Это то же самое, что в императивном представлении можно сделать в рекурсии?..
Отложенные вычисления в императивных языках могут приводить к неверным расчётам.
Поэтому, хотя и есть специальные библиотеки для императивных языков, в сами языки (императивные) ленивость обычно не встраивают.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #127 : Август 10, 2012, 03:27:46 pm »
Имел в виду, что для рекурсивных алгоритмов указывается возможность откладывания операторов, если определённым образом расположить их в структуре маршрутов. Видел такое в этой книге (Гл. 18 выдержки). Вот и интересно - это можно считать отложенными вычислениями, как Вы их используете здесь (или аналогом)?..

alexus

  • Гость
Re: ещё про цикл дейкстры
« Ответ #128 : Август 10, 2012, 03:38:12 pm »
Никакого отношения к "серебрянной пуле" сказанное мной не имеет. Создание компонентов, библиотек, которые решают конкретные задачи (например, разработку серверных приложений определённого класса) и при этом имеют небольшой размер и простую логику - это не "серебрянная пуля". Стремление раскрыть весь потенциал удачного языка (КП) в нише С/С++ - это тоже не "серебрянная пуля".
Всё правильно. "Серебряная пуля" нужна тогда, когда есть серьёзный проект, команда приличного размера. Собственно, Ф, Брукс об этом говорил.

У меня не "напряг" на первых двух этапах, я просто придерживаюсь принципа постепенного проявления модели.
Не проявится... IMHO.

Можно тужиться сразу увидеть модель, а можно взять серию задач интересующего класса и начать заходить попеременно снизу и сверху. Прочувствовал конкретный случай (получил опыт) - подумал, как можно абстрагироваться от его частных особенностей и вынести более общее средство. Взял другую задачу - применил средство, проанализировал возникшие проблемы или их отсутствие, обобщил дальше.
Этот реверсивный способ хорошо объясняется в экстремальном программировании. Работает великолепно... пока проект можно охватить одним взглядом. Стоит проекту чуть-чуть подрасти и работа зацикливается на "рефакторинге". Поймите правильно, я никуда Вас не зову, ничего Вам не предлагаю. Только тот путь, который Вы описываете ведёт в тупик. Возвращаясь к моделям, для простых случаев можно использовать Ваш подход, но только для простых.

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

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #129 : Август 10, 2012, 05:07:28 pm »
Имел в виду, что для рекурсивных алгоритмов указывается возможность откладывания операторов, если определённым образом расположить их в структуре маршрутов. Видел такое в этой книге (Гл. 18 выдержки). Вот и интересно - это можно считать отложенными вычислениями, как Вы их используете здесь (или аналогом)?..
Прочитал эту "Гл. 18" -- интересный взгляд на рекурсию. Но это всё же не то же самое, что ленивые вычисления в традиционном понимании.
В этой главе просто показано, что происходит при выполнении рекурсивных подпрограмм, не имеющих хвостовой рекурсии.
Если рекурсивная подпрограмма не имеет хвосовой рекурсии, то она начинает потреблять память в стеке -- занимает память в стеке под копию локальных переменных и адрес возврата из подпрограммы. Такую рекурсию ещё называют наивной.

В каком-то смысле действительно может показаться, что в рекурсивной подпрограмме каждый рекурсивный вызов её же является отложенным вычислением, но так говорить как-то не принято...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #130 : Август 10, 2012, 05:32:57 pm »
<...> речь только о том, что не поняв сути задачи браться за решение чего-то там... не стоит.

Но ведь очень часто мы просто не понимаем сути задачи, пока не возьмёмся её решать. Постоянно возникают изменения задачи, и вчерашнее её понимание оказывается неполным, а то и вовсе не верным...
Что же делать в этом случае?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: ещё про цикл дейкстры
« Ответ #131 : Август 10, 2012, 05:40:24 pm »
<...> речь только о том, что не поняв сути задачи браться за решение чего-то там... не стоит.

Но ведь очень часто мы просто не понимаем сути задачи, пока не возьмёмся её решать. Постоянно возникают изменения задачи, и вчерашнее её понимание оказывается неполным, а то и вовсе не верным...
Что же делать в этом случае?
Согласен с обоими высказываниями - общего решения нет, но  очень много дают  оценки затрат на реализацию = скажем так, без удовлетворяющей меня подобной оценки я не берусь(стараюсь не делать этого) за реализацию (другое дело что ЭТО НЕ ВСЕГДА ВОЗМОЖНО - перевешивает "волшебное" слово -НУЖНО).

alexus

  • Гость
Re: ещё про цикл дейкстры
« Ответ #132 : Август 10, 2012, 06:27:25 pm »
<...> речь только о том, что не поняв сути задачи браться за решение чего-то там... не стоит.

Но ведь очень часто мы просто не понимаем сути задачи, пока не возьмёмся её решать. Постоянно возникают изменения задачи, и вчерашнее её понимание оказывается неполным, а то и вовсе не верным...
Что же делать в этом случае?
Думать над задачей, над тем, откуда она взялась, почему сформулирована именно так. Но слово "решение" здесь имеет два смысловых оттенка. Можно решать задачу без понимания сути, но решить её таким образом нельзя. (Я говорил о втором, то есть, о том, что не поняв сути задачи, браться за решение не стоит, потому что решить задачу не получится). Но моё высказывание не говорит о том, что думать над задачей не надо. Надо. Это вопрос "частного" и "общего". Частные решения можно получить, не понимая сути, но общего решения так получить нельзя.

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #133 : Август 12, 2012, 05:30:12 pm »
Это не вопрос веры... для меня. И я не ратую за какие-то "прыжки в точку", речь только о том, что не поняв сути задачи браться за решение чего-то там... не стоит.

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: ещё про цикл дейкстры
« Ответ #134 : Август 12, 2012, 05:55:11 pm »
Опять же, одинаковый вред приносят как те, кто за деревьями не видят леса, так и те, кто увлечённо масштабирует свои модели за пределы сферы их применения. Я подчеркиваю, что я не имею в виду Вас.
Поэтому позиция классической науки, основанной во многом на бэконовском эмпиризме, - лучше честно сказать "это мы пока не знаем" и остаться с набором точных фрагментов, чем поспешить объединить эти фрагменты и получить недостоверную картину. Позиция "да, у меня пока нет целостной картины, обхожусь без неё и стремлюсь построить" честнее, чем позиция "я тут придумал целостную картину и готов натянуть её на что попросите".