IT,
IT>Кстати, мне ужасно не нравится его название. Давай обсудим это
Прошу прощения за оффтоп.
What does "Nemerle" mean?
It is inspired by a name of mage Nemmerle from book of Ursula K. Le Guin "A Wizard of Earthsea" (spelling with a single 'm' is a design decision )
А этот маг, был молодцом, например оживил ученика:
...Коснувшись серебристым наконечником посоха сначала груди Геда, потом его губ, Неммерле что-то прошептал. Гед вздрогнул и глубоко вздохнул. Старый маг поднял свой посох, затем поставил его на землю, сложил на рукояти руки и опустил на них голову. У него не осталось сил стоять прямо.
...при этом пожертвовав собой:
...Он лежал неподвижно. Его ястребиный нос, высокий лоб и седые
волосы, залитые лунным светом, были цвета китовой кости. Неммерле истратил
всю свою силу на то, чтобы остановить действие заклинания и прогнать Тень
от Геда, а вместе с силой из его тела ушла и жизнь. Он умирал. Но смерть
Верховного Мага, еще при жизни не раз ступавшего по крутым иссушенным
тропам царства мертвых, не похожа на смерть обычного человека — он уходит
уверенно, хорошо зная дорогу...
А птичка на эмблеме, как я понимаю, это ворон мага:
В это время, ступая по камням и траве, к ним подошел ворон с острова
Осскил — огромная черная птица. Ворон приблизился к Верховному Магу и
встал рядом с ним, черный, как ночь, с кинжалообразным клювом и глазами,
похожими на прибрежную гальку...
Вроде бы с названием всё в порядке... А в остальном поживём-увидим
E>C++ программисты стремяться программировать на отдельных островках языка, т.е. очень искусно использует некоторые возможности, избегая множества других. Хотя код более-менее переносим с компилятора на компилятор может быть очень тяжело перенести его от программиста к программисту. Великая сила C++ в том, что он поддерживат много совершенно разных стилей программирования, но при длительном использовании перекрывающиеся и несовместимые стили программирования становятся преградой.
E>Не страшно, что подобная мультипарадигменность в Nemerle приведет к таким же последствиям, как в C++?
Мультипарадигменность вряд ли, а вот макросы приведут, зуб даю. История произошедшая в пятницу.
Конец рабочей недели, работать естественно уже припарило. Завязался разговор в котором в один прекрасный момент обсуждение перешло на всевозможные ЯП в том числе и на Немерле. Так как всем отделом пишем на C#, простенький код на Nemerle почти ни у кого затруднения не вызвал и уже через 10-20 минут исследований макросов одним из коллег, по ICQ полетел пример программы:
Здравствуйте, igna, Вы писали:
I>Здравствуйте, VladD2, Вы писали:
VD>>Другое дело, что использование констатн в качестве параметров типов довольно бессмысленно на мой взгляд.
I>
I>
I>template<int m1, int l1, int t1, int m2, int l2, int t2>
I>Physical<m1+m2, l1+l2, t1+t2> operator*(Physical<m1, l1, t1> lhs,
I> Physical<m2, l2, t2> rhs)
I>{
I> return Physical<m1+m2, l1+l2, t1+t2>::unit*lhs.value()*rhs.value();
I>}
I>
Здравствуйте, Дарней, Вы писали:
VD>>Склько программистов используют подобные приколы в своем коде?
Д>И еще актуальнее — сколько программистов сможет понять, как это работает и вообще зачем это нужно, без недельного копания в литературе?
Думаю, что не так уж и мало. Может это не проблема языка (здесь, кстати, не так уж и много подводных камней C++а), а тех, кто пытается программировать на C++ не зная языка?
И встречный вопрос: предложи запись на каком-нибудь языке этой конструкции, чтобы она была более понятна, обрабатывалась в compile-time и, в результате, работала с такой же скоростью, как в C++. А в том, что такие вещи нужны и используются можешь не сомневаться.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Дарней, Вы писали:
Д>И еще актуальнее — сколько программистов сможет понять, как это работает и вообще зачем это нужно, без недельного копания в литературе?
Я думаю что больше чем программистов понимающих например функциональные языки.
Сложные вещи в C++ легко запрятываются в библиотеки и понимать все трюки чтобы ими пользоватся необходимости нет.
Здравствуйте, eao197, Вы писали:
E>Думаю, что не так уж и мало. Может это не проблема языка (здесь, кстати, не так уж и много подводных камней C++а), а тех, кто пытается программировать на C++ не зная языка?
Проблема вообще очень проста — язык усложнен сверх всякой необходимости.
E>И встречный вопрос: предложи запись на каком-нибудь языке этой конструкции, чтобы она была более понятна, обрабатывалась в compile-time и, в результате, работала с такой же скоростью, как в C++. А в том, что такие вещи нужны и используются можешь не сомневаться.
Ну во первых, первый критерий исключаем — никакой понятности здесь и близко не было. А во вторых — насколько много таких задач, где оба этих критерия жизненно необходимы?
Здравствуйте, FR, Вы писали:
FR>Я думаю что больше чем программистов понимающих например функциональные языки.
ну во первых — далеко не факт
во вторых, это (пока что) более востребовано
FR>Сложные вещи в C++ легко запрятываются в библиотеки и понимать все трюки чтобы ими пользоватся необходимости нет.
Ага. А потом кодеры сидят и тихо офигевают, глядя на сообщение об ошибке длиной в 5 килобайт. Знаем, видели.
Здравствуйте, Дарней, Вы писали:
E>>И встречный вопрос: предложи запись на каком-нибудь языке этой конструкции, чтобы она была более понятна, обрабатывалась в compile-time и, в результате, работала с такой же скоростью, как в C++. А в том, что такие вещи нужны и используются можешь не сомневаться.
Д>Ну во первых, первый критерий исключаем — никакой понятности здесь и близко не было. А во вторых — насколько много таких задач, где оба этих критерия жизненно необходимы?
Ты уходишь от проблемы. Сколько бы ни была задача маловероятна и редка на практике, если лично тебе или лично мне придется ее решать (это будет нам выгодно), то решать ее придется. И областей, где важна скорость и эффективность не так уж мало: вычисления (предсказания погоды, расчет прочности и износостойкости, моделирование тектонических и геологических процессов, статистика), системы реального времени с необходимостью проведения больших вычислений (радиолокация), системное ПО (СУБД, web-сервера), телекоммуникации (высокоскоростные каналы) и много еще о чем я не знаю...
И понятность там, кстати, была вполне достаточная. Трехэтажного шаблонного метапрограммирования там уж точно не было.
Еще раз: приведи более понятную запись, которая бы не давала overhead-а в run-time (т.е. compile-time обработка) и генерировала бы высокоэффективный код.
Здравствуйте, Vermicious Knid, Вы писали:
VK>А вообще ни C#, ни Nemerle не конкуренты C++ в том классе задач, где нужны подобные возможности. Ни "zero runtime cost", ни "производительность любой ценой", ни тем более "optimize prematurely!" пожалуй не является девизом ни первого, ни второго языка.
Compile-time проверка размерностей не только производительней чем run-time, но и удобнее.
VK>Из "новых" языков пожалуй только D сможет соперничать с C++ в этом вопросе.
Здравствуйте, Дарней, Вы писали:
Д>И еще актуальнее — сколько программистов сможет понять, как это работает и вообще зачем это нужно, без недельного копания в литературе?
Искренне, не преувеличивая скажу, что приблизительно 100% тех, кому проверка размерностей может быть полезной.
Здравствуйте, eao197, Вы писали:
E>Ты уходишь от проблемы. Сколько бы ни была задача маловероятна и редка на практике, если лично тебе или лично мне придется ее решать (это будет нам выгодно), то решать ее придется. И областей, где важна скорость и эффективность не так уж мало: вычисления (предсказания погоды, расчет прочности и износостойкости, моделирование тектонических и геологических процессов, статистика),
Фортран
E>системы реального времени с необходимостью проведения больших вычислений (радиолокация), системное ПО (СУБД, web-сервера), телекоммуникации (высокоскоростные каналы) и много еще о чем я не знаю...
С, ассемблер, С++ (редко)
Напомню еще раз — не бывает универсальных инструментов. А если кто-то говорит, что некий инструмент решает все проблемы одинаково хорошо — значит, на самом деле он решает все эти проблемы одинаково плохо.
Если передо мной возникнет такая задача, как ты описал — я буду решать ее тем инструментом, который окажется удобнее всего. Может быть, в определенных случаях таковым даже окажется С++
Здравствуйте, Дарней, Вы писали:
Д>Напомню еще раз — не бывает универсальных инструментов. А если кто-то говорит, что некий инструмент решает все проблемы одинаково хорошо — значит, на самом деле он решает все эти проблемы одинаково плохо.
Нужно эти слова к Nemerle для очень горячих голов отнести.
Д>Если передо мной возникнет такая задача, как ты описал — я буду решать ее тем инструментом, который окажется удобнее всего. Может быть, в определенных случаях таковым даже окажется С++
Т.е., в данный момент ты не можешь привести более понятной и эффективной записи этого выражения на языке, отличном от C++?
Пока аналог был приведен только для D. Но D, к сожалению, пока столь же экзотичен, как и Nemerle. Будь это не так, я бы с радостью на него перешел из C++
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
Д>>Напомню еще раз — не бывает универсальных инструментов. А если кто-то говорит, что некий инструмент решает все проблемы одинаково хорошо — значит, на самом деле он решает все эти проблемы одинаково плохо.
E>Нужно эти слова к Nemerle для очень горячих голов отнести.
а никто такого и не говорил. Вполне очевидно например, что немерле не приспособлен для программирования на низком уровне, равно как и для RTS. Ты можешь привести примеры, где кто-то утверждал обратное?
E>Т.е., в данный момент ты не можешь привести более понятной и эффективной записи этого выражения на языке, отличном от C++?
Конкретно этой задачей я не интересовался, поэтому не скажу.
Здравствуйте, Дарней, Вы писали:
E>>... областей, где важна скорость и эффективность не так уж мало: вычисления (предсказания погоды, расчет прочности и износостойкости, моделирование тектонических и геологических процессов, статистика),
Д>Фортран
Проверка размерностей в Фортране?
Напомню: В ответ не утверждение "использование констант в качестве параметров типов довольно бессмысленно", я привел пример, как при помощи "констант в качестве параметров типов" можно реализовать проверку размерностей. Далее последовало:
Д>... сколько программистов сможет понять, как это работает и вообще зачем это нужно, без недельного копания в литературе?
Д>... насколько много таких задач, где оба этих критерия жизненно необходимы?
Теперь правда имеем:
Д>Напомню еще раз — не бывает универсальных инструментов. Д> . . . Д>Если передо мной возникнет такая задача, как ты описал — я буду решать ее тем инструментом, который окажется удобнее всего. Может быть, в определенных случаях таковым даже окажется С++
Здравствуйте, Дарней, Вы писали:
Д>>>Напомню еще раз — не бывает универсальных инструментов. А если кто-то говорит, что некий инструмент решает все проблемы одинаково хорошо — значит, на самом деле он решает все эти проблемы одинаково плохо.
E>>Нужно эти слова к Nemerle для очень горячих голов отнести.
Д>а никто такого и не говорил. Вполне очевидно например, что немерле не приспособлен для программирования на низком уровне, равно как и для RTS. Ты можешь привести примеры, где кто-то утверждал обратное?
VD>Неперле банально проектировался с учетом опыта ML-подобных языков и Хаскеля. Так что функциональная парадигма для него радная. Вот только Немерле — это не чистый ФЯ, и даже не ФЯ с прикрученным к нему императивом и ООП. Немрле — это попытка сделать язык одинаково хорошо поддерживающий множество парадигм.
Одинакого хорошо -- это, очень вероятно, на одинаково сером уровне.
E>Одинакого хорошо -- это, очень вероятно, на одинаково сером уровне.
Дело в том, что Немерле — это не мечтания на тему, а готовый язык с компилятором.
Я его уже попробовал, и смею заверить тебя реализовано все очень достойно. И уши оной парадигмы не мешают другой.
Ты конечно, можешь мне возразить, что там речи не было ни о низком уровне, ни о RTS. Но смысла это не изменит. К тому же обсуждавшийся фрагмент кода на C++ со скалярными параметрами шаблонов ни относился ни к низкому уровню, ни к RealTime.
E>>Т.е., в данный момент ты не можешь привести более понятной и эффективной записи этого выражения на языке, отличном от C++?
Д>Конкретно этой задачей я не интересовался, поэтому не скажу.
Так вот, мало кто скажет. Потому, что когда нужно решать реальные задачи, все разговоры о красиво/не красиво, отрывать/пришивать что-нибудь и пр. остаются в курилке. Поскольку нужно либо написать работающую программу и получить за это деньги, либо провалить проект. И выясняется, что на C++ коряво написать можно, и работать будет. А вот альтернативу найти -- еще попробуй.
Не на Фортране же программировать в 21-м веке, ей богу.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Дарней, Вы писали:
Д>Вполне очевидно например, что немерле не приспособлен для программирования на низком уровне,
+ Д> равно как и для RTS.
А вот здесь поспорю. Пока не подходит. Это ограничение текущей реализации платформы, причём явно временное. Ни сам язык, ни спецификация .NET таких ограничений, вроде, не содержит.