Здравствуйте, Vermicious Knid, Вы писали:
ПК>>-1
VK>Вопрос: зачем комитет C++ решил ввести в новый стандарт локальный вывод типов для переменных? Неужели чтобы ухудшить читабельность?
[Не]явная типизация [не]явной типизации рознь. В ряде (простых) случаев с неявной типизацией читабельность лучше, в ряде (более сложных) — хуже. Я не согласен с оценкой соотношения первых и вторых ("Явная типизация в большинстве случаев только ухудшает читабельность"); у меня опыт ровно обратный
.
ПК>>Именно из-за разных типов я и сказал о compile-time циклах. Это вполне осмысленно для любых утилит обобщенной обработки tuples.
VK>В Nemerle для кортежей никаких костылей в принципе не нужно, это внутренний тип. Они реализуют Equals, GetHashCode, ToString, поддерживается сериализация.
VK>Если этого недостаточно, то можно во-первых попытаться расширить классы внутренней библиотеки, которые отвечают за фактическую реализацию кортежей. А во-вторых есть макросы. <...>
И? Как это является возражением к тезису о необходимости использования в этом случае отличного от (i, _) = t синтаксиса? В случае get<n>(t) может быть использован тот же синтаксис. Это все, что я хотел сказать по этому поводу.
VK> <...>
ПК>>Кстати, какого типа выражение t[0] в Nemerle?
VK> Я надеюсь вышеприведенный пример ответил на данный вопрос.
Честно говоря, не вполне...
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[11]: Как думаете что мне больше всего нехватает в C# из N
Здравствуйте, eao197, Вы писали:
E>А вот теперь посмотри: год назад, ты уверял меня, что C# -- это круто, что нужно бросать C++ и писать на C#. Послушал бы я тебя тогда, к сегодняшнему моменту чего-нибудь успел бы сделать на C#. Но чу! C# то не так крут, есть и круче. Значит, нужно бросать C# и писать на Nemerle. С такими же перспективами через 1.5 года перебраться под OCaml/NET (к примеру).
нет предела совершенству
хотя OCaml/NET вряд ли представит что-то новое по сравнению с немерле
E>Так что получается, что на массированную рекламу лучше не поддаваться, никуда не перепрыгивать. Время покажет, на какую платформу имеет смысл переходить. Может и правда это будет Nemerle. Если так, то я ничуть не огорчусь, что C# прошел мимо меня.
Вот и будешь ты так сидеть, а языки будут проходить и проходить.... мимо тебя
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, VladGalkin, Вы писали:
VG>ИМХО: pair это очень конкретный и специальный случай кортежа, и вспоминать о нём не к лицу. Даже суть его вынесена в название (парочка ) и появился он, скорее всего, (а скорее всего так и есть) именно для использования в контейнерах для пар ключ/значение, а не для поддержки идеи кортежей, в том виде, в каком я хочу быть свободным использовать её.
В контексте того, что Влад сообщил о том, что вмесчто удобного Tuple Nemerle ему пришлось писать свой класс на два значения — ИМХО очень к лицу вспомнить и про std::pair.
И случай этот не конретный, в частности в терминах С++, опять же не скажу за всю Одессу, — Кортеж служит для передачи анонимных значений, а std::pair — поименных ( first, second ). Но это так, к слову — ИБО КАЗУИСТИКА
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, VladD2, Вы писали:
VD>Обезьяна — теплокровное животное наделенная мозгом. А...
А может ли обезьяна, при наличии мозга, программировать, пусть даже на таком удобном языке как C#, а на Nemerle ?
Такие вот родственнички
VD>Применительно к данному случае они ничем от шаблонов не отличаются. VD>Шаблоны С++ воплощаются компилятором. А дженерики джит-компилятором.
как это не чем. В С++ инстанцирование шаблона осуществляется во время компиляции, а в C#, тоже, что понимается под этим в С++, производится в в рантайм.
Исходный вопрос был чем Дженерик KeyValuePair<K, V> лучге чем шаблон std::pair
Может тогда расскажешь чем он лучше KeyValuePair<K, V>?
и один из пунктов, которые я привел — это был compile-time. После этого Вы грите что это в конте5сте данного обсуждения несуществено .
VD>>>Владу вообще не нравятся эмуляции и извращения. Он любит простые и чистые решения. Чем проще и чище, тем лучше. S>>Отчего же Влад так любит работать на виртуальном байт-коде, который не имеет ничего общего с реальным и который потом какой-то приблудой компилируется в конретный машинный ?
VD>Не уловил связи. VD>Что касается байткодов, то я с ними не работаю. Их читают разные джит-компиляторы. Я максимум что делаю — это смотрю их через Рефлектор (декомпилятор). А при отладке я вижу такой же гнусный ассемблер.
Виртуальная машина — эот эмуляция реальной, байт-код — это псевдо код — эмуляция машинного
Т.е. дело иметь с эмуляциями — Вы любите, назвать это извращением язык не поварачивается
S>>ЗЫ Я на Вашей стороне — пользоваться Туплами одинаково неудобно и на С№ и на С++. Просто на Шареп пишут менее терпимые и более разнеженные, а С++ серам, суровым парням, лишних пару байт набить на клавиатуре, либо распознгать и интерпретировать при промотре исходникоф — не в западло
VD>Понимаш ли в чем дело? Разница между нашими подходами в том, что ты думашь сколько ты набьешь кода, а я о том насколько понятным будет мой код. Только и всего.
Для кого понятным ? Для домохозяйки ? Для телеведущего ? Для компилятора ? Или для адекватного специалиста ? В Делфи код ещё более наглядный. TForm1.OnClose() и все дела.
Мой продакшн-код тоже понятный, очень наглядный — это даже не аксиома, ИБО эот не мои слова.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, eao197, Вы писали:
E>Вай, вай! А где в Янусе нужна высокая скорость работы?
В первую очередь при поиске сообщениёй в Базе, когда её размер превыщает 1 Гигабайт.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
Д>Вот и будешь ты так сидеть, а языки будут проходить и проходить.... мимо тебя
Весь вопрос в том, куда они будут проходить, если в топку, то пусть себе идут
ЗЫ ЖДУ минуса с нетерпением
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
S>В контексте того, что Влад сообщил о том, что вмесчто удобного Tuple Nemerle ему пришлось писать свой класс на два значения — ИМХО очень к лицу вспомнить и про std::pair. S>
В таком случае таки к лицу. Но вот если бы пришлось заиметь класс на 3 значения...
S> И случай этот не конретный, в частности в терминах С++, опять же не скажу за всю Одессу, — Кортеж служит для передачи анонимных значений, а std::pair — поименных ( first, second ). Но это так, к слову — ИБО КАЗУИСТИКА
Казуистика, чистой воды, так как в том же Nemerle я могу спокойно использовать pattern matching для того, чтобы осуществлять поименный доступ к элементам кортежа. Не будем далеко ходить и возьмём пример из курсов по Nemerle:
def divmod (x, y) {
def div = x / y;
def mod = x % y;
(div, mod)
}
match (divmod (142, 13)) {
| (d, m) =>
System.Console.WriteLine ($ "div=$d, mod=$m");
}
// Output: div=10, mod=12
Здравствуйте, Дарней, Вы писали:
Д>хотя OCaml/NET вряд ли представит что-то новое по сравнению с немерле
Ты уверен, что Nemerle -- это что-то новое? Мне кажется, это очень симпатичная попытка запихнуть в NET то, что было опробованно на других языках.
Д>Вот и будешь ты так сидеть, а языки будут проходить и проходить.... мимо тебя
Языки путь идут. Их каждый год порядка 200 рождается и столько же умирает.
Главное, чтобы интересная и устраивающая меня работа мимо меня не проходила. А, как показывает мой опыт, язык программирования здесь вовсе не определяющую роль играет.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, srggal, Вы писали:
E>>Вай, вай! А где в Янусе нужна высокая скорость работы? S>В первую очередь при поиске сообщениёй в Базе, когда её размер превыщает 1 Гигабайт.
А развернуть свою мысль можешь?
Разве в Янусе поиском не Jet занимается?
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Как думаете что мне больше всего нехватает в C# из N
VladD2 wrote: > K>// tie(...) { return Tie<>(...); } где Tie — хелпер-класс распаковки кортежей > А эти хэлперы нужно ручками писать?
Все уже украдено (написано) до нас. В Бусте в том числе.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[10]: Как думаете что мне больше всего нехватает в C# из N
Здравствуйте, eao197, Вы писали:
E>Ты уверен, что Nemerle -- это что-то новое? Мне кажется, это очень симпатичная попытка запихнуть в NET то, что было опробованно на других языках.
в нашей области придумать что-то принципиально новое — это вообще практически нереально. У всего можно найти какой-то прототип. Да и вообще, ничто не ново под луной (С)
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
WH>Причем С++ чем дальше тем больше превращается в огромного жутика обвешанного всякой фигней... и это при том что комитетчики придерживаются принципа зачем вводить в язык то что реализуется библиотекой? Вот только что-то у них это не получается... За то получается у авторов Nemerle за что им большой респект. Там половина языка (а может и больше) в библиотеке... С++у такое и не снилось. И не приснится уже никгда... ибо этот титаник на глиняном айсберге рушится под собственным весом.
А ведь чертовски верно замечено! Нэмерел действительно воплощает в жизть этот самый принцип. Ведь по сути базовая часть языка очень мала.
Что есть Нэмерле?
Поддержка:
* ООП — класс, перечисления, варианты, методы, свойства, поля.
* Обобщенного программирования — параметризация типов и функций (т.е. дженерики).
* Функциональных вычислений — вложенных функции, константы, рекурсия и оператор match, вычисления выражений (арифметика, битовые операции, вызов функций).
* Императивного программирования — переменные (локальные и поля). И это все что нужно для поддержки ИП!!! .
* Метапрограммирования — макросы (в том числе переопределение синтаксиса и операторов), квази-цитирование, AST, средства получения метаинформации о элементах AST.
Все остальное — надстройка над этими основопологающими фичами! Может какую мелочь я пропустил, но сути дела это не меняет. Блин, мыслимо ли это, но даже операторы &&/|| являются макросами.
База языка очень мала. С++ и темболее C# просто монстры по сравнению с этим языков. Но стройная и сбалансированная модель в купе с продуманной системой расширения зыка приводят к тому, что по расширяемости ему нет равных среди статически типизированных языков.
И при этом, что очень важно, ненужны никакие компромисы.
Когда я слышу про невероятную расширяемость С++ мне становится смешно. Я не видел ни одного безпроблемного расширения С++. Взять те же кортежи. Целое море обвязки, но краткого и удобного синтаксиса добиться так и не удается. А если вспомнить, о том, что почти все рсширения на шаблонах, а те очень часто приводят к жудчайшим сообщениям об ошибках, то становится очень грусно.
Сложность и противоричивось С++ так высока, что даже мегакорпорации не в силах создать полноценных компиляторов не говоря уже о средствах интелисенса и рефакторинга. Между тем Нэмерле превосходя С++ почти по всем параметрам прост до безобразия и его реализация сделана тремя студентами в качестве курсовой.
Объем всех (!) файлов из каталога ncc (компилятора Нэмерла) составляет ~2.4 мегабайта! И это при том, что среди них не малую долю занимает код тестов (без него код компилятора составляет 1.5 мега.).
Код всех макросов (в том числе if/else, while, for, foreach, ..., printf, ... занимает ~177 килобайт!
Сравним это с бустом. Сколько там занимают эти костыли? А ведь и без них компилятор С++ — это море кода!
Подытожу...
Нэмерле язык несомненно более выразительный чем C++ и C#, такой же безопасный как C# в safe-режиме, почти столь же просой как С, лучше поддающийся расширению чем С++.
Короче С++ точно идет неверным путем. База азложенная в С++ явно неверна. Чтобы выполнить принцип "зачем вводить в язык то что реализуется библиотекой" нужно разрабатывать язык так, чтобы он в первую очередь имел средства создания тех самых библиотек. Причем безкомпромисные.
Блин, ему бы коммерческое воплощение и вопрос мэйстрим-языка на ближайшие 10 лет был бы закрыт.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Как думаете что мне больше всего нехватает в C# из N
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Имхо, tuples должны использоваться в "обобщенном" коде, где нам не важна семантика данных, а важны их количество и типы. Грубо говоря, как список, но с элементами разного типа.
Что то я не улавливаю сценарий. Если состав кортежа задается извне, то очевидно, что сам кортеж в итоге будет виден в инстанцированном типе. Следовательно проблемы с бессмысленными именами элементов кортежа остаются. Если же кортеж используется только внутри, то либо он используется в служебных целях и состав кортежа известен заранее, но тогда опять же имена элементов должны быть осмысленными, либо когда мы не обобщенным программированием занимается, а кодогенерацией. В этом случае действительно можно обойтись циферками, тем более что они итерацию позволяют. Но в таких случаях есть куда более эффективные и удобные средства, нежели элементы обобщенного программирования. Примеров на Nemerle Влад уже приводил более чем достаточно. Основная мысль в том, что tuples по большому счету всего лишь уменьшают размер исходного кода (незначительно, но на мелких и частых применениях заметно), что для кодогенерации вобщем то некритично, поскольку столь же успешно (не на С++ ) можно сгенерировать вместо кортежа специализированную структуру.
ПК> В самом деле, не даешь же ты имена индивидуальным элементам списков
Передергиваешь. Количество строк обычно меняется в рантайме произвольным образом, а вот количество колонок бывает что и фиксированное на этапе компиляции.
Здравствуйте, VladD2, Вы писали:
VD>База языка очень мала. С++ и темболее C# просто монстры по сравнению с этим языков. Но стройная и сбалансированная модель в купе с продуманной системой расширения зыка приводят к тому, что по расширяемости ему нет равных среди статически типизированных языков.
VD>И при этом, что очень важно, ненужны никакие компромисы.
+1
VD>Когда я слышу про невероятную расширяемость С++ мне становится смешно. Я не видел ни одного безпроблемного расширения С++. Взять те же кортежи. Целое море обвязки, но краткого и удобного синтаксиса добиться так и не удается. А если вспомнить, о том, что почти все рсширения на шаблонах, а те очень часто приводят к жудчайшим сообщениям об ошибках, то становится очень грусно.
ИМХО после Немерле вам будет много на что грусно смотреть и не только в С++.
VD>Сложность и противоричивось С++ так высока, что даже мегакорпорации не в силах создать полноценных компиляторов не говоря уже о средствах интелисенса и рефакторинга. Между тем Нэмерле превосходя С++ почти по всем параметрам прост до безобразия и его реализация сделана тремя студентами в качестве курсовой.
Как уже на этом форуме обсуждалось, не факт, что в плане интелисенса и рефакторинга Немерле будет сильно отличаться о С++, во всяком случае макросы Немерле, ещё сыграют роль камня на шее разработчиков этих инструментов.
VD>Объем всех (!) файлов из каталога ncc (компилятора Нэмерла) составляет ~2.4 мегабайта! И это при том, что среди них не малую долю занимает код тестов (без него код компилятора составляет 1.5 мега.).
VD>Код всех макросов (в том числе if/else, while, for, foreach, ..., printf, ... занимает ~177 килобайт!
VD>Сравним это с бустом. Сколько там занимают эти костыли? А ведь и без них компилятор С++ — это море кода!
Да, С++ такой язык, много исходников, много файлов, это не Перл в котором многие вещи делаются одной строкой, иногда размером более 120 символом
VD>Подытожу...
VD>Нэмерле язык несомненно более выразительный чем C++ и C#, такой же безопасный как C# в safe-режиме, почти столь же просой как С, лучше поддающийся расширению чем С++.
+1
VD>Короче С++ точно идет неверным путем. База азложенная в С++ явно неверна. Чтобы выполнить принцип "зачем вводить в язык то что реализуется библиотекой" нужно разрабатывать язык так, чтобы он в первую очередь имел средства создания тех самых библиотек. Причем безкомпромисные.
=1
Избитая тема, C++ идёт своим путем, как у Макаревича, про вагонные споры: "Один сошел где-то под Таганрогом, среди Бескрайних полейб ... И каждый пошел своей дорогой, а поезд пошел своей".
И не факт сто паровоз это Немерле, паравоз, это скорей в целом процесс развития ИТ, а Немерле, С++ и остальные ЯП да и технологии , все это пассажиры. И где они сойдут для движения паравоза — не важно
Но что сойдут — это даже не теорема.
Дык, а смысл так восхищаться одним из пассажиров и подкалывать другого ?
И в этом поезде нет безбелетников.
Пассажиры разные, пути у них разные, цели их путешествия совпадают лишь отчасти.
Так что — я за МИР
Но я занимаю позицию сходную с позицией eao197.
VD>Блин, ему бы коммерческое воплощение и вопрос мэйстрим-языка на ближайшие 10 лет был бы закрыт.
Вопрос был бы закрыт до следующей подобной курсовой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Как думаете что мне больше всего нехватает в C# из Ne
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Честно говоря, не понимаю, зачем нужно t.IntProperty в tuples... Нужно IntProperty — заводим соответствующую структуру.
А зачем тогда вобще эти кортежи нужны?
ПК> Нужно несколько значений — tuples. Нет?
Сценарий можно, где типы значений все известны, а их семантика нет?
ПК>А зачем мне локально оборачивать именованные значения в tuple, через который я затем с ними же буду работать как с именованными значениями?..
Для улучшения читаемости кода. Собствено в C# 3.0 нормальных кортежей нет, как тут справедливо заметили. А то что есть предназначено для улучшения читаемости операции проекции:
class A
{
int X,
int Y,
string Z
}
...
var la = new List<A>();
...
foreach (var element in la.Select(new {X, Z}))
{
Console.WriteLine(element.X); // OK
Console.WriteLine(element.Y); // compile-time error
Console.WriteLine(element.Z); // OK
}
Если переписать это же в декларативную форму, эффект будет еще заметнее.
Увы, на бустовских кортежах такое не повторишь. А писать под каждую проекцию отдельную структуру это уже перебор.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, srggal, Вы писали:
S>>Весь вопрос в том, куда они будут проходить, если в топку, то пусть себе идут
Д>в топку однозначно попадают программисты, которые не интересуются ничем новым.
-1
Языки путь идут. Их каждый год порядка 200 рождается и столько же умирает.
Главное, чтобы интересная и устраивающая меня работа мимо меня не проходила. А, как показывает мой опыт, язык программирования здесь вовсе не определяющую роль играет.