Здравствуйте, mogadanez, Вы писали:
M>а почему тогда в том же немерле def означает define?
def это все таки не название(идентификатор), а ключевое слово и встречается в коде оно намного чаще чем некое гипотетическое название метода.
M>почему сократили? почему не полностью define?
Потому, что ключевые слова для деклараций переменных/постоянных значений в большинстве языков с необязательной декларацией типов принято делать короткими. Например в C# 3.0 и JavaScript это ключевое слово var, в SML — val, в Scala — var и def.
M>ведь если я первый раз вижу код на немерле и не писал на языках где есть def, я могу и с default перепутать, или с defolt
Я тебе не верю. Надо обладать невероятной степенью тупизны, чтобы не понять с первого взгляда что означает def в коде на Nemerle.
M>такая же фигня с параметром "_" — человек первый раз видящий его хрен догадается что он значит.
Тоже не верю. "_" выглядит очень интуитивно понятно, особенно в match выражениях. Кроме того "_" это очень распространенная идиома. Я например имел о ней представление задолго до знакомства с Nemerle, из Пролога, SML, Haskell. В Nemerle правда "_" еще используется для конструирования лямбда-выражений с безымянными аргументами, но даже в этом случае я был знаком с чем-то приблизительно похожим, а именно с boost::lambda.
M>>ведь если я первый раз вижу код на немерле и не писал на языках где есть def, я могу и с default перепутать, или с defolt VK>Я тебе не верю. Надо обладать невероятной степенью тупизны, чтобы не понять с первого взгляда что означает def в коде на Nemerle.
я тоже самое могу сказать про to_s
M>>такая же фигня с параметром "_" — человек первый раз видящий его хрен догадается что он значит. VK>Тоже не верю. "_" выглядит очень интуитивно понятно, особенно в match выражениях. Кроме того "_" это очень распространенная идиома. Я например имел о ней представление задолго до знакомства с Nemerle, из Пролога, SML, Haskell. В Nemerle правда "_" еще используется для конструирования лямбда-выражений с безымянными аргументами, но даже в этом случае я был знаком с чем-то приблизительно похожим, а именно с boost::lambda.
интутивно понятно потому что знал? Я не знал, и мне понятно не было — прочитал теперь понятно. зато я интуитивно понял что такое to_int(16) — хотя другие потратили полчаса на поиск в интернете.
Здравствуйте, mogadanez, Вы писали:
M>интутивно понятно потому что знал?
Нет, потому что это действительно интуитивно понятно. Я помню когда изучал Пролог(а это первый язык в котором я встретил паттерн "_"), то "_" это одна из немногих вещей, не вызвавших абсолютно никаких трудностей в понимании. То есть из кода было прекрасно понятно для чего "_" используется, я даже не помню чтобы я читал какое-то объяснение смысла этой "загадочной" конструкции.
M>Я не знал, и мне понятно не было — прочитал теперь понятно.
Не могу себе этого представить. Ну что может быть в нем непонятного? Например здесь:
beers(n : int) : string {
| 0 => "no more bottles of beer"
| 1 => "1 more bottle of beer"
| _ => $"$n bottles of beer"
}
M>зато я интуитивно понял что такое to_int(16) — хотя другие потратили полчаса на поиск в интернете.
Я кстати не верю и в то, что VladD2 не понял что такое to_int(16), хотя с его тезисами отчасти согласен. По-моему для любого человека, прошедшего "школу" libc, с его функциями вроде strtol и atoi, понять что-то подобное будет крайне легко.
M>>Я не знал, и мне понятно не было — прочитал теперь понятно. VK>Не могу себе этого представить. Ну что может быть в нем непонятного? Например здесь: VK>
VK>beers(n : int) : string {
VK> | 0 => "no more bottles of beer"
VK> | 1 => "1 more bottle of beer"
VK> | _ => $"$n bottles of beer"
VK>}
VK>
Для человека, незнакомого с pattern-matching'ом, здесь непонятно все
Здравствуйте, Mamut, Вы писали:
M>>>Я не знал, и мне понятно не было — прочитал теперь понятно. VK>>Не могу себе этого представить. Ну что может быть в нем непонятного? Например здесь: VK>>
VK>>beers(n : int) : string {
VK>> | 0 => "no more bottles of beer"
VK>> | 1 => "1 more bottle of beer"
VK>> | _ => $"$n bottles of beer"
VK>>}
VK>>
M>Для человека, незнакомого с pattern-matching'ом, здесь непонятно все
По моему скромному разумению, такие средства как pattern-matching или там list comprehentions как раз и делают код (за исключением особо навороченных случаев) понятным любому человеку изучавшему алгебру в школе. Собственно говоря, человек, увидивший пример с pattern-matching — уже в какой-то степени знаком с pattern-matching.
Вот что, например, непонятного здесь:
fac 0 = 1
fac n = n * fac (n-1)
Или здесь:
fac n = product [1..n]
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
'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
K>По моему скромному разумению, такие средства как pattern-matching или там list comprehentions как раз и делают код (за исключением особо навороченных случаев) понятным любому человеку изучавшему алгебру в школе.
Дело в том, что зачастую между алгеброй в школе и знакомством с pattern matching'ом или list comprehensions проходит довольно много времени
K>Собственно говоря, человек, увидивший пример с pattern-matching — уже в какой-то степени знаком с pattern-matching.
Это верно.
K>Вот что, например, непонятного здесь: K>
K>fac 0 = 1
K>fac n = n * fac (n-1)
K>
K>Или здесь: K>
K>fac n = product [1..n]
K>
Ну, это простейшие примеры, которые понятны сразу. А вот уже простейший list comprehension, например:
sort([Pivot|T]) ->
sort([ X || X <- T, X < Pivot]) ++
[Pivot] ++
sort([ X || X <- T, X >= Pivot]);
sort([]) -> [].
вызывает долгие ковыряния в мозгах и попытку вспомнить алгебру десятелетней давности
Единственное — синтаксис к этому не имеет ни малейшего отношения
ЗЫ. Мне кажется, любого, кому не нравится тот или иной синтаксис, надо насильно протащить через Lisp, Haskell и Erlang. Хотя бы на уровне "почитать туториалы". Потом на синтаксис перестаешь хоть какое-то внимание
... << RSDN@Home 1.2.0 alpha rev. 655>> ... <<James Last — March Of The Toreadors From "C>> ...
Здравствуйте, Mamut, Вы писали:
K>>По моему скромному разумению, такие средства как pattern-matching или там list comprehentions как раз и делают код (за исключением особо навороченных случаев) понятным любому человеку изучавшему алгебру в школе. M>Дело в том, что зачастую между алгеброй в школе и знакомством с pattern matching'ом или list comprehensions проходит довольно много времени
Ну, мне всегда казалось, что программисту в той или иной степени приходится сталкиваться с математикой. Хотя...
M>Ну, это простейшие примеры, которые понятны сразу. А вот уже простейший list comprehension, например: M>
M>sort([Pivot|T]) ->
M> sort([ X || X <- T, X < Pivot]) ++
M> [Pivot] ++
M> sort([ X || X <- T, X >= Pivot]);
M>sort([]) -> [].
M>
M>вызывает долгие ковыряния в мозгах и попытку вспомнить алгебру десятелетней давности
Это qsort! Я узнал его! Хотя это если и не первые строчки кода на Erlang, которые мне довелось увидеть, то по крайней мере, я могу точно сказать, что приходится смотреть код на Erlang мне очеь не часто. Если бы не ссылка, я бы его и не узнал.
Это, в общем, тоже простейший пример. Но речь как раз и идет о простых примерах, которые объявляются якобы непонятными.
M>Единственное — синтаксис к этому не имеет ни малейшего отношения
О чем и речь.
M>ЗЫ. Мне кажется, любого, кому не нравится тот или иной синтаксис, надо насильно протащить через Lisp, Haskell и Erlang. Хотя бы на уровне "почитать туториалы". Потом на синтаксис перестаешь хоть какое-то внимание
Туториалы я почитывал, но на синтаксис обращать внимание не перестал. Ну, понятное дело, я не забиваюсь в ужасе под стол, при виде какого-нибудь нового для меня синтаксиса, но я составляю каждый раз некоторое, временами даже излишне эмоциональное, мнение.
А почитать туториалы это полезно, согласен. Вообще хороший кругозор это очень полезно.
Собственно речь-то о том, что я — будучи, как функциональный программист, без малого пустым местом, не заметил у себя каких либо сложностей с восприятием. Правда, если это был не квиксорт, я признаю свое полное поражение и обязательно накажу себя трудом.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
'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
K>Собственно речь-то о том, что я — будучи, как функциональный программист, без малого пустым местом, не заметил у себя каких либо сложностей с восприятием. Правда, если это был не квиксорт, я признаю свое полное поражение и обязательно накажу себя трудом.
Здравствуйте, Курилка, Вы писали:
К>Собственно хотел предложить для прочтения (и обсуждения тоже) статью 5 things I hate about Ruby К>Особенно не положительным 4-й пункт кажется: навязываемый "Ruby Way", который ещё и не имеет однозначной трактовки. К>З.Ы. Как-то не нашёл куда логичнее будет это написать: руби почти насквозь императивный, поэтому в декларативные не лезет, а среди языков его нет...
Здравствуйте, Курилка, Вы писали:
К>Собственно хотел предложить для прочтения (и обсуждения тоже) статью 5 things I hate about Ruby
В последнее время промелькнуло несколько ссылок, которые позволяют оценить ситуацию с такими недостатками Ruby, как скорость выполнения и отсутствие IDE:
Здравствуйте, eao197, Вы писали:
VD>>отсуствие полноценной IDE (комплит, рефакториг, ...), E>Да есть IDE для Ruby, как open-source (FreeRDE, Mongrel, RDT), так и коммерческие (Komodo). E>Более того, Rubyist-ов совсем это не парит. Большинство используют VIM, emacs и TextMate (под MacOS), не испытывая при этом никаких сожалений.
Меня это парит. И, честно говоря, чем дальше, тем больше. Все IDE, к сожалению, времени пересмотреть не было. Сейчас работаю на эклипсе. Про полноценную отладку можно забыть — часик ждешь, пока программа дойдет до брекпоинта и при этом еще не всегда понятно — вошла ли IDE в режим отладки или нет.
По этому, если кто подскажет IDE с нормальным отладчиком, комплитом и средствами рефакторинга (бесплатную естественно) буду премного благодарен, т.к. сейчас трачу огромное количество времени на банальные вещи типа переименовывания, расставления отступов и разбора отладочной информации, которую приходится выводить на экран.
Здравствуйте, Anton Batenev, Вы писали:
AB>По этому, если кто подскажет IDE с нормальным отладчиком, комплитом и средствами рефакторинга (бесплатную естественно) буду премного благодарен, т.к. сейчас трачу огромное количество времени на банальные вещи типа переименовывания, расставления отступов и разбора отладочной информации, которую приходится выводить на экран.
Боюсь, что помочь не смогу, пользуюсь VIM-ом. Отладчик никогда не запускал, с отступами, переименованием и отладочными печатями так же проблем не было (но это, может быть, всего лишь следствие моего стиля работы).
Может быть NetBeans (здесь показано и реформатирование кода) или Ruby-In-Steel (feature-list).
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Боюсь, что помочь не смогу, пользуюсь VIM-ом. Отладчик никогда не запускал, с отступами, переименованием и отладочными печатями так же проблем не было (но это, может быть, всего лишь следствие моего стиля работы).
Надо это куда-то записаать. А то жаль такую фразу "С закатом солнца в ручнуюю проблем не было (но это, может быть, всего лишь следствие моего стиля работы)".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ну, да. Видишь как народ толпами ломится за счастьем? И я нет. Видимо он тупой. Самое время вспомнить что-то вроде "силлионы мух не могут ошибиться...".
Да не важно, тупой ли он и ошибается или нет — важно, что на большей толпе можно сделать больше бабла. А здесь уже "правят бал" маркетинг и прочие методы влияния на эту самую толпу. Техническая сторона дела — далеко не на первом месте. Хотя обкатка на толпе может давать неплохие результаты даже в техническом плане.
Здравствуйте, mogadanez, Вы писали:
M>а почему тогда в том же немерле def означает define? M>почему сократили? почему не полностью define? ведь если я первый раз вижу код на немерле и не писал на языках где есть def, я могу и с default перепутать, или с defolt
M>такая же фигня с параметром "_" — человек первый раз видящий его хрен догадается что он значит.
Здравствуйте, mogadanez, Вы писали:
M>а почему тогда в том же немерле def означает define? M>почему сократили? почему не полностью define? ведь если я первый раз вижу код на немерле и не писал на языках где есть def, я могу и с default перепутать, или с defolt
M>такая же фигня с параметром "_" — человек первый раз видящий его хрен догадается что он значит.
Согласись, что запомнить два соглашения несколько проще чем 222.
Учитывая частоту применения сокрашение def и _ оправданы. А вот сокращать методы в библиотеках — это порочный путь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.