Здравствуйте, kaa.python, Вы писали:
KP>P.S. сравнивать со Scala не корректно, так как она реально используется, в отличие от.
Дело в том, что Java уныла настолько, что Scala на её фоне просто блеск! Вот и переходят джависты на Скалу. А Nemerle по сравнению с C# не настолько круче, просто потому, что сам C# намного превосходит Джаву по плюшкам. Если бы C# оставался до сих пор на уровне первой версии, то на Nemerle, F#, Boo обращали бы гораздо больше внимания.
Здравствуйте, koodeer, Вы писали:
K>Дело в том, что Java уныла настолько, что Scala на её фоне просто блеск! Вот и переходят джависты на Скалу.
Так унылость Java это один из ее охрененных плюсов, так как даже индусам мешает реально отжечь. А вот коллегу индуса пишущего на Scala я бы реально опасался не меньше чем его же, пишущего на Си
K> А Nemerle по сравнению с C# не настолько круче, просто потому, что сам C# намного превосходит Джаву по плюшкам. Если бы C# оставался до сих пор на уровне первой версии, то на Nemerle, F#, Boo обращали бы гораздо больше внимания.
Воот. о чем я и говорил выше. Не на ту аудиторию нацелились, для очередной опердени вся эта мощь в никуда
var f = new Func<int, string>(x => x.ToString());
var dict = Dictionary<int, string>();
var dict2 = Dictionary<int, Func<int, string>>();
foreach (var i in Enumerable.Range(1, 10))
{
dict.Add(i, f(i));
dict.Add(i, f);
}
Предвидя возражения — дело не в краткости, дело в отсутствии необходимости зацикливаться на ненужных деталях. Если первый Dictionary я пишу в C# без проблем, то второй уже заставляет на секунду отвлечь мозг деталями, не относящимися к основной задаче. Начинаем усложнять и все становится печальнее.
Здравствуйте, kaa.python, Вы писали:
KP>Так унылость Java это один из ее охрененных плюсов, так как даже индусам мешает реально отжечь.
С этим никто не спорит. Дубовость Java уменьшает порог вхождения, упрощает поддержку старого кода. Но как только разработчики переходят некий рубеж, сразу начинаются AOP-фреймворки, внешние кодогенераторы и прочее. То есть всё то, что в Nemerle реализовано внутри, в других языках приходится делать сторонними утилитами/плагинами. Индус с AOP не менее страшен, чем индус со Scala.
Здравствуйте, Ziaw, Вы писали:
Z>Тем не менее. Язык так и остался передовым, просто IT переоценил скорость прогресса в отрасли.
IT переоценил смелость и дальновидность советских учёных. Языком нужно было начинать заниматься серьёзно сразу после того как его забросили поляки, т.е. где-то в 2007-м году. Не фиксить бесконечные баги, а писать всё начисто. Понимание этого пришло только пару лет назад и то с большим скрипом. А что-то начало делаться вообще меньше года назад.
Тем не менее самому языку альтернатив нет до сих пор и не будет ещё очень долго. Жаль что упущена куча времени, но шансы ещё есть при условии, что советские учёные всё же окажутся смелыми и дальновидными.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Ziaw, Вы писали:
Z>Предвидя возражения — дело не в краткости, дело в отсутствии необходимости зацикливаться на ненужных деталях. Если первый Dictionary я пишу в C# без проблем, то второй уже заставляет на секунду отвлечь мозг деталями, не относящимися к основной задаче. Начинаем усложнять и все становится печальнее.
Я даже не буду возражать — действительно более лаконично и понятно.
Но проблема как я уже заметил не в modern syntax языка, а в наборе киллер-фич как сейчас принято выражаться.
Здравствуйте, Ziaw, Вы писали:
Z>Типы указывать не надо, компилятор их выведет.
Выведет, несомненно, только вот что будет, если он выведет несколько не так, как программист предполагает — разумеется, из-за ошибки (или неправильного понимания) программиста ? Компиляцию все это пройдет и аукнется в рантайме, причем может, и не сразу.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Выведет, несомненно, только вот что будет, если он выведет несколько не так, как программист предполагает — разумеется, из-за ошибки (или неправильного понимания) программиста ? Компиляцию все это пройдет и аукнется в рантайме, причем может, и не сразу.
Не представляю себе такой ситуации. Вообще. То, что компилятор не смог вывести, казалось бы однозначный тип, и ему пришлось где-то подсказать — вполне реально. И то, чаще всего программист ошибся именно в однозначности. Но чтобы компилятор вывел не то, не могу представить.
Разве что детские ошибки, типа размерности целого. Так их и с указанием типов делают точно так же.
Здравствуйте, Ziaw, Вы писали:
PD>>Выведет, несомненно, только вот что будет, если он выведет несколько не так, как программист предполагает — разумеется, из-за ошибки (или неправильного понимания) программиста ? Компиляцию все это пройдет и аукнется в рантайме, причем может, и не сразу.
Z>Не представляю себе такой ситуации. Вообще. То, что компилятор не смог вывести, казалось бы однозначный тип, и ему пришлось где-то подсказать — вполне реально. И то, чаще всего программист ошибся именно в однозначности. Но чтобы компилятор вывел не то, не могу представить.
Прочти внимательно, что я написал. Компилятор вывел правильно. Программист предполагал иное. Программист неправ, а не компилятор, но это осталось незамеченным на этапе компиляции и проявилось в рантайме.
Здравствуйте, some_user_222, Вы писали:
__>Спустя 7(!!!) лет все осталось на своих местах. На Nemerle все также написан только компилятор Nemerle, количество вопросов на StackOverflow не превышает полусотни(для Go — 1600, Scala — 13500). Смешно, но сегодняшний тон дифирамбов и оптимистический речей все тот же
Совершенно безотносительно к N могу лишь отметить, что успех или неудача языка определяется далеко не только тем, насколько он хорош или плох, а еще и массой иных факторов.
Ну а применительно к N неудача была вполне очевидна (по крайней мере мне) еще 7 лет назад. Просто я хорошо знаю историю языков программирования.
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Ziaw, Вы писали:
Z>>Типы указывать не надо, компилятор их выведет.
PD>Выведет, несомненно, только вот что будет, если он выведет несколько не так, как программист предполагает — разумеется, из-за ошибки (или неправильного понимания) программиста ? Компиляцию все это пройдет и аукнется в рантайме, причем может, и не сразу.
Не исключено, но маловероятно. Гораздо (думаю, на пару порядков) более вероятен такой сценарий: все эти детали и указания типов, чтобы ублажить тупой компилятор, отвлекли от того, что собственно в методе делается, благодаря чему в методе содержится ошибка, которая которая была бы видна сразу, если бы не приходилось напрягать глаза, выискивая логику в нагромождениях избыточного кода.
Здравствуйте, Ziaw, Вы писали:
__>>Давайте step by step: __>>Что есть по вашему "хороший вывод типов"?
Z>Например это:
def f(x) { x.ToString() }
def dict = Dictionary();
def dict2 = Dictionary();
foreach (i in [1 .. 10])
{
dict.Add(i, f(i));
dict.Add(i, f); // возможно имелось в виду dict2?
}
Показательная опечатка. И какого типа dict? А какого неиспользуемый dict2? Если компилятор ругнулся, то почему он "такой тупой", что не смог вывести тип? Если — не ругнется, почему он "такой тупой", что пропустил такую баналную ошибку?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Прочти внимательно, что я написал. Компилятор вывел правильно. Программист предполагал иное. Программист неправ, а не компилятор, но это осталось незамеченным на этапе компиляции и проявилось в рантайме.
Я внимательно прочел. Повторяю, не могу себе представить. Вон arltek может, мне очень интересен пример или, хотя бы, ход мысли.
_> def f(x) { x.ToString() }
_> def dict = Dictionary();
_> def dict2 = Dictionary();
_> foreach (i in [1 .. 10])
_> {
_> dict.Add(i, f(i));
_> dict.Add(i, f); // возможно имелось в виду dict2?_> }
_>
_>Показательная опечатка. И какого типа dict? А какого неиспользуемый dict2? Если компилятор ругнулся, то почему он "такой тупой", что не смог вывести тип? Если — не ругнется, почему он "такой тупой", что пропустил такую баналную ошибку?
Не показательная. Указание типа от нее не избавит. Компилятор не сможет вывести типы и ругнется. В C# мы так же поймаем ошибку компиляции, только там нам для этого придется полностью указать типы.
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, fin_81, Вы писали:
_>>Показательная опечатка.
DR>И, что тоже показательно, компилятор её поймал бы.
А если это не опечатка? Если так и было задумано. [ dict2 = Dictionary() ] это просто забытый и не используемый код. А значения из dict будут использоваться в зависимости от типа: или дергаться функция или использоваться значение.
Здравствуйте, Ziaw, Вы писали: Z>Не показательная. Указание типа от нее не избавит. Компилятор не сможет вывести типы и ругнется. В C# мы так же поймаем ошибку компиляции, только там нам для этого придется полностью указать типы.
псевдокод
dict = new Dictionary[Variant[int, int->int]]
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Ну а применительно к N неудача была вполне очевидна (по крайней мере мне) еще 7 лет назад. Просто я хорошо знаю историю языков программирования.
При чём тут история? Историю всегда делали конкретные люди. А конкретные люди на сегодняшний день полностью отсекли комьюнити от разработки компилятора и молчат как партизаны о своих (не) успехах. Может у них там всё очень хорошо. А может и не очень. Но нам это не известно. Если бы они рассказывали чего они достигли на сегодняшний день, то этого топика вообще бы не было, а все бы дружно истекали слюной, говорили ВАУ и поторапливали разработчиков.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, fin_81, Вы писали:
_>А если это не опечатка? Если так и было задумано. [ dict2 = Dictionary() ] это просто забытый и не используемый код. А значения из dict будут использоваться в зависимости от типа: или дергаться функция или использоваться значение.
Если так и было задумано, то придётся явно указать, что тип значения — object. Это иногда требуется, но редко.