Re[2]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 17:40
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Обратите внимание, что тот дикий язык, на котором в C++ пишут темплейты, тоже является функциональным языком. Причем чисто функциональным, с ленивыми вычислениями и выводом типов.


Обратил. И с удивлением для себя обнаружил, что до конца понимают его десятые доли процента из тех кто считает, что знает С++.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 17:42
Оценка:
Здравствуйте, fplab, Вы писали:

F>Никак не могу согласиться. Одному дай топор — он комплекс в Кижах сделает, а другой — замочит кучу народа. Так же и с инструментами.

F>Инструмент у программиста — прежде всего голова. Когда в голове бардак, то реализация даже простейшего алгоритма будет нечитаемой. Когда голова в порядке — реализация даже сложных алгоритмов весьма хорошо читается.

Вопрос к головастому товарищу, много ли он на ваяет современных многоэтажных домов если ему дать один топор?
Как ни одного? А тогда к чему вся эта пышная демагогия?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 17:46
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Квиксорт с хаскеля практически 1:1 переписывается в Си, с той поправкой, что в Си не сделаешь итератора по списку с помощью пары загадочных знаков препинания, приходится цикл руками расписывать.


Елы палы, так тебе об этом в теме и говорили. Все что пишется в функциональном стиле можно "один в дин" переписать на ИЯ, только вот появляется много НО и из понятной и краткой реализации получается засилье if-ов и гора мало понятного кода.

Pzz>А вообще да, ФП предоставляет очень гибкий набор средств для выражения сложных структур данных и итераторов по ним. Но не более того. Те вещи, которые не сводятся к хитроунмой итерации сложной структуры данных, на ФП и на Фортране будут выглядеть совершенно одинаково


Чушь это все. Нет никаких итераторв в ФП. И все это "просто" и есть огромная заслуга тех кто развивал ФП. О том речь.
А на Фортране просто пишется только 2 + 2.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Жизнь внутри метода
От: FR  
Дата: 26.10.08 17:50
Оценка:
Здравствуйте, netch80, Вы писали:

N>Неее, батенька, это Вы историю с географией путаете. Когда кто-то из классиков сказал "Фортран-программу можно написать на любом языке" — это был ёмкий целенаправленный образ определённого стиля, который у тогдашних поклонников "структурного программирования" ассоциировался чуть ли не с пришествием Антихриста (при том, что тогда, можно считать, было три языка программирования — Fortran, LISP и APL ну и где-то рядом Алгол-60 маячил на задворках). Стиль, в котором паутина из GOTO покрывала программу так плотно, что невозможно было логически выделить ни одну явную структурную последовательность; с неявным объявлением переменных и трудноуловимыми ошибками типа "P вместо R"; с адскими хаками через COMMON и EQUIVALENCE... Это кошмар, но это Стиль с большой буквы. Вот по нему и проезжались чем только могли те, кто твёрдо решил избавить человечество от этого Стиля.


Фигня у фразы есть и более общий смысл, я использовал именно его.

N>Вы вот в курсе, почему космическая станция улетела куда не следует? Поясняю: строка


У меня конечно склероз, но как корабли бороздили оперный театр я еще помню

N>А Вы говорите, мол, "писать на бейсике можно используя любой язык"... Да всё это жалкое эпигонство. Оригинал был только один, и замены ему нет.


Нам не дано предугадать, Как слово наше отзовется.




N>А то так можно договориться и до того, что "писать на Haskell можно используя любой язык"... Да, можно. Написав на нём интерпретатор.)


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

N>Ну, честно говоря, вести себя в стиле Луговского тут не позволят. Но я принимаю это как конструктивное предложение к продолжению диалога. Надеюсь, в дальнейшем без завлеканий типа "пока не попробуешь — не поймёшь"


Так от диалога пока только ты отказывался.

N>Я, вероятно, слишком ленивый чтобы грамотно разделить код на части, но вот функция построения дерева раутинга в объектном виде по его сжатому представлению заняла 360 строк (бОльшая часть из них — игра со взаимовлияниями значений атрибутов), а функция генерации звонка по рауту — 213 строк. И как-то разумно сжать это пока не получается (да, заранее согласен, что это у меня руки кривые и можно целенаправленно надробить кучу мелких частей — только зачем?)


И я бы восхитился, но извини, об этих алгоритмах ни имею ни малейшего представления. Так что без примеров никуда.
Re[6]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 17:53
Оценка: -1
Здравствуйте, Pzz, Вы писали:

Pzz>А вот внутри самих алгоритмов if'ы и while'ы — вполне себе адекватный инструмент. Во всяком случае, все классические алгоритмы описаны в литературе именно в этих терминах.


Для тупых и ленивых индокодеров — да. Для людей с мозгами — нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Жизнь внутри метода
От: Klapaucius  
Дата: 26.10.08 17:57
Оценка: 4 (1)
Здравствуйте, FR, Вы писали:

N>>Ну вот, вы, наверняка, и фразу "The God is real..." не продолжите

FR>Нет не продолжу

..., unless declared integer

Старая как мир и не особенно смешная шутка. Кстати, в FORTRAN все еще хуже, чем можно судить по этой шутке.
Имя бога, как известно, это тетраграмматон IHVH — а раз уж это имя начинается с I то бог таки integer, unless declared real.
... << RSDN@Home 1.2.0 alpha 4 rev. 1110>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[9]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:02
Оценка: -1 :)
Здравствуйте, FR, Вы писали:

FR>Так обратное еще вернее там где можно применить рекурсию циклы часто невозможны или слишком сложны

FR>Тем более часто рекурсия и читабельнее даже когда заменяет простой цикл. Ну и учитывая что современные
FR>компиляторы (C++ про шарп и ява не в курсе) нормально оптимизируют хвостовую рекурсию, то и для оптимизации
FR>циклы не так уж и нужны.

Вот если бы я был АВК, то сказал бы "опять С++ ". А так...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:09
Оценка: +4
Здравствуйте, nikov, Вы писали:

N>Единственный объективный индикатор профессионализма — это уровень зарплаты.


Тогда те кто работают в США большие профессионалы чем те кто работает Москве. А те кто работает в Малых Васюках вообще ламеры.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:13
Оценка: +1 :))
Здравствуйте, netch80, Вы писали:

N>... "quick sort" ...


Во, IT, ты удивляешься почему не у всех FP крышу сносит? У людей крыша занята. Одни ее занимают мыслями о том как писать quick sort-ты и где их лучше применять. Другие о том как бы не пропустить новые революции от Майкрософ. Третие еще чем-мто...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:25
Оценка: :)
Здравствуйте, Mirrorer, Вы писали:

M>в общем, ничего неожиданного.


Ага... эмуляция эмперативщины на функциональном языке эмулиуемом в императивной машине.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Жизнь внутри метода
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 26.10.08 18:35
Оценка:
Здравствуйте, IT, Вы писали:

_DA>>Казалось бы, при чем тут рекурсия и цикл? Там, где можно обойтись просто циклом, рекурсия обычно не нужна и не используется.


IT>Это вопрос предпочтений. Мне тоже так раньше казалось. Сегодня же при наличии хвостовой рекурсии я скорее всего выберу рекурсию, кроме ну уж совсем примитивных случаев.


Да ну. Разворачивать рекурсию в хвостовую — неблагодарное занятие. Зачем велосипед изобретать? Функциональные языки на то и функциональные, чтобы в них можно было самым зверским образом комбинировать функции. Уже давно не писал рекурсию, которая бы принципиально разворачивалась в хвостовую. А при наличии ленивых списков в языке и умных оптимизаций в компиляторе (deforestation-а хватает) получается ещё и эффективный код.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:45
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Собственно, почему я не "проникся" Немерле. Не из-за того, что я "барик", не из-за того, что не могу оценить все прелести ФП, а из-за того, что все это очень сильно похоже на "припарки" мертвому. Я не понимаю, почему "внешняя" архитектура должны быть ООП, а "внутренняя", скажем, ФП. Если та или иная концепция не позволяет реализовать ее последовательно во всех частях программы — так ли эта самая концепция хороша? И может стоит вообще пересесть с этой подводной лодки на что-нибудь другое?


На что? Можно конкретнее?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Жизнь внутри метода
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.08 18:45
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Раз миллион, то не составит труда найти ссылку хоть на одно внятное объяснение?


Лень искать, если честно. Если тебе действительно интересно, пошукай тему с названием то ли "Nemerle vs все остальное", то ли "Nemerle vs весь мир". Смотреть сообщения мои, IB, Синклера.
Ну а насчет внятного — для тебя любое объяснение, отличное от Nemerle рулиззз, как показывает практика, будет невнятным, вредничанием и прочая. Ты уж извини, но другого у меня нет. Не все мыслят так же, как ты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[4]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:50
Оценка: +1 -1
Здравствуйте, Константин Л., Вы писали:

КЛ>Это сарказм? Если удается сделать правильную пачку хэлперов, то это повышает читабельность основного метода,


Дык, так оно и есть. Только если эти хэлперы локальны специфичны для конкретного метода, то лучше калькулироваться их в этом самом методе, а уж если они универсальны, то мм самое место в отдельном классе/модуле.

КЛ>плюс от к захвату контекста все-же лучше прибегать с осторожностью.


Это предрассудок. Другое дело, что нужны некоторые инструменты позволяющие упростить рефаторинг локальных функций. Так разумно было бы иметь фичу (в IDE) позволяющую выявить все захваченные переменные, фичу позволяющую переносить захваченные переменные в параметры, и фичу позволяющую вынести локальную функцию в отдельный метод.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 18:59
Оценка: :)
Здравствуйте, D. Mon, Вы писали:

DM>Например, у меня есть несколько алгоритмов компенсации движения, отличающиеся лишь способом поиска похожего блока. Наследование позволило обойтись без дублирования кода, лишних if'ов и указателей на функции (которые, по сути, изоморфны VMT).


Это я тебе легко подскажу. Делается это так:
MyMotionCompensationAlgorithm(mySomeData : SomeData, findSimilarBlock : Block * Block -> bool) : ResultData
{
  ...
  if (findSimilarBlock(block1, block2)) DoSomeWith(block1) else DoSomeWith(block2)
  ...
}

OOP здесь только лишним будет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Жизнь внутри метода
От: VoidEx  
Дата: 26.10.08 19:12
Оценка: -1
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, VoidEx, Вы писали:


VE>>А сам вон сначала "программист должен уметь писать сортировку", а потом

VE>>"Если он при этом учится и ошибка замечена вовремя — то почему бы и нет?"

N>Здесь нет противоречия.


Т.е. потолок есть у обоих (так как у первых он есть). И что же, вы с рождения знали сортировку? Или что, потолок сначала есть, а потом по изучении сортировки исчезает? Тогда в чём суть потолка, если он вроде есть, а на самом деле при достижении — отдаляется?
Re: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 19:13
Оценка:
Здравствуйте, IT, Вы писали:

Согласен со всем сказанным по сути, но хочу заметить, что ты немного занижаешь заслуги ФП за пределами реализации методов.

Кроме отличного набора паттернов кодирования методов у ФП еще есть один два конька:
1. Неизменяемые структуры данных.
2. Аглебраические типы данных (variant в Nemerle).

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

Алгебраические типы данных позволяют решать многие задачи вроде анализа или логического вывода на намного более высоком уровне абстракции (за счет того же паттерн-матчинга). Без них паттерн-матчинг был бы детской игрушкой.

Так что хочется сказать, что эти две фичи позволяют улучшить наш инструментарий и на уровне дизайна приложения (на уровне классов, если так проще).

ЗЫ

Ну, и про МП забывать тоже нельзя. Это действительно мощьнейшее оружее. Им проникся даже Хейльсберг...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Жизнь внутри метода
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.08 19:17
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, VladD2, Вы писали:


VD>>Раз миллион, то не составит труда найти ссылку хоть на одно внятное объяснение?


AVK>Лень искать, если честно. Если тебе действительно интересно, пошукай тему с названием то ли "Nemerle vs все остальное", то ли "Nemerle vs весь мир". Смотреть сообщения мои, IB, Синклера.

AVK>Ну а насчет внятного — для тебя любое объяснение, отличное от Nemerle рулиззз, как показывает практика, будет невнятным, вредничанием и прочая. Ты уж извини, но другого у меня нет. Не все мыслят так же, как ты.

Ясно. Опять много слов и никакого дела. Другого и не ожидал, если честно.

ЗЫ

За других тоже не стоит говорить. Особенно за Синклера. Может быть мне конечно и показалось, но он в некоторый момент как-то резко переменил риторику.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Так рождаются мифы
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.08 19:19
Оценка:
Здравствуйте, netch80, Вы писали:

ГВ>> Менеджеры софтостроения там если и стояли рядом, то только стояли.


N>А при чём тут, откуда оно зародилось? Современная практика совсем иная, и от тех времён, когда оно рождалось — несколько крупных логических переходов (например, насколько ООП формата Simula & Smalltalk отличается от того, что из него сделали даже в Objective C, я уж не говорю про развития C и Паскаля). Фактически, разделение объектов — то, что позднее назвали "контрактным программированием", с ограничением тем, что "контракт" проводится по границе объекта ("пуля вылетает — проблемы не на моей стороне").


Что то я не улавливаю твою мысль. Можешь пояснить, как из всего того, что ты сказал, следует что менеджеры софтостроения там стояли рядом?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[10]: Жизнь внутри метода
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.08 19:19
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Вот если бы я был АВК, то сказал бы "опять С++


Фи, как грубо и неумело. Не переноси свои фобии на других.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.