1 2
Re[10]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое горячее всё    подписка   модер. 
От: Пельмешкоprofile blog
Дата: 23.11.09 08:50
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, Пельмешко, Вы писали:


П>>Никакой разницы в поведении. Можно и .ForkJoin()'ом, только оно дождётся лишь по одному сообщению от обоих observer'ов...

C>и точно, я еще на библиотеку как следует не смотрел, как думаешь из F# будет удобно использовать? (например LINQ ИМНО ни разу не удобно)

Конкретно этот Rx, на базе перегруженных extension-методов в F# можно использовать только на манер linq method syntax в C#:

open System.Linq

let query = (seq { 1 .. 10 }).Where(fun x -> x % 2 = 0).Select((*) 2)

Но это косячно, например, нельзя перенести .MethodName() на новую строку + иногда partial application не дружит с приведением к типу делегата...
Да и вообще с перегрузкой выводу типов сложнее, а ещё чаще вообще невозможно вывести правильный тип...

Другое дело — модуль Observable и поддержка со стороны компилятора
В последнем релизе любой event — уже IObservable, никаких Observable.FromEvent() не надо.

Вот только похоже разрабатывают F# Observable далеко не те же люди, что и Rx... Функционал модуля Observable пока достаточно скромен и не понятно, будет ли когда-нибудь этот функционал базироваться на "официальном" Rx.

p.s. Лично мне не понятно зачем после появления Observable в F# оставили модуль Event и IEvent... Похоже F# first-class events так и останутся жить своей жизнью, с последнего релиза вроде как в FSharp.Core не будут вносить breaking changes...
Develop with pleasure!
Re[10]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: Пельмешкоprofile blog
Дата: 23.11.09 11:50
Здравствуйте, cadet354, Вы писали:

C>как думаешь из F# будет удобно использовать?


Вот, кстати, товарищи уже обёртки пишут:
http://www.navision-blog.de/2009/11/23/mapping-the-reactive-framework-rx-operators-for-f/

Только что-то не нравится мне перспектива оборачивания функциональных типов в делегаты...
Develop with pleasure!
Re[11]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: cadet354my twitter
Дата: 23.11.09 13:26
Здравствуйте, Пельмешко, Вы писали:


П>Только что-то не нравится мне перспектива оборачивания функциональных типов в делегаты...

чем не нравиться,только из-за чистоты, уж не думаю, что там производительность просядет, или что немцу хорошо то русскому смерть?
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re[12]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: Пельмешкоprofile blog
Дата: 23.11.09 13:47
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, Пельмешко, Вы писали:


П>>Только что-то не нравится мне перспектива оборачивания функциональных типов в делегаты...

C>чем не нравиться,только из-за чистоты, уж не думаю, что там производительность просядет, или что немцу хорошо то русскому смерть?

Мне сам факт не нравится, а может и просядет Возмём:
let func = (+)
let deleg = System.Func<_,_>(func)
Посмотрим на это "с изнанки":
[Serializable]
internal class func@7 : OptimizedClosures.FSharpFunc<int, int, int>
{
    internal func@7() { }

    public override int Invoke(int x, int y)
    {
        return (x + y);
    }
}

public static void main@()
{
    FSharpFunc<int, FSharpFunc<int, int>> func = func@7 = new File2.func@7();
    Func<int, int, int> deleg = deleg@9 = new Func<int, int, int>(new File2.deleg@9().Invoke);
}
Обращаем внимание, что выделенный метод Invoke() — это виртуальный метод generic-класса FSharpFunc<,,>.

Теперь читаем статью:
http://tips.x-tensive.com/2008/10/method-call-performance.html

И обращаем внимание на фразу:

Creating a delegate pointing to generic virtual method time is 1000x.


Конечно делегат создавать надо только один раз, при формировании IObservable из цепочки методов... но всё же три порядка
Проверить лень, рад буду ошибаться...
Develop with pleasure!
Re[12]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: Пельмешкоprofile blog
Дата: 23.11.09 16:51
Оценка:8 (1)
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, Пельмешко, Вы писали:


П>>Только что-то не нравится мне перспектива оборачивания функциональных типов в делегаты...

C>чем не нравиться,только из-за чистоты, уж не думаю, что там производительность просядет, или что немцу хорошо то русскому смерть?

Прогнал я простой тестик, то ли наврали в той статье, то ли JIT допилили с конца 2008 года:
Delegate creation time (10000000 iterations) results:

Test #1 Interface method: 00:00:00.9326484 (932 ms)
Test #2  Virtual generic: 00:00:00.8832418 (883 ms)
Test #3  Instance method: 00:00:00.3833311 (383 ms)
Test #4    Static method: 00:00:00.2927472 (292 ms)


Что то не видно тут "1000x"... Сойдёт короче
Develop with pleasure!
Re: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: descohttp://v2matveev.blogspot.com
Дата: 19.12.09 06:59
Оценка:23 (2)
Здравствуйте, Пельмешко, Вы писали:

<skipped/>

Build 1.0.2144.0 12/18/2009
DevLabs: Reactive Extensions for .NET (Rx)

Release notes:

* License changes based on forum feedback
* Add FromAsyncPattern to Silverlight
* Remove Observable.Context and replace with IScheduler mechanism.
* Perf fixes for Last*,First* and Single*. Adding Any, All
* Additional StartWith overloads
* Fix bug in EnumerableEx.Memoize
* Fix bug in EnumerableEx.Retry
* Fix bug in EnumerableEx.Merge
* Add ObserveOn & SubscribeOn for Control and Dispatcher schedulers
* Removed all time based operators which takes an Int instead of a TimeSpan or DateTime
* Generalized the Using operator by adding a type parameter TResource constrained to implement IDisposable
* Renamed BufferWithTime to Buffer since there is no ambiguity between the two now
* Renamed Until to TakeUntil
* Renamed WaitUntil to SkipUntil
* Added various disposables in System.Disposables
* Fixed a bug in Observable.Join
* Added Observable.IsEmpty
* Changed DateTime to DateTimeOffset
* Setup will automatically uninstall previous releases
Re[2]: [ANN] Reactive Extensions for .NET (Rx) в избранное  новое    модер. 
От: Пельмешкоprofile blog
Дата: 19.12.09 10:31
Здравствуйте, desco, Вы писали:

D> * Generalized the Using operator by adding a type parameter TResource constrained to implement IDisposable


Вот только для IEnumerable<T> такую же шляпу забыли
Не понятно почему сразу нельзя было сделать generic-версию с contraint'ом, там и так всё обобщено насколько можно...
Develop with pleasure!
1 2