T>>Теперь смотрим на Питон. Можно ли выделить минимальное подмножество Питона, на котором можно выразить всё остальное в Питоне? Можем ли мы расширить язык новыми управляющими конструкциями? FR>А нужно ли чтобы в языке было такое подмножество? Почему во многом близкий к питону Smalltalk в котором это возможно, менее популярен?
Питон "из коробки" применим лучше и шире. Он идёт, как скриптовый язык, который можно применять по месту без вовлечения в дело всего "образа", как в St.
St таким никто не делал, вот он и менее популярен. А сейчас он слишком старый, чтобы меняться.
Насчёт "нужно"... Мне — нужно. Даже не просто "нужно", а "НУЖНОНУЖНОНУЖНО!!!"
Насчёт остальных не могу утверждать. Хотя им может быть полезно.
DSEL же многие пишут.
FR>В мейнстрим почему-то попадают более корявые и не имеющие теоретической базы языки. FR>Вон тому же Немерли даже мимикрирование под мейнстрим ничем ни помогло.
Lisp?
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, pgregory, Вы писали:
P>>«Попытаюсь объяснить. ООП — это объекты + сообщения/методы. Простейший способ ООП декомпозиции системы — написать текст, потом заменить существительные на объекты, а глаголы — на методы. (Все, конечно, сложнее, но идею, надеюсь, ты понял). Яблоко — объект. Человек — объект. У человека есть метод «спеть песню». У человека есть состояние. И у яблока есть состояние.
VE>Нипаняяяятна. Что такое "у человека есть метод"? Это значит, что человек это умеет делать? А если два человека здороваются, это чей именно метод? Первого или второго? А если десять человек танцуют общий танец?
VE>А кнопку нажали, это метод кнопки, или Человек.НажалКнопкаБыстра? Кнопка ж сама не нажимается, правда?
Вы с EvilChild практически об одном пишете, поэтому отвечу я вам вместе, ок?
Side note: я не утверждаю, что ООП сколько-нибудь хорошо аппроксимирует реальность. На этот счет у меня самого к ООП большие претензии. Я утверждаю, что ООП — это просто и на пальцах. Это яблоки и кнопочки.
Поинт не в том, что ООП это правильно. ООП это просто. Кнопка, говоришь? Хорошо, у нее будет метод «нажать». Почему у нее? А почему бы и нет? Да ни почему. Серьезно. Весь софт именно так пишется, и при этом еще и работает. Зачастую — очень хорошо.
Только не прочти это неправильно. Типа, раз работает, то и трогать не надо, и так хорошо. С этим я категорически не согласен. Я ни в коей мере не агитирую за здравие ООП, и тем более за ООП вместо ФП.
Здравствуйте, pgregory, Вы писали:
P>Поинт не в том, что ООП это правильно. ООП это просто. Кнопка, говоришь? Хорошо, у нее будет метод «нажать». Почему у нее? А почему бы и нет? Да ни почему. Серьезно. Весь софт именно так пишется, и при этом еще и работает. Зачастую — очень хорошо.
Ты ж про самое главное забыл. Про здорованье двух человек А меж тем важная проблема-то.
И что-то интуитивного решения я не вижу. Точнее я вижу такое — есть функция "нажать", в ней участвуют два объекта, которые в процессе как-то изменяются. Только это с ООП не вяжется
Вот и видим какие-то Object.Equals(Object) вместо Equals(Object, Object).
T>>Да у тебя именно это и написано. Открытым текстом. P>thesz, извини конечно, но тут я уже бессилен. Можешь, конечно, считать, что я туп настолько, что сам не понимаю, что я пишу — дело твое.
Это нормально, я так думаю.
В том случае, конечно, когда позволяешь себе перед текстом комментария написать "как приятно отвечать, когда знаешь, что оппонент не прав".
Когда ты заранее уверен в своей правоте.
Когда вместо хотя объяснения, как же надо читать твои слова ты даёшь себе волю просто отмахнуться "меня так, как ты читаешь, прочитать нельзя".
Так что твоё бессилие нормально.
P>>>У меня есть точка зрения, что такое хороший яп, а что — нет. Основная мысль в том, что реально хороший язык реально прост. Я ее высказал и попытался обосновать. Того, что ты усмотрел, в ней и близко нет. Замечания по сути есть? T>>"Реально прост" чем определяется? P>Реально прост определяется тем, что я его реально просто смогу объяснить ребенку или старику. Нет, я не докажу это утверждение.
Ты будешь основываться на своих знаниях. Ты будешь объяснять так, как ты это знаешь.
Мы приходим к моему первому тезису: реально прост язык, который ты уже знаешь (или я уже знаю).
А теперь попробуй рассказать ребенку или старику какую-либо твою программу на этом языке. Вот тут ситуация изменится радикально. Помимо простых знаний о синтаксисе и семантике тебе придётся рассказать про кучу неявных вещей, которые у тебя в подсознании, а стороннему лицу неизвестны. Как предметная область отображается в решения в программе.
(мне про Eclipse так на работе рассказывают. интересно!)
T>>С помощью ЛИ можно сделать всё, что есть внутри Хаскеля. if-then-else, if-then, циклы. Даже сравнение с образцом. Type safe pattern matching combinators P>Ты чего в ответ на эту тираду ждешь? Что с помощью асма можно сделать все, что ты можешь придумать на хаскеле вообще?
Видишь ли, ассемблер на ассемблере написать и то уже постараться придётся.
В отличии от достаточно прямого подхода с Хаскелем и его составными частями.
Как нам всем давно известно, библиотека — это язык программирования, рвущийся наружу. Они взаимосвязаны. Быстро пишу библиотеки, быстро пишу DSEL и наоборот. Где DSEL, там и DSL.
Где DSL — там и производительность программистов.
Точнее, программиста. Точнее, меня.
Хотя, всё же, программистов — меня и коллег.
А на остальных мне плевать.
T>>Coq/Agda2 ещё проще в теоретическом плане. В Coq товарищи ради прикола сделали реализацию типов классов, не выходя за рамки языка. То же самое я сделал для Agda2 после небольшого количества экспериментов. P>А теперь заметь забавную закономерность. Чем проще язык по твоему определению, тем меньше людей им пользуется.
Тем он моложе.
T>>Теперь смотрим на Питон. Можно ли выделить минимальное подмножество Питона, на котором можно выразить всё остальное в Питоне? Можем ли мы расширить язык новыми управляющими конструкциями? P>1) Думаю, да. Но мне лень, поэтому будем считать, что нет. P>2) А оно реально надо? Какая именно управляющая конструкция так помогла darcs? (Тут говорили, что у него вообще какой-то type safe patch application — вот круто! Правда, еще тут говорили, что он падает при перемещении 100 мб файлов в репозитории. Надеюсь, скоро у него будет type-safe file movement, или типа того
Тут не сказали, падают ли другие системы. Пока я ответа не получил.
P>thesz, в твоих постах я, недалекий интеллектуальный трус, по твоей характеристике, вижу сквозящую в бэкграунде мысль о том, что хаскель способствует написанию хороших программ.
Хороший язык способствует созданию хороших программ.
Пока Хаскель, по-моему, лучший.
P>Так ли это? Если да — примеры в студию. Ведь, цитируя тебя самого в похожей ситуации, «ЭТО. НАДО. ДОКАЗЫВАТЬ.». Чтобы тебе было полегче, я, со своей стороны, буду приводить примеры хорошего софта на самом ужасном из существующих языков — на плюсах. Идет?
Окей. Внутренний продукт, что я написал на моей текущей работе. Часть более крупного продукта.
Прямой аналог — Icarus Verilog, точнее, его часть с оптимизацией нетлистов. Версия 0.8.7 содержит следующие оптимизации:
Наш оптимизатор делает всё то же самое, плюс две дополнительные оптимизации, увеличивающие скорость моделирования в полтора и в два раза по отдельности.
Всё это в считанные недели. Оптимизатор, конкретно, 4 недели. Параллельно правился код на Java и Хаскеле.
T>>Смотрим на Си, C++, C# или Java. Система типов совершенно не связана с моделью вычислений. В C++ этот отрыв ещё сильней. P>Прекрасно. Я что, защищал здесь плюсы?
*тупо смотрит на экран в поисках хоть какого-то смысла*
*продолжает смотреть*
*устав, проголодавшись, замерзнув и полностью отчаявшись, переходит к ответу на другие параграфы*
T>>Кто оказывается "реально прост"? P>Питон и си. Я много раз уже это писал. Еще CL. Если выкинуть мусор всякой обратной совместимости.
О! Уже что-то.
T>>Перечисли стереотипы, которыми я руководствуюсь. P>Если человеку не нравиться хаскель, то причина в том, что этот человек слишком туп и труслив, чтобы по-настоящему оценить Язык. Похоже?
Нет.
T>>Мне, что-то, начали надоедать наезды ad hominem. P>Отвечай аккуратнее, в таком случае. Я не бросаюсь на людей
Да ты что?!
Ты обкладываешься подушками в стиле "читайте 'по-моему мнению' после каждой строчки", "я не бросаюсь на людей", и подобными ровно для того, чтобы тебе не могли в этом обвинить.
На самом деле ты бросаешься на людей.
Я тоже бросаюсь на людей. Более того, всем известно, что я БРОСАЮСЬ НА ЛЮДЕЙ, что я флеймер, хамло и у меня раздутое самомнение.
Ну, так я об этом заявляю прямо и открыто.
T>>Поскольку ты уже выбрал свою синюю пилюлю, то и жалеть не о чем.
P>О Гуру! Научи меня хоть толике своей легендарной чуткости и прозорливости!
Делов-то.
Сжимаешь твою основную руку в кулак, оттопыриваешь указательный палец.
Тыкаешь им в монитор и говоришь либо "хороший, умный пост", либо "плохой, дурацкий пост".
Далее аргументируешь эту точку зрения в комментарии к посту.
Всё.
Больше никаких секретов.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, eao197, Вы писали:
P>>>Сотый раз: если это не так — примеры в студию! Только не какие-нибудь упрощалки символьных вычислений. Z>>Commercial Users of Functional Programming 2008
E>Кстати интересно, почему при всей своей долгой истории ФП нуждается в международных конференциях, посвященных теме коммерческого использования ФП?
потому, что оно было коммерчески невыгодно. и остаётся
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, z00n, Вы писали:
P>>>Сотый раз: если это не так — примеры в студию! Только не какие-нибудь упрощалки символьных вычислений. Z>>Commercial Users of Functional Programming 2008
E>Кстати интересно, почему при всей своей долгой истории ФП нуждается в международных конференциях, посвященных теме коммерческого использования ФП?
Потому что назрело А если серьезно — межденародные конференции есть совершенно обо всем.
Здравствуйте, BulatZiganshin, Вы писали:
Z>>>Commercial Users of Functional Programming 2008
E>>Кстати интересно, почему при всей своей долгой истории ФП нуждается в международных конференциях, посвященных теме коммерческого использования ФП?
BZ>потому, что оно было коммерчески невыгодно. и остаётся
Но почему? Если ФП действительно повышает производительность и улучшает качество, почему это не выгодно? Даже парное кодирование и unit-тесты широко проникают в коммерческие проекты, поскольку они преследуют те же самые цели.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
: P>«Попытаюсь объяснить. ООП — это объекты + сообщения/методы. Простейший способ ООП декомпозиции системы — написать текст, потом заменить существительные на объекты, а глаголы — на методы. (Все, конечно, сложнее, но идею, надеюсь, ты понял). Яблоко — объект. Человек — объект. У человека есть метод «спеть песню». У человека есть состояние. И у яблока есть состояние.
Итак, внимательно читаем.
Сперва ООП — это объекты и методы, понятно. Затем декомпозиция системы, тоже понятно. Глаголы, существительные, ничего удивительного.
И вдруг появляется состояние. Более того, появляется владение состоянием, как до этого появилось "владение методом" ("есть метод 'спеть песню'").
Получается, что ООП — это объекты + методы (сообщения) + владение методами + владение состоянием.
Теперь бы научится писать с этим всем программы...
P>Лично я не могу привести таких же аналогий для фп. Можешь попробовать, я буду рад, если это возможно.
Можно я за него?
ФП сводится к двум вещам: чистым вычислениям (упрощениям значений, beta-reduction) и, в случае работы с внешним миром, к обратной связи в смысле теории управления. Мы получили информацию о внешнем мире, вычислили необходимое воздействие, произвели его. Можем зациклиться, если хотим.
Чистые вычисления сводятся к двум вещам: правила построения значений и правила их вычислений. Первое состоит из двух вещей: лямбда-абстракция (построение функции) и применение функции. Второе сводится к двум правилам переписывания: над чистым подмножеством ЛИ и операции с константами (во что упрощать 1+1).
Теперь мы можем уточнять, что и как мы должны знать про внешний мир. Мы должны знать про внешний мир две вещи...
Вот как-то так.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, eao197, Вы писали:
BZ>>потому, что оно было коммерчески невыгодно. и остаётся
E>Но почему? Если ФП действительно повышает производительность и улучшает качество, почему это не выгодно? Даже парное кодирование и unit-тесты широко проникают в коммерческие проекты, поскольку они преследуют те же самые цели.
правильный вопрос. а ООП коммерчески выгодно? если да, почему оно не вытеснило ПЛ/1 с того самого 67-го года, когда было изобретено?
Здравствуйте, BulatZiganshin, Вы писали:
BZ>правильный вопрос. а ООП коммерчески выгодно?
первой широко распространённой ООП системой стал turbo pascal 5.5, 1989-й год. сейчас скачал его руководство, быстренько просмотрел — и увидел ожидаемые слова:
The challenge of object-oriented programming (OOP) is that it sometimes
requires you to set aside habits and ways of thinking about programming that
have been considered standard for many years. Once that is done, however,
OOP is simple, straight-forward, and superior for solving many of the prob-
lems that plague traditional software programs.
E>>>Трудноиспользуемой ООП не была. ООП я начал использовать на втором курсе универа, K>>Думаю, что начни вы использовать ФП на втором курсе универа, трудноиспользуемым ФП вы также не назвали бы. P>http://lambda-the-ultimate.org/node/1840 P>Интересно услышать комментарии.
http://lambda-the-ultimate.org/node/2845
E>>>Причем я тогда даже не знал, что это ООП. K>>Вот в этом и заключается секрет успеха. Программисты на C# 3, например, в настоящее время широко используют монады и, в массе своей, не подозревают об этом. P>Неужели не очевидно, что весь разговор именно об этом?! Программисты, например, в большинстве своем (нет, лично я не измерял) не знают, что целые числа образуют коммутативное кольцо с единицей (а также абелеву группу по ... и еще ... и еще ...). И это не мешает им писать программы, и делать это хорошо.
Я тут затеял написать на Хаскеле самую лучшую в мире программу и упёрся в своё незнание о коммутативной группе с единицей.
Мне понадобилось упрощение выражений после дифференцирования. Эффективность работы упростителя сильно зависит от представления. Наилучшим оказалось именно алгебраическое (вместо Div a b надо писать Mul a (Inv b), то же со сложением).
P>За простыми вещами должны следовать сложные, но не наоборот. Don't pay for what you don't need. Make simple things easy, but hard things possible. И так далее. Что здесь не ясно???
BZ>первой широко распространённой ООП системой стал turbo pascal 5.5, 1989-й год. сейчас скачал его руководство, быстренько просмотрел — и увидел ожидаемые слова:
Здравствуйте, BulatZiganshin, Вы писали:
E>>Но почему? Если ФП действительно повышает производительность и улучшает качество, почему это не выгодно? Даже парное кодирование и unit-тесты широко проникают в коммерческие проекты, поскольку они преследуют те же самые цели.
BZ>правильный вопрос. а ООП коммерчески выгодно? если да, почему оно не вытеснило ПЛ/1 с того самого 67-го года, когда было изобретено?
Чуток не дотянуло до 4K вместе с тестами. Ну да, думаю при таком объеме можно и выловить все возможные проблемы с памятью.
Да и большими объемами данных xmonad точно не ворочает. Вот если бы он прогонял через себя хотя бы мегабайт в секунду, да еще и вынужден был держать в себе сложную модель, объемом мегов в 100-100 и нетривиально ее обновлять, то была бы другая история.
T>Обсуждаемый вопрос: на Хаскеле обязательно получится плохо, много хуже, чем у других.
P>Э! Не передергивай! Обсуждается совсем не это.
T>Поэтому — переписывай свой ответ заново. T>Дальше я читать не стал, и отвечать тоже.
P>Мне интересно, зачем же ты теряешь на меня время? Пойми, если я сказал глупость, другие это заметят и без твоей помощи.
Глупость должна быть разъяснена.
Я преследую две цели: чтобы никто не купился на глупость впредь, это первое. Тогда она будет меньше меня беспокоить. И вторая цель, не менее важная: активный оппонент, будучи переубежден, начинает работать на тебя.
Переубеждать у меня не очень получается, я срываюсь, но иногда мне это удаётся. Этим случаям я рад больше всего.
P>Не напрягайся так. К чему дурацкие фразы типа T>>Тут не сказали, падают ли другие системы. Пока я ответа не получил. P>Он не очевиден? Тебе что, факс прислать, где написано «смирись, джедай, darcs хуже git»?
Будь добр, ответить на простой вопрос: почему система на Хаскеле, проакчивающая мегабайт в секунду, с нетривиаьлным обновлением базы в 10-100 МБайт, будет работать значительно хуже, чем на других языках?
Собственно, ответ "падают ли другие (, отличные от darcs распределённые) системы (контроля версий) в тех же условиях" означал бы положительный ответ.
"В тех же условиях", в данном контексте — с попыткой вычислить патч, разность между репозиториями. А то знаем мы эти ваши subversion, заменят двоичный файл целиком и скажут, что так и было.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Здравствуйте, BulatZiganshin, Вы писали:
E>>Но почему? Если ФП действительно повышает производительность и улучшает качество, почему это не выгодно? Даже парное кодирование и unit-тесты широко проникают в коммерческие проекты, поскольку они преследуют те же самые цели.
BZ>правильный вопрос. а ООП коммерчески выгодно?
Выгодно. Достаточно просмотреть на Java Application Server-а и другой middleware софт, построенный на ОО языках.
BZ>если да, почему оно не вытеснило ПЛ/1 с того самого 67-го года, когда было изобретено?
То, что ООП вытеснило PL/1 уже очевидно лет двадцать как. ООП было настолько выгодно, что в 1979-м году некто Страуструп начал создание языка, который бы сочетал эффективность C и высокоуровневость Simula. Успешность его попытки ощущается до сих пор. Как в количестве OpenSource-проектов, так и в количестве коммерческих проектов, выполняемых в данный момент только на C++. Не считая его улучшенных наследников вроде Java и C#.
Знаменитые функциональные языки вроде ML (1973) и Miranda (1985) появились в тот же исторический период. Но успешные проекты на функциональных языках составляют небольшую долю от общего количества программных проектов.
Так вот, если ты говоришь, что ФП коммерчески не выгодно, значит ты знаешь какие-то причины этого. Соображения на счет смены парадигмы они, как бы это сказать... Допустим, что смена парадигмы требует некоторых дополнительных вложений средств. Ну т.е. процедурный программист стоил $5K в месяц, для перевода его в разряд объектно-ориентированных программистов работодатель должен был дополнительно затратить, скажем, единоразово $20K (на обучение, приобритение новых инструментальных средств и пр). И в случае ООП эти дополнительные вложения окупались. Допустим, что смена парадигмы в случае ФП несколько дороже. Не $20K, а $60K. Но, на мой рабоче-крестьянский взгляд, если бы такие дополнительные вложения окупались, на них бы все равно пошли. Может, такие вложения не окупаются?
PS. Утверждение о том, что самым широкораспространенным ОО языком был Turbo Pascal нуждается в доказательстве.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.