Здравствуйте, FDSC, Вы писали:
FDS>>>Почему же я до сих пор так и не смог написать даже простую работающую программу на Nemerle. Я уже даже на Scheme стал писать (в процессе спора на форуме), а вот на Nemerle — ну никак, ну не получается!
Значит не твое это.
FDS>здесь
в рамках этого форума частично обсуждаем. FDS>Не получается понять синтаксис языка: что ни напишу, компилятор всё время ругается .
Это значит, что ты чего-то не понимаешь или понимаешь не правильно. По себе знаю, что такое бывает, когда мозг пытается восполнить незнание языка путем подключения фантазии и воображения.
FDSC>Подожду пока выйдет какая-нибудь нормальная документация...
А может стоит повнимательнее почитать существующую документацию?
в рамках этого форума частично обсуждаем. FDS>Не получается понять синтаксис языка: что ни напишу, компилятор всё время ругается . Подожду пока выйдет какая-нибудь нормальная документация...
Судя по тому как плаваешь в тех же замыканиях тебе нужно вообще подучить базовые понятия функционального программирования, лучшая книга по моему "Функциональное программировани" Филда и Харрисона
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Странно, когда прямо заявляют, что ничего дельного в том же Lisp нет, поскольку он мало распространён — это не пренебрежение. Когда же указывают на примитивность майнстрима — это, типа, обида и оскорбление. Не находишь, что кто-то где-то ставит всё с ног на голову?
Если говорят именно так — то значит и тоже хороши. Но чаще говорят всего лишь что "Лисп не является эффективным (по сумме критериев) средством для решения большинства современных задач — о чем и свидетельствует его малая распростаненность".
(ниже скажу про дешевизну)
Это никак не означает, что язык плохой — просто большинство текущих задач можно решить более простыми и удобными средствами.
F>>Для данной задачи? Должны быть лучше и качественне, по критериям, необходимым для выживания компании. "Лучше" и "качественнее" вообще, во всем, и всегда — так просто не бывает.
ГВ>Вот! Правильно. По критериям, необходимым для выживания компании. Наличие готовых недорогих специалистов — не самый малозначительный из них. Ergo, имеются серьёзные предпосылки выбора майнстрим-языка по критериям, не связанным с адекватностью этого языка задаче.
Эээ. Что-то тут не то.
Если использование языка позволяет нанять более дешевых специалистов и решить ту же самую задачу за то же самое время и с тем же качеством — то это огромный плюс для языка! Это вроде должно быть очевидно. Делать иначе — это аналогично изготовлению унитазов из золота. Можно, но совершенно бесполезная трата ресурсов.
Опять же — не надо только думать, что если язык имеет низкий порог вхождения, то на работу следует нанимать полных даунов Так делают частенько, но ни к чему хорошему это не приводит...
Тут так же имеется часто (хотя и не всегда, согласен) верное следствие, что если даже слабый программист сможет при помощи данного средства эффективно решить задачу, то более сильный с помощью того же средства сможет решить ее еще быстрее.
F>>Вроде я про то и сказал — каждой задаче свое средство — зачем опять пытаться внедрить "элитарный язык написания серебрянных пуль"? ГВ>Вот-вот-вот. И ты, фактически, вторишь тем, кто говорит, что раз Lisp не в майнстриме, то его положительные стороны высосаны из пальца.
Я говорю, что для Лиспа, наверное, есть свои задачи, которые им хорошо решаются. Но нельзя говорить, что он просто лучше "мейнстримных языков". Равно неверно будет утверждать, что он просто хуже.
Он хуже или лучше в том или ином конкретном случае. Например, в нашей вот компании он будет однозначно хуже — потому что пользы от него при решении наших задач не видно, а переобучать придется всех программистов. Ну и с внедрением у заказчика будет трындец. То есть минусы — видно, плюсы — нет. В каком-то другом случае это может быть совсем не так, и там Лисп будет рулить по полной.
Здравствуйте, vdimas, Вы писали:
K>>И осуждение бездумного следования за меньшинством никак не является пропагандой бездумного следования за большинством. И наоборот. K>>Это доступно?
V>Является, к сожалению. У характеристики "меньшинство/большинство" всего 2 значения.
Мдя.
Да хоть одно.
Если некто осуждает бездумное следование за меньшинством, это еще не значит, что он призывает бездумно следовать за большинством. Он может, например, призывать воспользоваться своей головой и самому решить, куда двигаться...
Нашел что процитировать. Первое утверждение при этом ты считаешь нормальным? Ну, что при следовании за большинством работа мозга нужна по-минимуму?
Так почему тебя повергает в шок, что следование за меньшинством требует сколько-то больших усилий?
Бездумное следование что за большинством, что за меньшинством — одна и та же фигня по сути и явно требует меньше мыслительных усилий, нежели движение в ту сторону, в которую тебе действительно требуется (и не важно, с кем твое направление совпадает).
Здравствуйте, Геннадий Васильев, Вы писали:
K>И осуждение бездумного следования за меньшинством никак не является пропагандой бездумного следования за большинством. И наоборот. K>Это доступно?
ГВ>Доступно. Но осуждение "бездумного следования вообще" не должно сопровождается указанием качеств какой-либо группы "за которой следуют". В данном случае
, однако, группа была указана и коррекций не последовало.
Вообще-то это высказываение как раз и было коррекцией — оно отлично дополняло высказывание предыдущего оратора, что "следование за большинством в наименьшей мере требует работы мозга", и как раз приводило систему в баланс — получая именно ситуацию "бездумного следования за кем-либо вообще".
Предыдущий оратор из этого высказывания взял только часть. Это называется — некорректное уточнение.
Ну типа, как если сказать, что "все автомобили с бензиновым двигателем загрязняют воздух" — это одно. Оно корректно.
А если сказать — "ВАЗ 21099 — отличная машина для выезда на природу, а Opel Astra — загрязняет воздух" — то это — некорректно. Хотя при этом — абсолютно истинно. Данное высказывание никак не отрицает, что 21099 так же загрязняет воздух, просто про это умалчивается, а на Астре — акцентируется.
Вот один в один случай с той беседой Андрея Коростелева и IT. Так что зря ты это вытащил. Андрея (возможно невольно) применил прием демагогии, а IT ему на это указал.
Здравствуйте, fmiracle, Вы писали:
F>Вот один в один случай с той беседой Андрея Коростелева и IT. Так что зря ты это вытащил. Андрея (возможно невольно) применил прием демагогии, а IT ему на это указал.
Спастбо, друг! Ты вернул мне веру в людей. Всё таки ещё есть на свете разумные люди, которые способны разглядеть где стёб, а где нет.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, McSeem2, Вы писали:
VD>>>Задумывался. Когда ты к нему прибегал. ГВ>>Ну так почему же этот приём считается некорректным? ГВ>>[/q]
MS>Знаешь, Геннадий, а просто потому, что он здесь — главный. Я ни в коем случае не признаю его правоту, но понимаешь ли в чем дело — кто создал эху, тот и хозяин в ней. Так исторически сложилось и поддеживается на RSDN. И это правильно, как бы ты к этому ни относился. И ты должен это учитывать, несмотря на всякие "преведы" уважаемого Влада (извини, Влад, но слово "отвичаю" я приравниваю к слову "превед" в твоей лексике — пожалуйста, избегай впредь падонковщины, иначе я буду причислять тебя к неуважаемым мною падонкам). Такие дела.
Хм. Вроде бы форум называется не "в гостях у VladD2".
<< Под музыку: ERA — Devore Amante >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, fmiracle, Вы писали:
K>>И осуждение бездумного следования за меньшинством никак не является пропагандой бездумного следования за большинством. И наоборот. K>>Это доступно?
ГВ>>Доступно. Но осуждение "бездумного следования вообще" не должно сопровождается указанием качеств какой-либо группы "за которой следуют". В данном случае
, однако, группа была указана и коррекций не последовало.
F>Вообще-то это высказываение как раз и было коррекцией — оно отлично дополняло высказывание предыдущего оратора, что "следование за большинством в наименьшей мере требует работы мозга", и как раз приводило систему в баланс — получая именно ситуацию "бездумного следования за кем-либо вообще".
Какая ещё, сто тысяч микробайт в шлейф, система?! Следовать "общепринятым" терминам в противовес правильных — как раз показатель бездумности. В таком контексте упоминание меньшинства в негативном смысле как раз указывает на то, что надо следовать за большинством, даже если оно поставило всё с ног на голову.
F>Предыдущий оратор из этого высказывания взял только часть. Это называется — некорректное уточнение.
Не-а. АК всё совершенно правильно сказал. Именно большинство, именно бездумное следование и именно размахивание "общепринятым" как показатель этой самой бездумности.
[skip неудачную аналогию]
F>Вот один в один случай с той беседой Андрея Коростелева и IT. Так что зря ты это вытащил. Андрея (возможно невольно) применил прием демагогии, а IT ему на это указал.
Я понял в чём прикол. Не надо додумывать за автора, что он собирался сказать, что он мог сказать, что он подумал и что мог бы подумать, но сразу не собразил. Вот что было сказано, то и стало объектом обсуждения.
<< Под музыку: ERA — Devore Amante >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
B>Я добавил слово return. Очевидно, что измененный код будет подставлен в макрос и, как следствие, весь макрос не будет выполнен до конца. А значить функциональность программы будет нарушена (не будет освобождены ресурсы). Судя по Вашим словам теперь Вы откажетесь от использования макросов в Nemerle, т.к. "их использование может быть небезопасно". Или у Вас имеются какие-то правила, позволяющие избегать данных проблем?
Нет, не совсем так. Если ты имел в виду, что прервется выполнение макроса — это не соответствует действительности
Макрос выполняется на этапе компиляции, и этот return (которым, кстати, по умолчанию нельзя воспользоваться) для макроса — просто узел AST.
Если же ты имел в виду, что прервется выполнение "развернутого" кода до освобождения ресурсов — то, таки, да. Но это небольшая недоработка в макросе. Всего-то надо завернуть объекты DbCommand и DbDataReader в юзинг.
Так что в данном конкретном случае у Nemerle нет проблем.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>С равным (совершенно равным!) успехом можно пульнуть исключение из любого метода в языке, подобном C++. Например, так:
VD>Исключение на то и исключение, что после него программа уже работать не будет. Его или поймает обработчик, или вываится окошко. А вот передача управления никем поймана не будет. Это будет просто неверная работа программы. И понять, что ошибка произошла из-за неверной передачи уже будет очень не просто.
Исключения исключениям рознь. В джаве и дотнете при вылете исключения редко когда можно сделать что-то осмысленное. Но на них свет не сошелся.
Здравствуйте, IT, Вы писали:
F>>Вот один в один случай с той беседой Андрея Коростелева и IT. Так что зря ты это вытащил. Андрея (возможно невольно) применил прием демагогии, а IT ему на это указал. IT>Спастбо, друг! Ты вернул мне веру в людей. Всё таки ещё есть на свете разумные люди, которые способны разглядеть где стёб, а где нет.
А если бы ты так сильно не шифровался, то и не было бы недоразумений.
<< Под музыку: ERA — Devore Amante >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
F>Нашел что процитировать. Первое утверждение при этом ты считаешь нормальным? Ну, что при следовании за большинством работа мозга нужна по-минимуму?
Да, ибо так оно и есть.
F>Так почему тебя повергает в шок, что следование за меньшинством требует сколько-то больших усилий?
Потому что сказано это было во вполне определённом контексте.
F>Бездумное следование что за большинством, что за меньшинством — одна и та же фигня по сути и явно требует меньше мыслительных усилий, нежели движение в ту сторону, в которую тебе действительно требуется (и не важно, с кем твое направление совпадает).
+1
<< Под музыку: ERA — Devore Amante >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
ГВ>>Правильно. Пытаться определить ценность высказываний по количеству того, что человек ранее сделал — неверна by design. Тут много всего сразу примешивается: от апелляций к личности до аргументации опытом. VD>Ген, ты бы хоть что-то по какму-нибудь делу сказал. Твои упражнения в софистики уже приелись.
Я сказал. А ты мог бы ответить по теме самодрессуры, было бы полезней.
VD>Это говно тебя же и оскорбляло, а ты его защищаешь только чтобы с кем-то поспорить. Ты просто подумай о маразме ситуации!
1. Он (или Kolhoz? подозреваю, что это один и тот же человек) высказал очень верную мысль: програмирование — занятие не для всех и нечего на этих самых "всех" равняться. Мне это чертовски нравится.
2. По теме он тоже совершенно прав, ИМХО, для хорошего программиста синтаксис сам по себе большим ограничением не является. Это ммм... by design. Семантика важнее.
3. Если ты думаешь, что я буду кидаться на каждого, кто скажет "C++ — отстой", то ты очень неправильно думаешь.
VD>Мы тут с IT во всю колбасим на языке котрый Lisp за предка считает и пытаемся оградить общество от хмаов, а ты оправдываешь былдогея который тебя же (мэйнстрим-С++-программиста) с дерьмом сравнивает. Тебе не странно?
Раньше ты уговаривал "преодолеть фобии" и что-то там с сознанием сотворить. В этом сезоне уговариваешь присоединиться к мэйнстриму?
<< Под музыку: ERA — Devore Amante >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FDSC, Вы писали:
FDS>По C# есть? Можно ссылку? Интересно посмотреть... (если не трудно, конечно) FDS>Да, я не часто туда захожу.
Ссылки не храню. А так искать в лом.
FDS>По поводу ответов и вопросов — они действительно интересные, не спорю, но, скажем, конкретно по C# у меня ещё не возникало ни одного вопроса, на который бы мне нужно было обращаться в форум: это огромный плюс для этого языка в моих глазах (и в форуме не видел такого, что бы вообще нельзя было понять самостоятельно).
Все можно понять самостоятельно. То что ты в большинстве случае можешь решить проблемы сам, то скорее твое достоинство нежели Шарпа.
Что касается вопросов, то там бывает что задают вопросы люди которые пишут парсеры того самого Шарпа (работники ДжетБрэйнс, те что РеШарпер пишут). И не думаю, что они задают вопросы только потому что сами тупы. Все же в огромном количестве мнений всегда найдется то что стоит узнать.
FDS> А по Nemerle у меня уже десяток вопросов (на которые я сам не знаю ответа), которые возникли просто после написания простейших функций.
Ну, вот у меня и с Немерле вопросов обычно не возникает. Я чаще удивляюсь тому, что я только подумал что было бы здорово сделать так-то, а оно уже сделано.
FDS> [я бы сказал, что на уровне простейших функций Scheme гораздо легче для изучения, чем Nemerle ]
Я бы не скалал бы. Для императивного программиста Немерле в сто раз ближе. Просто новое всегда кажется более сложным.
FDS>Хм, может я и не вчитывался (кое-где честно говоря действительно по диагонали), но этот раздел я раза три или четыре прочитал (включая файлы на самом сайте), и вот ну не вижу отличий: чем в Delphi функции — не замыкания! (см. пример ниже)
Вот это и есть момент ктода ты думаешь (иточнее видишь) императивно. Тут нужно изменить сознание. А это не просто.
Надо осознать что такое замыкание. (оно, кстати, есть и в анонимных методах C# с которым у тебя проблем нет). Так же нужно осознать что функция может быть значением (не тлько в события помещатсья, но и просто тупо в массив класться, передаваться и комбинироваться с другим функциями).
Как только ты это поймешь, ты поймешь и то что Дельфи это даже на породию не катит. Это просто прошлый век.
FDS>Но чем Delphi в данном случае уступает [кроме отсутствия type inference]?
В том что функции не могут быть замыканиями. В том что они не могут быть объявлены внутри выражений. В том что их нельзя возвратить куда угодно. В том что их нельзя комбинировать.
Еще нужно понимть что будет если эту функцию возврарить из метода или поместить в некое поле. У Делфьи это будет потенциальная ошибка. В Немерле — совершенно корректная операция. Если замыкание захватывает переменные, то создается невидмый класс, а переменные заменяются на его поля.
FDS>Выводит в консоль число "7", так же как и ваш пример.
Тут как минимум стоит сравнить объем и понятность кода. Если код меньше и проще, то это уже приемущество. Но это еще простой случай. В более сложном разница будет еще более очевидна.
В C# же где все просто вообще нет локальных фукнций.
VD>>
VD>>def addX = add(x, _);
FDS>// Я думаю, надо def addX = add(_, x); ?
Без разницы. Сложение не позволят переставлять параметры.
FDS>Да, с этим согласен - это круто, не считая замечания, так как несвязанный параметр, как мне кажется, тут первый, а не второй, как вы написали. Но это, собственно, уже не к локальным функциям относится, а к созданию новых функций из старых.
Это не круто. Это то что должно быть. А теперь переходим к более интересным вещам.
Часто бывает нужно передать некой универсальной фукнции кусок кода который ее специализует.
Например, у нас есть списко и мы хотим найти в нем некое значение. Как ты это сделаешь на Дельфи? Цикл? Сколько строк это займет? А как будет читаться?
В Немерле можно просто создать лямбу (ананимную фукнцию).
Вот, например, как можно найти значение в списке:
[c#]
def result = users.Filter(user => user.Name == "Вася");
Вот рельный код написанный мной пару дней назад:
/// Remove extension methods defined in code (not external).public RemoveInternalExtensionMethods() : void
{
foreach ((name, lst) when lst.Exists(_ is MethodBuilder) in _extension_methods.KeyValuePairs)
{
def newList = lst.RevFilter (x => !(x is MethodBuilder));
if (newList is [])
_ = _extension_methods.Remove (name);
else
_extension_methods[name] = newList;
}
}
Попробуй тди хохмы напасать его аналог на Дельфи.
И это еще я занимался оптимизациями по производительности.
FDS>Конечно, как мне вчитываться, когда я на первом же своём тесте получил ошибку, которую не могу исправить, потому что не понимаю. FDS>(пожалуй первый раз в жизни у меня т а к и е проблемы с синктасисом )
Это после Схемы то?
FDS>Некомпилируется: FDS>
FDS>...
FDS>class C
FDS>{
FDS> public static Method(i : ref int) : int
FDS> {
FDS> i = i + 1;
FDS> i
FDS> }
FDS>}
FDS>def MM(i : ref int) : int
FDS>{
FDS> i = i + 1;
FDS> i
FDS>}
FDS>mutable x = 5;
FDS>WriteLine(C.Method(ref x));
FDS>WriteLine(MM(ref x));
FDS>_ = ReadLine();
FDS>
FDS>Ошибки:...
Похоже баг.
FDS>Что я должен думать о вменяемости компилятора? Естественно у меня чисто познавательные вопросы: потому что язык мне всё-таки интересен для практических целей.
Откровенно говоря ref/out параметры в этом языке используются не часто и уж точно без таких наворотов. Видимо что-то не учли.
Зато ты моещь возвращать множественные значения из фукнции. Это намного добнее.
FDS>P.S. Можно самый важный вопрос: вы знаете о Nemerle довольно много: это вы исходники разбирали или всё из примеров вывели?
В основном я читал то что написно на сайте. Но конечно многое услышал от других. Vermicious Knid, например, очень многое подсказал.
Ну, и конечно читая исходники компилятора получаешь много реального опыта. Ведь одно дело прочесть про что-то, а другое видить применение этого на практике.
Код компилятора вообще уникален. Это супер хай-тэк заключенный в обалденно малый объем исходников. Исходники компилятора 1.5 метра. А сложность превышает все что я видел. Немерле очень выразителен. Особенно если нужно описывать иерархически и дургие констуркции.
FDS>Вообще, там есть в исходниках какой-нибудь отдельный файл описания синтаксиса (вкл. макросы)?
ЕБНФ есть на сайте. А код компилятора это куча сложного кода. Декларатвно там только АСТ описан.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
молодец. А теперь постарайся вспомнить, что форум у нас имеет структуру дерева, поэтому то невразумительное сообщение у меня вывелось первым, а вот это про Автокад — чуть ли не десятым по счету после других сообщений. Имей немного уважения к людям, пиши понятнее.
V>Если же вопрос по существу, т.е. тебе важен ответ — то он таков: уверен. В любом случае без личной встречи качественно пободаться не получиться, а заочно у меня есть некие субъективные основания так предполагать.
Просто удивительно, но количество желающих применить ко мне аргументацию с позиций физической силы резко уменьшилось до нуля после года занятий в "качалке".
Как ты думаешь, в чем тут может быть дело?
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Глупость это была бы несусветная.
с чего это вдруг? Тебе составляет какие-то проблемы привести список выполненных тобой работ? И мы со Владом сразу отправимся посыпать голову пеплом и сгорать от стыда.
ГВ>Ты перечитай ветку, а то, сдаётся мне, что ты путаешь, кто к кому обращается и кто что почему сказал.
тебе много чего сдается, но почему-то все время не по делу.