Не понимаю, к чему весь этот поток сознания. Если в некоей организации делают выбор люди, которые не могут понять последствия этого выбора и не консультируются с теми, кто может — то програма действий крайне проста. Ноги в руки, и прочь из этой организации! Открой свою, и разори недоумков
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Курилка, Вы писали:
К>>Т.е. ты уже забыл про свои утверждения про "привычность" и проч.?
Д>Я вполне определенно писал, что привычность имеет значение при прочих равных условиях. Если "прочие условия" сильно не равны, то выбор конечно за более удобным инструментом. Д>Пока что из "прочих условий" Смоллтока в этой теме приводился только механизм нелокальных возвратов как пример конструкции, которая невозможна в других языках. И знаешь что я скажу? Д>И хорошо, что невозможна! Д>Не надо мне таких "улучшений"
Подменяешь тему, не хорошо...
Тут (в этой ветке) про ST речи не было, вопрос гораздо шире ставится, и я вообще о лиспе писал
Здравствуйте, Курилка, Вы писали:
К>Как раз надо валить, т.к. как раз нелокальные возвраты лишь в блоках и возможны (хотя может ST таит ещё что-нибудь загадочное )
нелокальные возвраты без блоков невозможны, зато блоки без нелокальных возвратов — вполне возможны.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Курилка, Вы писали:
Д>Не понимаю, к чему весь этот поток сознания. Если в некоей организации делают выбор люди, которые не могут понять последствия этого выбора и не консультируются с теми, кто может — то програма действий крайне проста. Ноги в руки, и прочь из этой организации! Открой свою, и разори недоумков
Неглубоко смотришь
И что за агрессия, если не секрет?
А если по сути, то из одних технологий бизнес не строится, кроме кода ещё нужен менеджмент, маркетинг и проч.
Сейчас с этим гораздо проще — интернет многое упрощает, поэтому и появляются RoR и иже с ними.
Но на голом этузиазме семью не прокормишь.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Ты. Не. Понимаешь. EB>Вообще.
EB>Где он это увидит? Приведи пример (можно на псевдокоде — только, пожалуйста, не Nemerle-вском).
лучще приведи пример кода, где не жить не быть — но без нелокальных возвратов обойтись нельзя
Здравствуйте, Курилка, Вы писали:
К>А если по сути, то из одних технологий бизнес не строится, кроме кода ещё нужен менеджмент, маркетинг и проч.
ага, как же без них. Но ты знаешь, среди программистов всё-таки довольно мало откровенно глупых людей, и просто так втюхать им полное фуфло не получится. Благо, есть такой мощный источник информации, как интернет. И неважно, сколько денег вбухали в маркетинг.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Курилка, Вы писали:
К>>А если по сути, то из одних технологий бизнес не строится, кроме кода ещё нужен менеджмент, маркетинг и проч.
Д>ага, как же без них. Но ты знаешь, среди программистов всё-таки довольно мало откровенно глупых людей, и просто так втюхать им полное фуфло не получится. Благо, есть такой мощный источник информации, как интернет. И неважно, сколько денег вбухали в маркетинг.
Да? А вот микрософт-то не знает...
Это, конечно, ирония, но про то, как кормить семью на голом энтузиазме ты не прокомментировал
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>25 лет ожиданий — слегка слишком долго для граблей
Не 25, а 35. По твоим словам супер супер язык не смог завояевать популярность 35 лет к ряду. Может быть пора задуматья, что какие-то решения были перебором или вовсе не разумны?
ЗЫ
А вообще согласен с Lazy Cjow Rhrr. Это уже не аргументация, а полнейшая демагогия. Мне такие разговоры не интересны.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Интересная особенность реализации. Но ты не находишь, что эта твоя фраза противоречит предыдущему абзацу? Раз return является макросом — значит его можно переписать и изменить ему поведение.
Можно. Макросы вообще много что могут. Но глобального goto нет. И получить аналог Смолтоковского ^ невозможно в принципе. Код все равно будет структурированным. К тому же чтобы использовать макрос нужно совершить некоторые телодвижения (импортировать его пространство банальная лень подталкивает к тмоу, чтобы писать без return-ов вообще. И ты знашь, что? Через некторое время оказывается что это вовсе не сложно, а код получается даже чуточку лучше (более понятным).
EB>Спасибо за краткую лекцию по ФП, но я, в общем-то, в курсе. Или ты хочешь сказать, что Smalltalk плох, потому что не является чистым ФЯ?
Нет. Про Смолток я уже все сказал. Он даже не плохо. Он обладает набором неприемлимых для многих особенностий. От релаизации, до небезопасных конструкций слишком легко доступных рядовому программисту. Понимаю, что для кого-то это мелочи. Но этот кто-то должен так же понимать, что таких как он не много.
EB>Ты. Не. Понимаешь. EB>Вообще.
На этот счет есть еще одна теория.
EB>Где он это увидит? Приведи пример (можно на псевдокоде — только, пожалуйста, не Nemerle-вском).
Примеры тут приводить сбессмысленно. Общую идея мне кажется донести удалось. Она заключается в том, что код становится трудно читаемым в следствии того, что любой малозначимый казалось бы кусок кода может радикально повлиять на ход вычислений. Прийдется внимательно анализировать все ветвления логики вместо того, чтобы воспринимать отдельные выражения как некие черные ящики в кишках которых можно не разбираться так как их начения все равно помещаются в переменную.
EB>Что касается "выражений посложнее": в Smalltalk средний размер метода — 6-7 строк. Включая определение переменных и прочее. Где тут можно сделать "блок посложнее"?
Это сказки. В реальном коде размер метода будет определяться умениями программиста по декомпозиции и обемностью стоящей перед методом задачи. И рано или поздно в коде появятся методы размером хотя бы в 10-20 строк.
Другие языки (особенно функциональные) имеют даже лучшие средства декомпозиции функций нежели те что имется в Смолтоке, но и работая на них получаются большие функции.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, nostromo, Вы писали:
N>В Smalltalk тоже нельзя прервать выражение.
Я не понимаю. Что трудно взглянуть выше по теме?
Этот разговор начался с того, что выражение содержало в себе блок с ^ которая приводила к тому, что выражение не завершалось при некотором условии.
То что это нельзя сделать в арифмитическом выражении — это конечно хорошо. Но вот то что присвоение переменной может не произойти в следсвии хакерских выпендрежей мне категорически не нравится.
ЗЫ
Большая просьба изучать тему если входишь в разговор в ее середине.
N>Отмечу также, что вместо N>(...) ifTrue: [^0] ifFalse: [^1]. N>можно (и рекомендуется) писать так: N>^(...) ifTrue: [0] ifFalse: [1].
Отмечу, что безопасный язык отличается от небезопасного тем, что в нем нельзя применять отровенно плохие приемы, а в небезопасном всего лишь не рекомендуется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, VladD2, Вы писали:
VD>>ОК. Подойди к любому квалифицированному C#- или Java-программисту или архитектуру и проконсультируйся у него по пводу того что он думает об исползовании исключений и их обработки для реализации логики приложения. Уверяю тебя стандартная реакция будет "руки (мягко говоря) надо отрывать тем уродом (тоже мягко говоря) которые это делают".
ANS>-1. Безаргументная апеляции к мифическому массовому супер-опыту и плавный переход на личности.
Если ты тут углядел переходы на личности, то это твои личные проблемы. А подойти попробуй. Может у него действительно будет время и он обяснит тебе банальные прописные истины.
Построение логики приложения на исключениях — это общепринятое зло. Это сто раз обсуждалось. Если тебя интересует аргументация, ты можешь воспользоваться поиском или создать новую тему.
VD>>Ислючения придуманы для того чтобы отделить обработку нестандартны (ошибочных) ситуаций от нормального хода вычислений.
ANS>Еще раз — семантика похожа тем, что происходит корректный возврат из текущего контекста (вызовы finaly и пр.), в отличии от goto.
Еще раз. Исключения не используется (грамотными программистами) для управления логикой. Если бы ^ использовалаь только для обработки исключительных ситуаций, то вопросов бы не было. Но она используется для передачи управления в штатных условиях. Ты с ее помощью описываешь алгоритм! И в рамках этого алгоритма переходы будут не структурными (выход из выражения, не завершающися метод...). Для исключений же неструктурности не возникает, так как на уровне обработки исключений нет стрктуры прогрммы. Мы ограничиваем защищаемый блок и в случае возникновения непредвиденной ситуации в нем пытаемся привести программу в корректное состояние. То есть в рамках задачи обработки исключений мы имеет все ту же структурность. Обработчики и защищенные блоки всегда расположены иерархически.
Попытка же организации логики на исключениях приводит к неочевидному течению хода выполнения программы и резко запутывает ее. Если это дин раз на всю программу и обеспечивает некий "быстрый выход из очень сложного вложенного алгоритма", то на это еще можно закрыть глаза в виду сложноти решаемой задачи и того что скорее всего при пректировании решения такой ход был просто не запланирован. Но если мы начинаем таким образом решать море мелких задач, то получаем ужасный, уродливый и непонятный код.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
VD>>^ пожалуй будет по круче чем break и continue. Вот с goto она успешно поконкурирует, только с С-шным дальним goto, так как goto в C# не позволят выходить из функций.
EB>Переводя: EB>"return, пожалуй, будет покруче, чем break и continue. Вот с goto он успешно поконкурирует, только с С-шным дальним goto, так как goto в C# не позволят выходить из функций."
Ненадо переводить. return в С-подобных языках не анлогичен ^ в Смолтоке. Потому ты и начал им хвастаться. Вот только на поверку окалось, что его отличия — это то что опытные программисты так не любят в goto.
EB>Ну да, что-то в твоих словах есть
Смысл. Так что вдумывайся. Может проникнишся.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>Очевидно только то что используется MFC, это ни как ни противоречит тому что сама среда полностью написана на смалтоке.
Надо сильно себя загипнотизировать чтобы верить в это. Вот IDEA написана на Яве. И думать тут нечего. VS напиана на С++ и в ней используется менеджед-код, но никто не хвастается, что VS менеджед-среда. Более того есть планы в будущем переписать VS на менеджед-языках.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Mirrorer, Вы писали:
VD>>Лямбду будет использоваться во всю. Просто нужно время. M>Время покажет
Ага. Но я почти уверен в этом уже сейчас. МС использует лямбды для упрощения доступа к данным в LINQ (читай C# 3.0). Так что волей не волей но люди привыкнут к ним.
VD>>Опять -1. Шаблоны используются на право и на лево. Особенно готовые шаблонные классы. Вот метапрограммирование — это другое дело. M>Ну использование и написание своего две большие разницы как говорят в Одессе.
Ага. Так что надо это четко отделять. Тут прозвучала фраза "использовать".
M>Тогда можно сказать что и регэксы используются направо и налево. Если они входят в состав каких-то библиотек.
Регексы нельзя выделить в отдельную сущьность. А детали реализации некоторых библиотек нас ведь не трогают. Так что в реализациях они конечно есть, но напрямую их не используют. Макросы же другое дело. Их как раз можно использовать напрямую.
M> Или если используются как black box, без понимания как они работают.
Еще раз. У регекстов нет возможности превратить их в черный ящик. Возможно если бы это было возможно, то и использование их было бы более обширно. Создали бы библиотеку стандартных регексов и пользовались бы ими по имени.
M> Под использованием я подразумевал глубокое понимание того, что происходит, и способность писать свое.
Тебе нужно глубокое понимание устройства компилятора для использования конструкции if/else? Вот в Немерле if/else — это макрос. Использовать его значит применять в прграмме. А вот писать свои макросы — это другое дело.
M>Хотя это уже похоже на флейм "Должен ли программист знать алгоритмы сортировки если есть готовый qsort."
А это не флэйм. Это неверная постановка вопроса. Верная будет звучать так.
Нужно ли знать алгоритм для его успешного применения? Ответ одназначный — нет, не нужно.
Полезно ли знать алгоритм для его успешного применения. Ответ так же однозначен — да, несомненно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Он прошол мимо всех, если майнстрим с завидным упорством изобретает старенькие велосипеды.
Он их не изобретает, а впитывает. По тихоничку, чтобы не дай бог не впитать и граблей.
ANS>>> То есть код работает так же как и код, который ты привёл. VD>>Я привел? Это ты про что? ANS>Про письмо
Все не понимаю. Видимо уже терю нить разговора.
VD>>Большинство языков намерянно не позволяют сделать этого.
ANS>Таких языков уже нету. Умерли или были пофикшены давным-давно. Хинт: механизм исключений.
Про исключения я уже говорил. Ты просто не понимаешь их предназначения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Давайте, и начнем с принципов структурного программирования. ОК? VD>Что ты о них думаешь?
Конечно им надо следовать. И я не вижу нарушения правил структурного программирования при возврате из блока кода (как реализовано это в Smalltalk).
VD>Не правда. Бьюсь об заклад, что на том же Nemerle напишу код который в среднем будет превосходить по выразительности, краткости и понятности Смолтоковский. Об производительности и говорить не приходится.
Абсолютно согласен, что в Nemerle можно написать более красивый код, т.к. Nemerle поддерживает макросы, а Smalltalk нет. Как следствие расширяемость Smalltalk ниже, чем у Nemerle или Lisp, но намного выше, чем у Java и C#.
О производительности ничего не могу сказать, т.к. не знаю как работает Nemerle.
VD>Возможно я не понят. Я не против блоков кода, а-ка лямбды или анонимные методы. Идея передовать куски кода в другие фунции мне очень нравится и я ее сам постоянно исползую (правда не в Смолток, а в Немерле и C#). Мне не нравится идея неструктурированной передачи управления.
Представьте макрос if (cond) then {trueBlock} else {falseBlock}
Вы передаете блоки в качестве параметров макроса. Если Вы напишите return в этих блоках, будет это являться неструктурируемой передачей управления?
Возврат из блоков в Smalltalk используется для завершения работы текущего метода (в котором описан блок) с передачей результата. Это то же самое, что написать return не в конце метода, а например в if. И происходит передача управления в соответствии с принципами структурного программирования. Такая возможность используется в Smalltalk также часто как и в других языках.
Здравствуйте, VladD2, Вы писали:
VD>Вернись к исходным примерам в которых выход из бока или приводитк к тому, что функция никтогда не возвращает упаравления, или к тому что выражение может не вернуть результат, апередать управление в другое место в любой своей точке просто из-за появления там "рышки" (символа ^).
VD>Ты серьзно считаешь, что применение таких техник оправдано элюзорным уменьшением объема кода?
Ну нету таких проблем. Нету!
Я прошу Вас привести пример кода, который на Ваш взгляд мог бы передать управления "в никуда" (псевдокод).
Я со своей стороны попытаюсь продемонстрировать работу этого кода в Smalltalk. Может действительно найдем подводные камни.