Nemerle
От: Аноним  
Дата: 23.05.06 16:39
Оценка: 3615 (90)
Статья:
Nemerle
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.


Авторы:
VladD2
Сергей Туленцев

Аннотация:
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка) и является неформальным введением в язык.

30.01.07 18:29: Перенесено модератором из 'Декларативное программирование' — IT
Re: Nemerle
От: alvas  
Дата: 24.07.06 12:37
Оценка:
Может ли Nemerle работать в unsafe режиме?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: Nemerle
От: siv Украина  
Дата: 24.07.06 14:49
Оценка:
>... Сергей Туленцев, Владислав Чистяков

C огромным удовольствием прочел статьтю.
Был бы очень рад, если в будущем Немерле из лабораторной разработки превратился бы в промышленный продукт...

Интересно, авторы статьи какое-то отношение к разработке Немерле имеют, кроме литерного?
Можно ли использовать Немерле в Visual Studio (intellisence, debugging)? На оф-м сайте видел упоминание о плагине, но насколько оно юзабильно?

С нетерпением жду продолжения на сайте.
Re[2]: Nemerle
От: siv Украина  
Дата: 24.07.06 15:01
Оценка:
siv>Интересно, авторы статьи какое-то отношение к разработке Немерле имеют, кроме литерного?
Sorry за опечатки. Имелось в виду литературного.

BTW, очень не хватает редактирования своего же постинга (разумеется, если никто еще не успел дать на него ответ)ю
Re[2]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.06 16:49
Оценка:
Здравствуйте, alvas, Вы писали:

A>Может ли Nemerle работать в unsafe режиме?


Нет. Но может использовать intrerop (PInvoke и COM-intrerop). С их помощью, к сожалению тоже можно легко привести программу к неработоспособнсоти.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.06 19:24
Оценка:
Здравствуйте, siv, Вы писали:

siv>C огромным удовольствием прочел статьтю.


Спасибо за оценку. Собственно в читабельности заслуга не только авторов, но и многих посетителей этого сайта учавствовавших в вичитке. Среди них особо хочется отметить Vermicious Knid, Oyster и adontz.

siv>Был бы очень рад, если в будущем Немерле из лабораторной разработки превратился бы в промышленный продукт...

siv>Интересно, авторы статьи какое-то отношение к разработке Немерле имеют, кроме литерного?

Кое какое имеем. Не говоря уже о багрепортах (коих от RSDN-а чуть ли не болшинство) ведем работу над интеграцией Nemerle в VS 2005. К сожалению, в последнее время можно сказать "веду", в смысле в гордом одиночестве. От помощи не отказался бы.

Сейчас в основном занимаюсь подправкой компилятора чтобы он выдавал нужную информацию в нужном виде. Надеюс, что через месяц-другой кое что уже будет сносно работать. А там и рефакторинг с другими фичами прикрутим.
Вот форум проекта http://rsdn.ru/Forum/?group=prj.nemerle

siv>Можно ли использовать Немерле в Visual Studio (intellisence, debugging)? На оф-м сайте видел упоминание о плагине, но насколько оно юзабильно?


Сейчас можно использовать Упрощенную интеграцию
Автор: VladD2
Дата: 08.05.06
. Предоставляет возможность редактирования с подсветкой синтаксиса, компиляции, отладки (с грем пополам). Основана на хаке C#-проекта.

Через некоторое время (когда доделаем и когда дадут ключ для VSIP-пакета) будет полноценная интеграция где будет:
1. Улучшенная подсветка синтаксиса.
2. Автодополнение при вводе (cmplete word).
3. Хинты при редактировании и подведении мыши к идентификаторам.

Потом доделаем навигацию по коду и другие RAD-ости.

siv>С нетерпением жду продолжения на сайте.


Будет. Все будет. Почему-то мне кажется, что Nemerle — это проходная фишка.

Собственно если кто-то готов помочь, то не откладывайте это в долгий ящик.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle
От: alvas  
Дата: 25.07.06 06:32
Оценка:
А жаль. Какие еще языковые возможности c# 2.0 не поддерживает Nemerle?

A>>Может ли Nemerle работать в unsafe режиме?


VD>Нет. Но может использовать intrerop (PInvoke и COM-intrerop). С их помощью, к сожалению тоже можно легко привести программу к неработоспособнсоти.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[4]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.06 08:56
Оценка:
Здравствуйте, alvas, Вы писали:

A>А жаль.


По-моему это очень правильное решение. Лично я никогда по делу не использовал ансэйф в C#. А любой лишний кусок требует времени. Если кому-то понадобится анэйф, то МС++ и C# в полном распоряжении.

A>Какие еще языковые возможности c# 2.0 не поддерживает Nemerle?


Вроде бы никакие. Все отличия как раз и описаны в статье. Более того даже от еще не вышедшего C# 3.0 отличий почти нет. Нет только самого Linq-а и то к выходу C# 3.0 скорее всего уже будут написаны соовествующие макросы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Nemerle
От: alvas  
Дата: 25.07.06 14:29
Оценка: :)
Хочу высказать свое субъективное мнение как программиста на C# по поводу статьи, языка и ...

По поводу статьи
1. Отличная статья, которая позволяет ощутить мощь нового языка.
2. В статье промелькнула фраза что C# 3.0 когда еще будет, а Nemerle можно попробовать уже сейчас. На самом деле они оба имеют одинаковый статус — бета,
которую можно попробовать.

Недостатки языка
1. Не полная реализация возможностей C# (Нет поддержки unsafe режима). По-этому мне кажется лучше его сравнивать с VB.NET (он тоже не поддерживает unsafe)
Т.е. Nemerle — это VB.NET с расширенными возможностями (они указаны в статье) и синтаксисом C# и Pascal (объявление переменных и результатов функций)
2. Многопроходный компилятор (Интересно скольки?). Но тут уже никуда не денешся. Это плата за расширенные возможности языка.

Плюсы
1. Язык максимально приближен по синтаксису к c#. По-этому бери и пиши. Причем можно писать по старинке (в стиле C#). И потихоньку переходить на
стиль Nemerle.
2. Остальные фичи описаны в статье.

По поводу проекта интеграции в VS.NET
1. Насколько я знаю такой-же проект как на rsdn.ru ведется на nemerle.org. Не логичней было бы их объеденить, а не распылять ресурсы разработчиков.
2. После обсуждений с VladD2 я пришел к выводу что на Nemerle лучше писать не интерфейсную часть, а интерфейс на традиционных языках (C# или VB).
По-этому рациональней сначала сделать всю функциональность редактора, codesnippets, code complete, refactoring и иже с ним.
А на следующем этапе — дизайнер форм и asp-страниц

Прошу не сильно бить за критику.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.06 19:22
Оценка:
Здравствуйте, alvas, Вы писали:

A>2. В статье промелькнула фраза что C# 3.0 когда еще будет, а Nemerle можно попробовать уже сейчас. На самом деле они оба имеют одинаковый статус — бета,

A>которую можно попробовать.

+1

A>Недостатки языка

A>1. Не полная реализация возможностей C# (Нет поддержки unsafe режима). По-этому мне кажется лучше его сравнивать с VB.NET (он тоже не поддерживает unsafe)

Весьма странная логика.

A>Т.е. Nemerle — это VB.NET с расширенными возможностями (они указаны в статье) и синтаксисом C# и Pascal (объявление переменных и результатов функций)


"VB.NET с синтаксисом C# и Pascal" это вообще перл.

На мой взгляд, разделение языков по принципу "поддерживает ансэйф" и "не поддерживает ансэйф" смысла не имеет. Языки же в первую очередь отличаются синтаксисом и семантикой и тут с VB ну совсем мало сходств.

A>2. Многопроходный компилятор (Интересно скольки?). Но тут уже никуда не денешся. Это плата за расширенные возможности языка.


На сегодня термин "многопроходный" безнадежно устарел. Изначально он означал количество считываний исходного файла при компиляции. Множественное считывание требовалось в виду недостатка памяти. Современные компиляторы считывают весь проект в память и далее к диску не обращаются (точнее обращаются для записи бинарников).

На сегодня можно говорить только про многостадийные компиляторы. Вот только я не знаю ни одного современного языка программирования который бы был одностадийным.

Компилятор C# точно такой же многостадийный компилтор как и немерловый. В Немерле ровно на оду стадию больше. В нем есть стадия PrePars в которой токены помещаются в специальные группы. Нужен он для поддержки синтаксиса базирующегося на отступах и для возможности внедренеия в язык расширений (DSL-ей) на уровне токенов.

Ести ты хотел сказать о скорости компиляции, то так надо было и говорить. Она у Немерла явно ниже чем у C# (хотя на средних проектах не особно заметно) но это связано не с мифической мнопроходностью, а с тем что компилятор Немерле осуществляет вывод типов по довольно сложному алгоритму.

A>По поводу проекта интеграции в VS.NET

A>1. Насколько я знаю такой-же проект как на rsdn.ru ведется на nemerle.org. Не логичней было бы их объеденить, а не распылять ресурсы разработчиков.

Проект интеграции на nemerle.org обсолютно дохлый. Боее того основная проблема в интеграции заключается не в развитии этого проекта, а в адаптации компилятора под него. Собственно этим я в оснвном и занимаюсь в свободное от жизни время.

A>2. После обсуждений с VladD2 я пришел к выводу что на Nemerle лучше писать не интерфейсную часть, а интерфейс на традиционных языках (C# или VB).


На самом деле это не так. Nemerle тут ничем не отличается от C# или VB. Но проблема в том, что для него просто пока нет нужной поддержки в IDE. Когда мы ее сделаем, то разницы не будет.

A>По-этому рациональней сначала сделать всю функциональность редактора, codesnippets, code complete, refactoring и иже с ним.


Сделать редактор первым логично хотя бы потому, что все остальное проще писать имея поддержку IDE. В прочем проект дизайнера форм ведется параллельно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle
От: alvas  
Дата: 26.07.06 07:03
Оценка:
A>>Недостатки языка
A>>1. Не полная реализация возможностей C# (Нет поддержки unsafe режима). По-этому мне кажется лучше его сравнивать с VB.NET (он тоже не поддерживает unsafe)

VD>Весьма странная логика.


Неполная поддержка возможностей C# не дает возможности сказать.
"Забудьте про си-шарп. Переходите на Nemerle — и все будет в шоколаде. Тем более что синтаксис языков похож"
А можно сказать так.
"Пишите на Nemerle. А если чего не хватает (unsafe) — дописывайте на си-шарп"

A>>Т.е. Nemerle — это VB.NET с расширенными возможностями (они указаны в статье) и синтаксисом C# и Pascal (объявление переменных и результатов функций)


VD>"VB.NET с синтаксисом C# и Pascal" это вообще перл.


VD>На мой взгляд, разделение языков по принципу "поддерживает ансэйф" и "не поддерживает ансэйф" смысла не имеет. Языки же в первую очередь отличаются синтаксисом и семантикой и тут с VB ну совсем мало сходств.


На самом деле с бейсиком очень много общего. Параметры по-умолчанию, ... В общем Вы в своей статье очень хорошо описали все заимствования из VB.

A>>2. Многопроходный компилятор (Интересно скольки?). Но тут уже никуда не денешся. Это плата за расширенные возможности языка.


VD>Ести ты хотел сказать о скорости компиляции, то так надо было и говорить. Она у Немерла явно ниже чем у C# (хотя на средних проектах не особно заметно) но это связано не с мифической мнопроходностью, а с тем что компилятор Немерле осуществляет вывод типов по довольно сложному алгоритму.


Да
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[4]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.07.06 09:55
Оценка: +1
Здравствуйте, alvas, Вы писали:

A>Неполная поддержка возможностей C# не дает возможности сказать.

A>"Забудьте про си-шарп. Переходите на Nemerle — и все будет в шоколаде. Тем более что синтаксис языков похож"

Да, позволяет, позволяет. На оборот это даже приемущество, так как шаловливые ручки не будут постоянно тянуться к оверкильным-методам.

A>А можно сказать так.

A>"Пишите на Nemerle. А если чего не хватает (unsafe) — дописывайте на си-шарп"

Откровенно говоря если нужен ансэйф, то лучше просто написать мелкий модуль на C/C++. Но можно конечно и на Шарпе. Вот олько еще раз повторюсь, что лично мне за 5 лет не понадобилось написать ни одной строчки ансэйфа по делу. Только в пенисометрии какой-нибудь.

A>На самом деле с бейсиком очень много общего. Параметры по-умолчанию, ... В общем Вы в своей статье очень хорошо описали все заимствования из VB.


Параметры по умолчанию вообще-то взяты из Питона. В статье я упоминал VB так как он более знаком аудитории. Да и мест где можно скзать о взаимствовании из VB раз два и обчелся. Их несравнимо меньше чем взаимсвований из C# или ML. Так что твое утверждение вряд ли можно назвать верным. Просто на твое суждение воздействует среда в которой ты варился и довольно странное предположение, что ансэйф является весьма значимой частью языка.

На самом деле ансэйф не является критичным ни для скорости получаемого кода, ни для функционала получаемых приложений. Это средство для хаков. И лично я считаю, что чем меньше хаков и чем менее они опасны, тем лучше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Nemerle
От: alvas  
Дата: 26.07.06 10:55
Оценка:
Я так настаиваю на unsafe потому что он мне был реално нужен, и сейчас кстати, тоже, не для пенисометрии, а для реальной работы (Взаимодействие с некоторыми функциями WinAPI).

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


A>>Неполная поддержка возможностей C# не дает возможности сказать.

A>>"Забудьте про си-шарп. Переходите на Nemerle — и все будет в шоколаде. Тем более что синтаксис языков похож"

VD>Да, позволяет, позволяет. На оборот это даже приемущество, так как шаловливые ручки не будут постоянно тянуться к оверкильным-методам.


A>>А можно сказать так.

A>>"Пишите на Nemerle. А если чего не хватает (unsafe) — дописывайте на си-шарп"

VD>Откровенно говоря если нужен ансэйф, то лучше просто написать мелкий модуль на C/C++. Но можно конечно и на Шарпе. Вот олько еще раз повторюсь, что лично мне за 5 лет не понадобилось написать ни одной строчки ансэйфа по делу. Только в пенисометрии какой-нибудь.


A>>На самом деле с бейсиком очень много общего. Параметры по-умолчанию, ... В общем Вы в своей статье очень хорошо описали все заимствования из VB.


VD>Параметры по умолчанию вообще-то взяты из Питона. В статье я упоминал VB так как он более знаком аудитории. Да и мест где можно скзать о взаимствовании из VB раз два и обчелся. Их несравнимо меньше чем взаимсвований из C# или ML. Так что твое утверждение вряд ли можно назвать верным. Просто на твое суждение воздействует среда в которой ты варился и довольно странное предположение, что ансэйф является весьма значимой частью языка.


Именно так. А на тебя разве среда в которой ты варился на воздействует?

VD>На самом деле ансэйф не является критичным ни для скорости получаемого кода, ни для функционала получаемых приложений. Это средство для хаков. И лично я считаю, что чем меньше хаков и чем менее они опасны, тем лучше.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[6]: Nemerle
От: Oyster Украина https://github.com/devoyster
Дата: 26.07.06 11:07
Оценка:
Здравствуйте, alvas, Вы писали:

A>Я так настаиваю на unsafe потому что он мне был реално нужен, и сейчас кстати, тоже, не для пенисометрии, а для реальной работы (Взаимодействие с некоторыми функциями WinAPI).


Маршалинга с P/Invoke не хватает? Приведи пример.
Re[6]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.07.06 12:19
Оценка:
Здравствуйте, alvas, Вы писали:

A>Я так настаиваю на unsafe потому что он мне был реално нужен, и сейчас кстати, тоже, не для пенисометрии, а для реальной работы (Взаимодействие с некоторыми функциями WinAPI).


Сдается мне, что WinAPI можно использовать без unsafe.

A>Именно так. А на тебя разве среда в которой ты варился на воздействует?


Я стараюсь вариться в разных средах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle
От: alvas  
Дата: 27.07.06 06:36
Оценка:
Код вышлю позже...
http://alvas.net — Аудио-инструменты для .Net разработчиков
[Nemerle] Новая возможность: Ко/контрвариантность для делега
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.06 12:22
Оценка: 29 (5)
В версии 6470 добавлена ковариантность/контрвариантность для делегатов и интерфейсов.

Описывается это дело с помощью "+" и "-" перед параметрами типов:
public interface IFun [-I, +O]
{
  Apply (x : I) : O;
}


Данная запись означает, что вместо I могут быть подставлены типы являющиеся базовыми типами для I, а вместо O типы являющиеся наследниками от O.
Таким образом если некий функция требует в качестве параметра интерфейс с конкретными параметрами типа, то ему все можно передать реализацию интерфейса с другими параметрами итпа которые удовлетворяют указанным критериям.

Возможность основана на поддержке рантайма. К сожалению, Моно пока данную возможность не поддерживает.

Пример исползования:
http://nemerle.org/svn/nemerle/trunk/ncc/testsuite/positive/co-contra-variance-native.n
Негативный тест:
http://nemerle.org/svn/nemerle/trunk/ncc/testsuite/negative/co-contravariant-native.n
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Nemerle
От: Аноним  
Дата: 27.07.06 17:58
Оценка:
Привожу пример, как и обещал. Если поможешь избавиться от unsafe — персональная моя большая благодарность


    private static WaveFormat GetFormat(IntPtr format)
    {
      unsafe
      {
        WinApi.WaveFormatEx* wfx = (WinApi.WaveFormatEx*)format.ToPointer();
        WaveFormat waveFormat = new WaveFormat();
        waveFormat.wFormatTag = wfx->wFormatTag;
        waveFormat.nChannels = wfx->nChannels;
        waveFormat.nSamplesPerSec = wfx->nSamplesPerSec;
        waveFormat.nAvgBytesPerSec = wfx->nAvgBytesPerSec;
        waveFormat.nBlockAlign = wfx->nBlockAlign;
        waveFormat.wBitsPerSample = wfx->wBitsPerSample;
        return waveFormat;
      }
    }

        public byte[] FormatBytes()
        {
            unsafe
            {
                int dataSize;
                WinApi.WaveFormatEx* wfx = (WinApi.WaveFormatEx*)_Format.ToPointer();
                if (WinApi.WAVE_FORMAT_PCM == wfx->wFormatTag)
                    dataSize = Marshal.SizeOf(typeof(WaveFormat));//WinApi.//PCMWAVEFORMAT
                else
                    dataSize = Marshal.SizeOf(typeof(WinApi.WaveFormatEx)) - 2 + wfx->cbSize;
                //base.Write(dataSize, base.Position, Marshal.SizeOf(dataSize));

                IntPtr wfxPtr = new IntPtr(wfx);//Ptr
                byte[] wfxArr = new byte[dataSize];
                Marshal.Copy(wfxPtr, wfxArr, 0, dataSize);
                return wfxArr;
            }
        }


O>Маршалинга с P/Invoke не хватает? Приведи пример.
Re[3]: Nemerle
От: Андрей Хропов Россия  
Дата: 28.07.06 00:42
Оценка: :)
Здравствуйте, VladD2, Вы писали:

A>>Т.е. Nemerle — это VB.NET с расширенными возможностями (они указаны в статье) и синтаксисом C# и Pascal (объявление переменных и результатов функций)


VD>"VB.NET с синтаксисом C# и Pascal" это вообще перл.


Э-э, причем здесь Perl?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Nemerle
От: Oyster Украина https://github.com/devoyster
Дата: 28.07.06 08:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Привожу пример, как и обещал. Если поможешь избавиться от unsafe — персональная моя большая благодарность


Marshal.PtrToStructure + [StructLayout(LayoutKind.Explicit)]
и [FieldOffset] в структуре.

Плюс во втором случае я вижу два варианта:

  1. Использовать бОльшую по размеру из структур (но это может не всегда работать).
  2. Зная, где именно находится wfx->wFormatTag, вытягивать его с помощью Marshal.ReadInt32() (и подобных методов). Если поле не в начале структуры, то можно указать offset.
Re[9]: Nemerle
От: alvas  
Дата: 28.07.06 08:42
Оценка:
O>Marshal.PtrToStructure + [StructLayout(LayoutKind.Explicit)]
O>и [FieldOffset] в структуре.

Для первого метода предложение принимается.

O>Плюс во втором случае я вижу два варианта:


O>

    O>
  1. Использовать бОльшую по размеру из структур (но это может не всегда работать).
    O>
  2. Зная, где именно находится wfx->wFormatTag, вытягивать его с помощью Marshal.ReadInt32() (и подобных методов). Если поле не в начале структуры, то можно указать offset.
    O>

Для второго предложения не принимаются, ибо

dataSize = Marshal.SizeOf(typeof(WinApi.WaveFormatEx)) - 2 + wfx->cbSize;


т.е. размер не равен размеру структуры, а размер структуры + дополнительный размер, который указан в самой структуре (wfx->cbSize)

Приглашаю к обсуждению VladD2 моего кода
Автор:
Дата: 27.07.06
. Тем более что это наш с ним спор по поводу unsafe
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[10]: Nemerle
От: Oyster Украина https://github.com/devoyster
Дата: 28.07.06 09:01
Оценка:
Здравствуйте, alvas, Вы писали:

A>т.е. размер не равен размеру структуры, а размер структуры + дополнительный размер, который указан в самой структуре (wfx->cbSize)


Ты был невнимателен. Этот wfx->cbSize можно получить, используя Marshal.ReadInt32() — разве нет? Если нет, то аргументируй, пожалуйста.
Re[11]: Nemerle
От: alvas  
Дата: 28.07.06 09:15
Оценка:
O>Ты был невнимателен. Этот wfx->cbSize можно получить, используя Marshal.ReadInt32() — разве нет? Если нет, то аргументируй, пожалуйста.

Вроде ты прав. Попробую полностью избавиться от unsafe. Про результат сообщу дополнительно.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: [Nemerle] Новая возможность: Ко/контрвариантность для де
От: EvilChild Ниоткуда  
Дата: 30.07.06 09:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В версии 6470 добавлена ковариантность/контрвариантность для делегатов и интерфейсов.


VD>Описывается это дело с помощью "+" и "-" перед параметрами типов:

VD>
VD>public interface IFun [-I, +O]
VD>{
VD>  Apply (x : I) : O;
VD>}
VD>


Забавно, есть предложение по поддержке данной фичи в C#: Variance and Generalized Constraints for C# Generics, там используется аналогичный синтаксис. Это общепринятое соглашение или Nemerle'овцы делали это с оглядкой на вышеозначенную работу?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: EvilChild Ниоткуда  
Дата: 30.07.06 09:50
Оценка:
EC>Забавно, есть предложение по поддержке данной фичи в C#: Variance and Generalized Constraints for C# Generics, там используется аналогичный синтаксис. Это общепринятое соглашение или Nemerle'овцы делали это с оглядкой на вышеозначенную работу?
Несовсем точно написал, имеется в виду поддержка ко/контрвариантности.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.07.06 10:03
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Забавно, есть предложение по поддержке данной фичи в C#: Variance and Generalized Constraints for C# Generics, там используется аналогичный синтаксис. Это общепринятое соглашение или Nemerle'овцы делали это с оглядкой на вышеозначенную работу?


Нет. Они опирались на опыт ML-подобных языков и Scala.

Собственно, что говорить то? Вот обуждение:
http://nemerle.org/bugs/view.php?id=638

Так что скорее всего просто и немероловцы и сишарпщики драли идеи из общих источников. А судя по датам, сарпщики могли даже драть у немерловцев.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.07.06 10:08
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Забавно, есть предложение по поддержке данной фичи в C#: Variance and Generalized Constraints for C# Generics,


А ты открывал pdf на который дал ссылку? Там слово "Scala" встречается чуть ли чаще чем слово "but".

Так что даже вопроса не возникает откуда ноги растут.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.07.06 10:18
Оценка: :)
Здравствуйте, EvilChild, Вы писали:

EC>Variance and Generalized Constraints for C# Generics,


Блин, обожаю математиков! 25 мстриц бушита . Оно в коде компилятора существенно меньше занимает. В Скале тоже описано в одном абзаце.

В общем, если нужно что-то полностью запутать, то тут без высшей математики никак.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: EvilChild Ниоткуда  
Дата: 30.07.06 10:18
Оценка:
Здравствуйте, VladD2, Вы писали:

EC>>Забавно, есть предложение по поддержке данной фичи в C#: Variance and Generalized Constraints for C# Generics,


VD>А ты открывал pdf на который дал ссылку? Там слово "Scala" встречается чуть ли чаще чем слово "but".

VD>Так что даже вопроса не возникает откуда ноги растут.

Оперативность твоих ответов радует
Вопрос был в том, откуда брали немерловцы идею, а не шарписты
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Nemerle] Новая возможность: Ко/контрвариантность для
От: EvilChild Ниоткуда  
Дата: 30.07.06 10:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Блин, обожаю математиков! 25 мстриц бушита . Оно в коде компилятора существенно меньше занимает. В Скале тоже описано в одном абзаце.


VD>В общем, если нужно что-то полностью запутать, то тут без высшей математики никак.

Ну, первые 10 страниц написаны обычным языком — для простых крестьян, а те кого интересуют формализмы читают дальше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Nemerle
От: andrey.bond  
Дата: 16.05.07 22:22
Оценка:
Прочитал статью — впечатление о языке создалось двоякое, с одной стороны он предлагает прикольные фичи, например, мне очень понравилось то, что компилятор ругается на игнорирование возвращаемого значения функции и как реализовано явное игнорирование(переменная "_").
С другой стороны я считаю что код :

Max(x : int, y : int) : int
{
  if (x > y) return x else return y
}

более читабелен, чем:

Max(x : int, y : int) : int
{
  if (x > y) x else y
}

хоть и немного длиннее, так как при использовании оператора return даже при беглом просмотре кода гораздо проще понять, где функция может завершить свое выполнение...

Специально привел только по 1 за и против для равновесия=) если наберусь сил и терпения, изложу оставшуюся часть впечатлений...
Это пройдёт
От: Блудов Павел Россия  
Дата: 17.05.07 02:03
Оценка: +1
Здравствуйте, andrey.bond, Вы писали:

AB>С другой стороны я считаю что код :


AB>
AB>Max(x : int, y : int) : int
AB>{
AB>  if (x > y) return x else return y
AB>}
AB>

AB>более читабелен, чем:
AB>
AB>Max(x : int, y : int) : int
AB>{
AB>  if (x > y) x else y
AB>}
AB>


Просто сила привычки. Мозгу требуется некоторое время чтобы перестроиться. Зато когда он перестроится, то синтаксис c# будет казаться громоздким и неудобным.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re: Это пройдёт
От: andrey.bond  
Дата: 17.05.07 05:18
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Просто сила привычки. Мозгу требуется некоторое время чтобы перестроиться. Зато когда он перестроится, то синтаксис c# будет казаться громоздким и неудобным.


Вполне может быть..

А немерле поддерживает множественное наследование классов? я понимаю что скорее всего нет, т.к. ооп в нем от с#, но надежда умирает последней...
Re[2]: Это пройдёт
От: AngeL B. Россия  
Дата: 17.05.07 06:36
Оценка:
Здравствуйте, andrey.bond, Вы писали:

AB>А немерле поддерживает множественное наследование классов? я понимаю что скорее всего нет, т.к. ооп в нем от с#, но надежда умирает последней...

Нет, и не надо!
Mixin-ов (uses) которые, кажется, стоят в очереди на релизацию будет вполне достаточно.
Re[2]: Nemerle
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 17.05.07 07:43
Оценка:
Здравствуйте, andrey.bond, Вы писали:

AB>хоть и немного длиннее, так как при использовании оператора return даже при беглом просмотре кода гораздо проще понять, где функция может завершить свое выполнение...


В ФЯ функция не выполняется — она вычислятся.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[3]: Это пройдёт
От: andrey.bond  
Дата: 17.05.07 07:45
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>Нет, и не надо!

А мне в С# его нехватает... но это дело вкуса...
Re[3]: Nemerle
От: andrey.bond  
Дата: 17.05.07 07:48
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Здравствуйте, andrey.bond, Вы писали:


AB>>хоть и немного длиннее, так как при использовании оператора return даже при беглом просмотре кода гораздо проще понять, где функция может завершить свое выполнение...


K>В ФЯ функция не выполняется — она вычислятся.


А где можно поподробнее почитать о концепции ФЯ без особой привязки к конкретному языку, именно о самом подходе?
Re[2]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.07 15:52
Оценка:
Здравствуйте, andrey.bond, Вы писали:

AB>С другой стороны я считаю что код :

AB>
AB>Max(x : int, y : int) : int
AB>{
AB>  if (x > y) return x else return y
AB>}
AB>

AB>более читабелен, чем:

AB>
AB>Max(x : int, y : int) : int
AB>{
AB>  if (x > y) x else y
AB>}
AB>

AB>хоть и немного длиннее, так как при использовании оператора return даже при беглом просмотре кода гораздо проще понять, где функция может завершить свое выполнение...

Это всего лишь говорят твои привычки. Поверь, после небольшого промежутка времени ты будешь недоумевать зачем были нужны эти return-ы во многих местах программы.

К тому же тут основная фишка в том, что мы имеет дело с выражением (expression), а не "констркцией" (statment) if. Так мы можем написать:
def z = if (x > y) x else y;

в C# — это невозможно, так как if — это statment (не может чего либо возвратить).

Что же касается конкретно return-ов, то в принципе их никто не запрешал. Подклчаешь пространство имен Nemerle.Imperative и твой код будет работать как предпологается.

НО Хотя в таком примитивном случае этого не видно, но в облее сложных случаях код без return-ов читается намного проще! Дело в том, что у тебя есть увереннсть, что код не прервется где-то незаметно для тебя. По этому ты можешь полагаться на ветвления. В общем, код становится проще для понимания.

AB>Специально привел только по 1 за и против для равновесия=) если наберусь сил и терпения, изложу оставшуюся часть впечатлений...


Давай. Это интересно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.07 15:52
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>В ФЯ функция не выполняется — она вычислятся.


Ну, это игра терминов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Nemerle
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 17.05.07 18:04
Оценка:
Здравствуйте, VladD2, Вы писали:

K>>В ФЯ функция не выполняется — она вычислятся.


VD>Ну, это игра терминов.


Нет, при таком взгляде на ФЯ мне в своё время было проще к нему привыкнуть.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re[5]: Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.07 21:32
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>>>В ФЯ функция не выполняется — она вычислятся.


VD>>Ну, это игра терминов.


K>Нет, при таком взгляде на ФЯ мне в своё время было проще к нему привыкнуть.


А это психология.

Кстати, мне понравилось как охарактеризовал функциональный стиль Камил Скальски. Он сказал что ФС — это взгляд на программу как на ряд трансформаций данных. Мне кажется очень верно подмечено. Потому как слова "запись в виде выражения или фунций" люди обычно не могут прочувствовать. А тут имеем А и преобразуем его в Б. Все же знают что такое консольное приложение? Вот и тут тоже самое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.