Re[12]: Nemerle через 5 лет - выстрелит или скончается?
От: s22  
Дата: 29.09.14 17:39
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Здравствуйте, VladD2, Вы писали:


VD>>Здравствуйте, bazis1, Вы писали:


B>>>Да-да-да, с таким подходом немерле обязательно взлетит, обретет много новых пользователей и обгонит C# по популярности. Удачи...


VD>>В таким как ты никакой подход не подходит. По сему тратить время просто глупо.

B>А ты много видел людей, которые без какой-то ощутимой пользы просто так начинали бы копаться в ваших талмудах?

bazis1 — Да оно круглое!
VladD2 — Нет, оно зеленое.
bazis1 — Вот смотри, есть круг, есть квадрат, а есть вообще треугольник. Но то, о чем мы говорим круг!
VladD2 — Хорошо приведи пример как другая вещь может быть красной, я посмотрю и по аналогии докажу, что эта вещь зеленая.
bazis1 — Стол например квадратный или прямоугольный.
VladD2 — Он зеленый!
Re[17]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 17:52
Оценка: +1
Здравствуйте, VladD2, Вы писали:

К>>Забыли функциональный метод:

К>>
К>>await withLock( aLock, async () =>
К>>{ 
К>>    await something();
К>>} );
К>>

К>>По-моему наглядный, и ничего не мешает?

VD>Не очень то наглядно

Вкусовщина.

VD>медленно, так как ни за что, ни про что получаем создание лямбды и ее вызов.

В задачах, настолько критичных к производительности что "создание лямбды и ее вызов" это медленно, противопоказан не только C#, ещё весь .NET.
Re[17]: Nemerle через 5 лет - выстрелит или скончается?
От: bazis1 Канада  
Дата: 29.09.14 17:55
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, bazis1, Вы писали:


B>>Язык — это в первую очередь инструмент. Инструмент, решающий некую задачу. Задача "а не расширить ли мне язык каким-нибудь макросом?" — довольно странная.


VD>Язык — это язык. Сравнивать его с инструментом довольно неразумно. Язык программирование куда ближе к человеческому языку. Вот с ним и сравнивай. Как совершенно естественно расширять свой словарный запас новыми терминами, так совершенно естественно расширять язык новыми конструкциями. Если бы это было не так, то не вышло бы C++ 11/14 и C# 5.0.

Новые термины появляются для описания новых явлений. Новые конструкции — для упрощения релевантных задач, которые слишком сложно решаются старыми. Если просто вывалить на пользователя десяток новых конструкций, то ничего кроме ухмылки это не вызовет. У меня такое ощущение, что ты рассуждаешь как программист, который сегодня пишет программу на дядю, а завтра думает что если просто возьмет и напишет другую на себя, то сам станет дядей, без анализа рынка, таргетинга, управления продажами и прочих процессов, которых обычный программист обычно не видит, но которые непосредственно влияют на то, куда копать.

B>>Опять же, конкретный пример, пожалуйста, где создание DSL вместо использования стандартных паттернов управления сложностью принесет плоды. Ведь со стандартными паттерными хорошо работает отладчик, рефактор и другие функции IDE.


VD>Их тысячи. То что ты сам, возможно, используешь каждый день: Разор, регекспы, Linq/SQL, BNF, CSS, LESS, DOT ... Еще есть встроенные DSL-и о которых только линивый не говорит. Многие прикладные задачи решаются на ДСЛ-ях проще и лучше. Вопрос только в сложности их создания. С макросами этот подход становится доступен прикладным программистам. От части, Нитра призвана еще больше упростить создание и использование ДСЛ-ей и убрать имеющиеся в Немерле ограничения.


VD>Подробнее читай http://martinfowler.com/dsl.html

Опять ты соскакиваешь с темы и предлагаешь мне убить полдня, читая какой-то мутный талмуд. А конкретных примеров, имеющих отношение к Nemerle так и нет.

B>>Генерировать из чего? В ToString() обычно помещают некую краткую сводку о состоянии объекта, упрощающую просмотр в отладчике, либо в GUI.

VD>Туда частенько помещают значения полей. Например, для анонимных типов МС сделало дефолтную реализацию ToString, и это удобно. Писать по 100 раз одно и то же хотят не только лишь все (ц).
Делаем базовый класс, реализуем там ToString(), через reflection дергаем поля. Просто, красиво, 100% стандартые средства.

VD>Ага. И когда он пишется в 100500-й раз "под одну копирку", невольно возникает вопрос — "Нельзя ли автоматизировать этот мартышкин труд?". И дело тут не в ToString. Это всего лишь один из примеров. Везде когда ты пишешь что-то по одному шаблону можно автоматизировать.

Мартышкин труд безусловно нужно автоматизировать. Но с этим довольно хорошо справляется наследование и generic-и (см. пример выше).

B>>Для чего может понадобиться их генерировать, что это упростит? Как будет работать пошаговый прогон отладчиком по такому методу и Edit-and-continue, дабы исправить мелкий баг без перезапуска программы?


VD>И ты их найдешь, потому что кто хочет сделать дело, ищет возможности, а кто не хочет, ищет оправдания. Вот ты из последний. Иди пили все руками. Копипасть и наслаждайся результатом.

VD>Пока ты не поймешь, что у тебя нет проблем, потому что ты многого не знаешь, ты так и будешь искать себе оправдания. Но это, плиз, без меня. Я лучше пообщаюсь с теми кто ищет возможности.
Я никогда не копипастю (ну кроме proof-of-concept кода, который пишется на один раз), я просто умею применять стандартные механизмы типа того же наследования, которые позволяют избавится от копипасты без перехода на новый язык. И от людей, рекламирующих новое "средство от копипасты" ожидаю наглядной демонстрации, чем их средство лучше стандартных.
Re[9]: Nemerle через 5 лет - выстрелит или скончается?
От: bazis1 Канада  
Дата: 29.09.14 17:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, bazis1, Вы писали:


B>>Конкретно по C# меня много лет назад достало пилить GUI на WTL и я решил попробовать другие фреймворки.


VD>Если дело было только в GUI, то нужно было просто открыть для себя Qt.

Я знаю Qt, но для простых задач нахожу C#/WinForms более удобным.
Re[17]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 18:12
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>А вот ещё редкая фича:

_>
_>virtual void Initialize()
_>{
_>//такое объявление уходит в тело класса
_>//но сама переменная видна только внутри этой функции и её наследниках (если protected)
_>private bool initialized = false; 
_>if(initialized)
_>    return;
_>}
_>


_>Может всего пару раз на проект нужны такие переменные которые видны в одном конкретном методе. Удобно? Ну конечно.

Похожее можно запилить в имеющемся C#,
например static void initOnce( ref bool bInitialized, Action whatToDo );

К>>По-моему наглядный, и ничего не мешает?

_>Я всё-таки предпочитаю using(await lockable), который в dispose отпускается. Но это всё костыли, от недостатка нормальных решений.
Во-первых, добавление фич в язык это ж не бесплатно, например растёт сложность чтения кода.
Во-вторых, в тех случаях когда мне нужно генерировать C# код на этапе компиляции, в коробке со студией есть для этого T4 text templates.
Re[2]: Nemerle через 5 лет - выстрелит или скончается?
От: novitk США  
Дата: 29.09.14 18:19
Оценка:
Здравствуйте, uncommon, Вы писали:

U>А вот Clojure отлично за это время развилась. Учитывая ещё тот факт, что Clojure появилась два года после Nemerle в 2007м, но уже в 2008 вышла первая версия. А теперь у Clojure есть офигенное количество библиотек, документации, книжек и контрибьюторов.


U>А команда Nemerle всё это время пилила интеграцию с VS...


Clojure и прочие питоны не совсем удачное сравнение, они намного проще, но есть и удачное. Немерле — полный труп по сравнению со Скалой. В Скале сейчас есть все что есть в N плюс кроссплатформа и IDE-support. ИМХО кроссплатформа есть главная причина и об этом отцам-основателям говорили пять лет назад. 95% энтузиастов не будут вкладываться в windows-only. Mono никому, включая Мигеля, был уже тогда не нужен.
Re[18]: Nemerle через 5 лет - выстрелит или скончается?
От: s22  
Дата: 29.09.14 18:19
Оценка:
Здравствуйте, Константин, Вы писали:

К>Во-первых, добавление фич в язык это ж не бесплатно, например растёт сложность чтения кода.

К>Во-вторых, в тех случаях когда мне нужно генерировать C# код на этапе компиляции, в коробке со студией есть для этого T4 text templates.

1. заменяя фичу полсотней строк кода чтение не упрощается, а написание увеличивает вероятность ошибки в десятки раз.
2. Часто надо не только генерировать код, а например дополнять или модифицировать.
Re[18]: Nemerle через 5 лет - выстрелит или скончается?
От: WolfHound  
Дата: 29.09.14 18:23
Оценка:
Здравствуйте, bazis1, Вы писали:

B>Я никогда не копипастю (ну кроме proof-of-concept кода, который пишется на один раз), я просто умею применять стандартные механизмы типа того же наследования, которые позволяют избавится от копипасты без перехода на новый язык. И от людей, рекламирующих новое "средство от копипасты" ожидаю наглядной демонстрации, чем их средство лучше стандартных.

Нука покажи, как ты не будешь копипастить реализацию INotifyPropertyChanged.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Nemerle через 5 лет - выстрелит или скончается?
От: s22  
Дата: 29.09.14 18:25
Оценка:
Здравствуйте, novitk, Вы писали:

N>Здравствуйте, uncommon, Вы писали:


U>>А вот Clojure отлично за это время развилась. Учитывая ещё тот факт, что Clojure появилась два года после Nemerle в 2007м, но уже в 2008 вышла первая версия. А теперь у Clojure есть офигенное количество библиотек, документации, книжек и контрибьюторов.


U>>А команда Nemerle всё это время пилила интеграцию с VS...


N>Clojure и прочие питоны не совсем удачное сравнение, они намного проще, но есть и удачное. Немерле — полный труп по сравнению со Скалой. В Скале сейчас есть все что есть в N плюс кроссплатформа и IDE-support. ИМХО кроссплатформа есть главная причина и об этом отцам-основателям говорили пять лет назад. 95% энтузиастов не будут вкладываться в windows-only. Mono никому, включая Мигеля, был уже тогда не нужен.


Скала по идеи должна отстать от Н2 значительно, сейчас Н1 и Скала по языку в паритете. Я вижу 3 причины почему это может не произойти: бросят писать, увлекутся совместимостью, переделывая язык будут приоритетно поддерживать Нет.
Скала кроссплатформена? И какая этому цена производительности, совместимости и т д? Или имеется ввиду ВМДж?
Re[18]: Nemerle через 5 лет - выстрелит или скончается?
От: WolfHound  
Дата: 29.09.14 18:34
Оценка: 49 (1)
Здравствуйте, Константин, Вы писали:

К>Во-первых, добавление фич в язык это ж не бесплатно, например растёт сложность чтения кода.

Это воображаемая проблема. Читать код с использованием неизвестной библиотеки, которая делает что-то сложное обычно намного сложнее. А для простых случав макры никто писать не будет.
Реальная проблема в том, что фичу из языка убрать нельзя.
Даже если 99.999% программистов ей не пользуются.
В то же время ненужные макросы просто исчезнут так же как не нужные библиотеки.

К>Во-вторых, в тех случаях когда мне нужно генерировать C# код на этапе компиляции, в коробке со студией есть для этого T4 text templates.

Было: http://rsdn.ru/forum/dotnet/4159707.1
Автор: Sinix
Дата: 16.02.11

Стало: http://rsdn.ru/forum/dotnet/4187035.1
Автор: hardcase
Дата: 09.03.11
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Nemerle через 5 лет - выстрелит или скончается?
От: novitk США  
Дата: 29.09.14 18:46
Оценка: 1 (1)
Здравствуйте, s22, Вы писали:

s22>Скала по идеи должна отстать от Н2 значительно, сейчас Н1 и Скала по языку в паритете.

В чем? В скорости парсера?
И потом H-2 это разве не просто набор компонент с которыми играются три человека в JB, появившийся полгода назад?

s22>Я вижу 3 причины почему это может не произойти: бросят писать, увлекутся совместимостью, переделывая язык будут приоритетно поддерживать Нет.

Даже если завтра JB бросят 100% усилий на H-2 будет пшик, пока платформу нельзя использовать нигде кроме винды.

s22>Скала кроссплатформена? И какая этому цена производительности, совместимости и т д? Или имеется ввиду ВМДж?

Имеется ввиду что Скала работает на ~100% серверного железа, 80% из которого пашет на *nix.
Re[18]: Nemerle через 5 лет - выстрелит или скончается?
От: hi_octane Беларусь  
Дата: 29.09.14 19:55
Оценка:
К>Во-первых, добавление фич в язык это ж не бесплатно, например растёт сложность чтения кода.

Нее, макросы пишут чтобы упрощать чтение кода. Вот например ты сам можешь элементарно запилить макрос для WinForms, оборачивающий каждый вызов к Control'у из метода вызываемого из Thread в Invoke/BeginInvoke. И такой же аналог для WPF через Dispatcher. И будешь вызывать UI и рабочих потоков, без видимых лямбд и делегатов. Точно также foreach упрощает чтение кода, по сравнению с ручной росписью этой фигни.

К>Во-вторых, в тех случаях когда мне нужно генерировать C# код на этапе компиляции, в коробке со студией есть для этого T4 text templates.


T4 — это обнять и плакать. Запили мне на T4 сериализацию C# объекта в том же проекте, или мемоизацию ответов от веб-сервиса.
Re[3]: Nemerle через 5 лет - выстрелит или скончается?
От: hi_octane Беларусь  
Дата: 29.09.14 20:07
Оценка: :)
N>В Скале сейчас есть все что есть в N плюс кроссплатформа и IDE-support. ИМХО кроссплатформа есть главная причина и об этом отцам-основателям говорили пять лет назад.

Причина взлёта скалы ровно одна — полнейшая убогость и застой Java. Даже нововведения в Java имеют странности
Автор: Klag
Дата: 29.09.14
. В такой ситуации любая адекватная замена будет подхвачена на ура. Без скалы вся JVM — кобол

Ровно таже проблема у C++ — дикая перегруженность синтаксиса и груз обратной совместимости с одной стороны, и никакого выигрыша за эту перегруженность с другой. Именно поэтому все с таким энтузиазмом подхватывают очередную замену C++, будь то Go (можно сказать что уже не взлетело), или Rust (будем посмотреть, может реально что-то нормальное получится).
Re[19]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 20:18
Оценка: :)
Здравствуйте, s22, Вы писали:

s22>1. заменяя фичу полсотней строк кода чтение не упрощается, а написание увеличивает вероятность ошибки в десятки раз.

Если вам нужно копипастить boilerplate код по 50 строк, возможно вы просто плохо умеете C#.
Примеры, которые я видел выше по тредику, прекрасно решаются в рамках обычного C#, при неизменном количестве строк кода, соответственно без роста вероятности ошибок.

s22>2. Часто надо не только генерировать код, а например дополнять или модифицировать.

Опять-таки, если вам часто нужно дополнять или модифицировать код, вы вероятно плохо умеете пользоваться функциональными фичами C# и/или reflection-ом.
Re[18]: Nemerle через 5 лет - выстрелит или скончается?
От: hi_octane Беларусь  
Дата: 29.09.14 20:26
Оценка: +1
К>Похожее можно запилить в имеющемся C#,
К>например static void initOnce( ref bool bInitialized, Action whatToDo );

Ты, кстати, не понял. Заменить нельзя ничем — ибо твой bInitialized будет торчать видимым для всех методов класса, в котором этот bInitialized объявлен. В моём примере — этот bInitialized виден только там где он объявлен, хотя в результирующем IL он является приватным членом класса. Из других методов этот bInitialized ни поменять, ни прочитать невозможно. И это не ограничивается только приведённым примером — часто встречаются случаи когда какому-то методу нужно хранить чисто свои, важные только для этого метода, переменные, а другим, даже методам в том же классе про них и знать не надо. Т.е. фича удобная, такая же как, например если бы в C# было можно так:

public int Prop
{
   int p1;//переменные видны только тут, для других методах этого же класса их нет
   bool p2;

   get 
   { 
    //код использующий f1 и f2 
   }
   set 
   {
    //аналогично
   }
}


В Nemerle это всё можно, и ещё куча всего, что придумывается прямо в процессе, по ходу проекта. Кто-то говорит "а вот мы тут часто делаем XXX, было бы здорово если бы это делалось автоматом". Бац и запилили. И если надо реализацию поменять — то меняешь макрос реализующий это "автоматом", и меняется реализация фичи на всём проекте. Без рефакторингов. В приведенном примере, можно было бы по ходу дела bInitialized заменить на volatile если надо, или менять строго через Interlocked с проверкой на сохранность предыдущего и RaceConditionException если обнаружилось что два потока которые логически разделены, вдруг пересеклись. Это всё легко делается макросами, и через прорву рукопашного кода без них.
Re[19]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 20:29
Оценка: :)
Здравствуйте, hi_octane, Вы писали:

_>запилить макрос для WinForms, оборачивающий каждый вызов к Control'у из метода вызываемого из Thread в Invoke/BeginInvoke. И такой же аналог для WPF через Dispatcher.

Есть очень веские причины, почему так не было сделано.
Возможен deadlock двух потоков, message loop может быть занят блокирующим вызовом, проблемы с COM apartments, проблемы с возвращаемым значением, и ещё вагон других.
В случае с foreach я таких тяжких последствий не вижу, он или работает или нет.

_>T4 — это обнять и плакать. Запили мне на T4 сериализацию C# объекта в том же проекте

Зачем обязательно в том же?
Это же прекрасно делается через reflection.
Вот например один мой вариант сериализатора .NET объектов в странное хранилище.
Re[19]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 20:47
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Было: http://rsdn.ru/forum/dotnet/4159707.1
Автор: Sinix
Дата: 16.02.11

WH>Стало: http://rsdn.ru/forum/dotnet/4187035.1
Автор: hardcase
Дата: 09.03.11

Ну вы заменили 2 страницы понятного C# кода на полторы страницы непонятного на Nemerle, со всякими def mods = Modifiers(tb.Attributes, [<[ WrapStaticMethods($(tb.ParsedTypeName), $(symbol : string)) ]>]);
Интересно, с этими вот макросами отладчик дружит, как в случае T4?
Отредактировано 30.09.2014 2:47 VladD2 . Предыдущая версия .
Re[20]: Nemerle через 5 лет - выстрелит или скончается?
От: hi_octane Беларусь  
Дата: 29.09.14 20:51
Оценка: +1
_>>T4 — это обнять и плакать. Запили мне на T4 сериализацию C# объекта в том же проекте
К>Зачем обязательно в том же?
Да потому что так явная убогость C#/T4 проявляется в полный рост. Да и стандартная реализация ISerializable и конструктор подразумевают их объявление в том же классе Кстати, я вкурсе что можно выкручиваться на суррогатах и биндерах, но это всё от убогости. Всё равно про биндеры придётся помнить в том месте где собираешься сериализовать. Одни костыли короче.

К>Это же прекрасно делается через reflection.

Через reflection я и сам могу. И не надо мне в качестве post-build предлагать ILMerge , у меня от него pdb-шки слетают

Ты понимаешь что обсуждение уже скатывается на уровень "любую фичу можно сделать имея if и goto"? В программировании можно всё, вопрос в том сколько ты потратишь человеко-часов в одном случае и сколько в другом.
Re[20]: Nemerle через 5 лет - выстрелит или скончается?
От: WolfHound  
Дата: 29.09.14 21:07
Оценка:
Здравствуйте, Константин, Вы писали:

К>Ну вы заменили 2 страницы понятного C# кода на полторы страницы

Кода более чем в два раза меньше. И это на простой задачке.

К>непонятного на Nemerle, со всякими def mods = Modifiers(tb.Attributes, [<[ WrapStaticMethods($(tb.ParsedTypeName), $(symbol : string)) ]>]);

А ты хоть пытался разобраться?

К>Интересно, с этими вот макросами отладчик дружит, как в случае T4?

С макросами и отладчик и ИДЕ дружат отлично.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Отредактировано 30.09.2014 2:49 VladD2 . Предыдущая версия .
Re[21]: Nemerle через 5 лет - выстрелит или скончается?
От: Константин Черногория  
Дата: 29.09.14 21:14
Оценка: :)
Здравствуйте, hi_octane, Вы писали:

К>>Зачем обязательно в том же?

_>Да потому что так явная убогость C#/T4 проявляется в полный рост.
Чудесно, только для продажи nemerle нужно не убогости C# выискивать, а продемонстрировать, для каких задач ему нет нормальной альтернативы.
В случае с сериализацией/десериализацией нормальные альтернативы есть.

_>стандартная реализация ISerializable

Я не использовал. Костылей совсем немного, там у меня довольно чистый код на атрибутах и reflection.

К>>Это же прекрасно делается через reflection.

_>Через reflection я и сам могу.
Имел в виду reflection не на каком-то их этапов сборки, а в runtime.
С требованием про тот же проект я ошибся — оно прекрасно делается и в том же, и в любом другом.

_>В программировании можно всё, вопрос в том сколько ты потратишь человеко-часов в одном случае и сколько в другом.

Ну я вот не вижу преимущества в человеко-часах одного перед другим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.