Автор Тема: Задачка архитекторная.  (Прочитано 65606 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #105 : Март 29, 2011, 02:13:39 pm »
Если тренируемся в архитектуре, в декомпозиции на кубики, то критерии совсем не численные... Как это может развиваться дальше, какие схемы, ценные для решения задач данного класса, выявлены.

Я пытался подытожить в комментариях к моему решению (http://oberon.talk4fun.net/index.php?topic=42.msg1438#msg1438), но никто не поддержал и не откомментировал свои. Могу еще дополнить:
- ничего нового лично для себя не встретил, комментарии даже некуда втыкать :)
-- ну разве вот с циклическими ссылками пришлось подумать так, чтобы было минималистично и неинтрузивно
- парсер выражений сделан на коленке, без привлечения какой-то теории на эту тему

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #106 : Март 29, 2011, 02:26:31 pm »
Сообщения об ошибках нужно помечать решёткой, а не заключаться в треугольные скобки...

Поправил. Причем только в одном месте (форматирование ошибки). Считаю, что это плюс с точки зрения архитектуры и правильной декомпозиции ;)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #107 : Март 29, 2011, 08:09:43 pm »
Я насчитал целых 4 решения - оберон-2, КП, хаскель, С++. Классно! :)

В джаббере я скидывал Алексею ссылки на кучу ещё решений, там были на яве, вроде, ещё на лиспе, на сях и с++ несколько, несколько вариантов на том же хаскелле, вариант на эрланге...

Ну так это... сюда их! :)


С++
_winnie:          http://www.everfall.com/paste/id.php?c9dn0t8ffx43
Alex Mizrahi:     http://thesz.livejournal.com/288662.html

Си
Ivan A. Kosarev:  http://unicals.com/download/excel.zip

Java
Anatoli Klassen:  http://www.26th.net/public/development/SpreadSheet.java

Хаскелл

thesz:            http://thesz.livejournal.com/281937.html
Булата Зиганьшин: http://www.haskell.org/haskellwiki/Ru/Problem_K
NotGonnaGetUs:    http://nggu.livejournal.com/663.html
пара старых моих: http://geniepro.livejournal.com/2722.html


Ерланг
Гапертон:         http://gaperton.livejournal.com/7229.html

Лисп
Alex Mizrahi:     http://thesz.livejournal.com/289017.html
13-49:            http://13-49-ru.blogspot.com/2011/03/blog-post_25.html

Nemerle
Kisloid:          http://rsdn.ru/forum/decl/2742713.all.aspx
« Последнее редактирование: Март 29, 2011, 08:14:10 pm от Geniepro »
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #108 : Март 30, 2011, 10:22:07 pm »
Поскольку здесь и на коре периодически наезжают на питон, то на питоне тоже сделаю, как только - так сразу.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #109 : Март 31, 2011, 07:14:45 pm »
Питон:
- никаких ужасных проблем с динамичской типизацией не встретилось - заработало как только прошли все юнит тесты из решения на C++
- ничего лишнего в синтаксисе, сахарок, приятно :)
- функциональщина вместо интерфейсов на каждый чих - тоже приятно :)
- скажи нет бесполезным объявлениям типов :)
- все есть в языке - импортировать пришлось только "sys" для stdin/stdout

P.S. Учитесь готовить :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #110 : Март 31, 2011, 07:18:57 pm »
Примерно 230 строк без тестов и без разбиения на модули. Ну и где тут лаконичность? :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #111 : Март 31, 2011, 07:22:25 pm »
Примерно 230 строк без тестов и без разбиения на модули. Ну и где тут лаконичность? :-)

Можно, конечно, и меньше - но в жертву архитектуре, будущему разбиению на модули и т.д.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #112 : Март 31, 2011, 07:39:06 pm »
Ну, то есть получилось жирнее чем на хаскеле разбитом на модули и переписанном в пром. стиле :-) При том, что в хаскеле строгая статическая типизация как бэ.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #113 : Март 31, 2011, 07:42:46 pm »
Ну, то есть получилось жирнее чем на хаскеле разбитом на модули и переписанном в пром. стиле :-) При том, что в хаскеле строгая статическая типизация как бэ.

Кто-то обещал, что будет короче, чем на хаскеле? :) Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.

AlexIljin

  • Newbie
  • *
  • Сообщений: 25
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #114 : Апрель 01, 2011, 06:40:19 am »
Кто-то обещал, что будет короче, чем на хаскеле? :) Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.
Я думал, что статическая типизация показала бы себя при переписывании С Питона, а не НА него. Или я чего-то не догнал?

Кроме того, где решение Ильи Ермакова? Массы жаждут! (В моём лице.)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #115 : Апрель 01, 2011, 07:02:15 am »
Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.
Когда я рефаткорил свой вариант ( http://geniepro.livejournal.com/2722.html ), я там не просто на модули разбил, но ещё и переделки некоторые сделал:
во-первых, заставил компилятор молчать при опции -Wall, а то он ругался, что некоторые переменные не используются, а некоторые скрывают собой другие с такими же именами из предыдущей области видимости),
выделил в отдельную функцию кусок, проверяющий зацикливания в формулах,
удалил в принципе ненужный в этой задаче самопальный класс типов для расчётов таблицы и её элементов, заменив три её инстанса на три простые функции.

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

Так что статическая типизация даже на такой задачке вполне себе рулит!
to iterate is human, to recurse, divine

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #116 : Апрель 01, 2011, 03:09:13 pm »
Кто-то обещал, что будет короче, чем на хаскеле? :) Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.
Я думал, что статическая типизация показала бы себя при переписывании С Питона, а не НА него. Или я чего-то не догнал?

Не показала в том смысле, что решение легко "легло" на динамический язык, без долгого цикла отладки и без написания дополнительных тестов (которые и так были написаны для статической версии). Т.е., решение изначально могло быть сделано на динамическом языке и, скорее всего, быстрее (просто потому, что писанины меньше). Определенно, конечно, нельзя сказать, потому что это было переписывание, а не разработка с нуля.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #117 : Апрель 01, 2011, 03:28:09 pm »
При этом компилятор указывал, где я в этих переделках накосячил, и когда он, компилятор, окончательно всё скомпилировал без сообщений об ошибках, то программа чётко отработала тестовые примеры -- отлаживать не пришлось.

Так что статическая типизация даже на такой задачке вполне себе рулит!

Не, вы не догоняете :) Статика рулит, когда ошибки компиляции исправить быстрее, чем поднять тесты. И если вы думаете, что компилить всегда быстрее - то, возможно, вы просто не умеете писать тесты :)

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #118 : Апрель 01, 2011, 03:33:22 pm »
Кто-то обещал, что будет короче, чем на хаскеле? :) Ну а статическая типизация вэтой задаче пока себя никак не показала. Судя по тому, что на питон переписалось без проблем.
Я думал, что статическая типизация показала бы себя при переписывании С Питона, а не НА него. Или я чего-то не догнал?

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

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Задачка архитекторная.
« Ответ #119 : Апрель 01, 2011, 03:43:16 pm »
Собственно даже на каком-нибудь языке с нестрогой динамической типизацией (у питона строгая динамическая, кстати) подобная задача была бы написана или переписана также легко. А вот если взять питоноверсию и попробовать её переписать на языке со строгой статической типизацией, тогда вот вылезут грабли. Желающие могут попробовать её переписать на хаскеле, ну, или, хотя бы на Аде.

Согласен. Переписать с динамики на статику будет скорее всего сложнее. И что это доказывает? :) Что статика круче? :) Тогда оберон, конечно, рулит - замахаешься на него переписывать с чего-то уровнем выше сей ;) Впрочем, с труЪ сей тоже замахаешься - сплошной SYSTEM будет.
« Последнее редактирование: Апрель 01, 2011, 03:45:04 pm от vlad »