Re[35]: Скорость JavaScript
От: Константин Б. Россия  
Дата: 19.07.11 05:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Константин Б., Вы писали:


C>>>От Rx отличие в том, что нет никакой завязки в коде на него.

КБ>>Ну и на шарпе это выглядело бы как-нибудь так:
C>Не пройдёт. Во-первых, тебе надо будет всё помещать в один большой контекст.

Нет не надо.

C>Во-вторых:

C>
C>var a = 10;
C>var b = 20;

C>//Указываем как мы рассчитываем текст на поле ввода
C>form.displayField.text = function() { 
C>   return a+b; //Обычный код, может включать вызовы других функций и т.п.
C>} 
C>form.displayField2.text = function() { 
C>   return b^2;
C>} 

C>a=11; //Пересчитается первое поле
C>b=12; //Пересчитаются оба поля
C>


И где такое чудо? O_o В треллисе и нокаут-жсе будут пересчитаны оба.

А такое оно тоже разрулит?
var a = 10;
var b = 20;
var c = 30;

//Указываем как мы рассчитываем текст на поле ввода
form.displayField.text = function() { 
   if a < 20:
       return b;
   else:
       return c;
} 
form.displayField2.text = function() { 
   if a < 20:
       return c;
   else:
       return b;
} 

b=12; //Пересчитаются только первое поле?
с=12; //Пересчитается только второе поле?
Re[36]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 05:58
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>И где такое чудо? O_o В треллисе и нокаут-жсе будут пересчитаны оба.

Поспорим? В Треллисе будет пересчитано только то, что зависит от изменяемой переменной.

КБ>А такое оно тоже разрулит?

КБ>
КБ>var a = 10;
КБ>var b = 20;
КБ>var c = 30;
КБ>//Указываем как мы рассчитываем текст на поле ввода
КБ>form.displayField.text = function() { 
КБ>   if a < 20:
КБ>       return b;
КБ>   else:
КБ>       return c;
КБ>} 
КБ>form.displayField2.text = function() { 
КБ>   if a < 20:
КБ>       return c;
КБ>   else:
КБ>       return b;
КБ>} 
КБ>b=12; //Пересчитаются только первое поле?
КБ>с=12; //Пересчитается только второе поле?
КБ>

Да, вполне разрулит.
Sapienti sat!
Re[37]: Скорость JavaScript
От: Константин Б. Россия  
Дата: 19.07.11 06:10
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Константин Б., Вы писали:


КБ>>И где такое чудо? O_o В треллисе и нокаут-жсе будут пересчитаны оба.

C>Поспорим? В Треллисе будет пересчитано только то, что зависит от изменяемой переменной.

Давай
Re[31]: Скорость JavaScript
От: Ночной Смотрящий Россия  
Дата: 19.07.11 07:43
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>> Он решает немного другие задачи, по сравнению с Trellis для Питона или http://knockoutjs.com/ для JS.

НС>>Ну так раскрой мысль, что такого не хватает статически типизированным языкам.
C>Нельзя, к примеру, динамически поменять функциональность методов

Это не задача

C>, чтобы отслеживать любое обращение к данным внутри наблюдаемого множества


Зачем его отслеживать?
Re[32]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 11:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

C>>Нельзя, к примеру, динамически поменять функциональность методов

НС>Это не задача
Это иногда бывает нужно при решении задач.

C>>, чтобы отслеживать любое обращение к данным внутри наблюдаемого множества

НС>Зачем его отслеживать?
http://rsdn.ru/forum/flame.comp/4347619.aspx
Автор: Cyberax
Дата: 19.07.11
— как такой пример на статике красиво сделать?
Sapienti sat!
Re[33]: Скорость JavaScript
От: Ночной Смотрящий Россия  
Дата: 19.07.11 11:40
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Нельзя, к примеру, динамически поменять функциональность методов

НС>>Это не задача
C>Это иногда бывает нужно при решении задач.

В рамках динамики — может быть.

НС>>Зачем его отслеживать?

C>http://rsdn.ru/forum/flame.comp/4347619.aspx
Автор: Cyberax
Дата: 19.07.11
— как такой пример на статике красиво сделать?


Не вникал, извини. Может позже.
Re[33]: Скорость JavaScript
От: Sinix  
Дата: 19.07.11 11:43
Оценка:
Здравствуйте, Cyberax, Вы писали:


C>http://rsdn.ru/forum/flame.comp/4347619.aspx
Автор: Cyberax
Дата: 19.07.11
— как такой пример на статике красиво сделать?


Передавать обёртку аля Binding<T> (имя можно подсократить)? Если хочется абсолютно идентичного поведения — придётся повозиться с разбором expression tree, да и производительность (без emit-а) будет близка к яваскрипту.

Если чуть упростить задачу — достаточно
  public Binding GetBinding(Func<Binding[], Binding> selector, params Binding[] sources)
  {
  }


Или, если не стоит задача "сделать один в один" — списываем систему биндингов с WPF.
Re[34]: Скорость JavaScript
От: Ночной Смотрящий Россия  
Дата: 19.07.11 11:45
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Передавать обёртку аля Binding<T> (имя можно подсократить)? Если хочется абсолютно идентичного поведения — придётся повозиться с разбором expression tree, да и производительность (без emit-а) будет близка к яваскрипту.


Можно на динамиках сделать. Не теряя, где это возможно, статики.

S>Или, если не стоит задача "сделать один в один" — списываем систему биндингов с WPF.


+1. Только в испольнении шарпа там все печально. Нужна или доработка языка или метапрограмминг.
Re[38]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 11:55
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>>>И где такое чудо? O_o В треллисе и нокаут-жсе будут пересчитаны оба.

C>>Поспорим? В Треллисе будет пересчитано только то, что зависит от изменяемой переменной.
КБ>Давай
No problemo:

#!/usr/bin/python

from peak.events import trellis

def very_complex_function(a, b):
    return (a+b)/2

class TestContext(trellis.Component):
    trellis.attrs(a = 0, b = 5, c=10)

    @trellis.perform
    def show_values(self):
    if (self.a>20):
        print "A is greater than 20: %d" % very_complex_function(self.b,self.c)
    else:
        print "A is less than 20, so: %d" % self.b

tc = TestContext()
print "Now mutating self.c ..."
tc.c = 11 # Ничего не персчитается, мы не зависим от self.c сейчас
print "mutated."

print "Now mutating self.b ..."
tc.b = 12 # А вот от self.b мы зависим - пересчитается
print "mutated."

print "Now mutating self.a ..."
tc.a = 21 # Теперь зависим от b и c.
print "mutated."

print "Now mutating self.c ..."
tc.c = 5 # Так что СЕЙЧАС оно пересчитается
print "mutated."


Вывод:
A is less than 20, so: 5
Now mutating self.c ...
mutated.
Now mutating self.b ...
A is less than 20, so: 12
mutated.
Now mutating self.a ...
A is greater than 20: 11
mutated.
Now mutating self.c ...
A is greater than 20: 8
mutated.


Установка Trellis'а делается так:
easy_install --user svn://svn.eby-sarna.com/svnroot/DecoratorTools/
easy_install --user svn://svn.eby-sarna.com/svnroot/Trellis/
Sapienti sat!
Re[34]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 11:59
Оценка:
Здравствуйте, Sinix, Вы писали:

C>>http://rsdn.ru/forum/flame.comp/4347619.aspx
Автор: Cyberax
Дата: 19.07.11
— как такой пример на статике красиво сделать?

S>Передавать обёртку аля Binding<T> (имя можно подсократить)? Если хочется абсолютно идентичного поведения — придётся повозиться с разбором expression tree, да и производительность (без emit-а) будет близка к яваскрипту.
Не получится. Точнее, придётся делать разбор произвольных функций и их интерпретацию. По сути, сделать динамику собственными руками.

Вот простой пример: http://rsdn.ru/forum/flame.comp/4348289.aspx
Автор: Cyberax
Дата: 19.07.11
Sapienti sat!
Re[35]: Скорость JavaScript
От: Sinix  
Дата: 19.07.11 12:05
Оценка:
Здравствуйте, Cyberax, Вы писали:


C>Не получится. Точнее, придётся делать разбор произвольных функций и их интерпретацию. По сути, сделать динамику собственными руками.

Необязательно, достаточно передавать список переменных, за обновлениями которых нужно следить.
Впрочем, разбор не вызовет особых проблем, если передавать ExpressionTree<Func<T>>.
Re[36]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 12:06
Оценка:
Здравствуйте, Sinix, Вы писали:

C>>Не получится. Точнее, придётся делать разбор произвольных функций и их интерпретацию. По сути, сделать динамику собственными руками.

S>Необязательно, достаточно передавать список переменных, за обновлениями которых нужно следить.
Посмотри пример с Trellis'ом — этот список может динамически меняться.
Sapienti sat!
Re[33]: Скорость JavaScript
От: Klapaucius  
Дата: 19.07.11 12:18
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>как такой пример на статике красиво сделать?


А как такой пример красиво сделать на динамике?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[34]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 12:21
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>как такой пример на статике красиво сделать?

K>А как такой пример красиво сделать на динамике?
http://rsdn.ru/forum/flame.comp/4348289.aspx
Автор: Cyberax
Дата: 19.07.11
Sapienti sat!
Re[37]: Скорость JavaScript
От: Sinix  
Дата: 19.07.11 12:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Посмотри пример с Trellis'ом — этот список может динамически меняться.

Тогда да, только разбор. Ну, или какой-нить AOP.
Re[35]: Скорость JavaScript
От: Klapaucius  
Дата: 19.07.11 12:37
Оценка:
Здравствуйте, Cyberax, Вы писали:

K>>А как такой пример красиво сделать на динамике?

C>http://rsdn.ru/forum/flame.comp/4348289.aspx
Автор: Cyberax
Дата: 19.07.11


И где тут красота?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[36]: Скорость JavaScript
От: Cyberax Марс  
Дата: 19.07.11 12:46
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>>>А как такой пример красиво сделать на динамике?

C>>http://rsdn.ru/forum/flame.comp/4348289.aspx
Автор: Cyberax
Дата: 19.07.11

K>И где тут красота?
Везде Как такое сделать-то на статике? Вопрос не совсем праздный, так как я собираюсь делать подобный фреймворк для Скалы.

К примеру, оно ещё и двустороннее. Т.е. мы можем взять два поля ввода, скажем, градусы в Цельсиях и градусы в Фаренгейтах — и при изменении одного поля пересчитывается другое.
Sapienti sat!
Re[39]: Скорость JavaScript
От: Константин Б. Россия  
Дата: 20.07.11 06:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Константин Б., Вы писали:


КБ>>>>И где такое чудо? O_o В треллисе и нокаут-жсе будут пересчитаны оба.

C>>>Поспорим? В Треллисе будет пересчитано только то, что зависит от изменяемой переменной.
КБ>>Давай
C>No problemo:
  Скрытый текст
C>
C>#!/usr/bin/python

C>from peak.events import trellis

C>def very_complex_function(a, b):
C>    return (a+b)/2

C>class TestContext(trellis.Component):
C>    trellis.attrs(a = 0, b = 5, c=10)

C>    @trellis.perform
C>    def show_values(self):
C>    if (self.a>20):
C>        print "A is greater than 20: %d" % very_complex_function(self.b,self.c)
C>    else:
C>        print "A is less than 20, so: %d" % self.b

C>tc = TestContext()
C>print "Now mutating self.c ..."
C>tc.c = 11 # Ничего не персчитается, мы не зависим от self.c сейчас
C>print "mutated."

C>print "Now mutating self.b ..."
C>tc.b = 12 # А вот от self.b мы зависим - пересчитается
C>print "mutated."

C>print "Now mutating self.a ..."
C>tc.a = 21 # Теперь зависим от b и c.
C>print "mutated."

C>print "Now mutating self.c ..."
C>tc.c = 5 # Так что СЕЙЧАС оно пересчитается
C>print "mutated."
C>


C>Вывод:

C>
C>A is less than 20, so: 5
C>Now mutating self.c ...
C>mutated.
C>Now mutating self.b ...
C>A is less than 20, so: 12
C>mutated.
C>Now mutating self.a ...
C>A is greater than 20: 11
C>mutated.
C>Now mutating self.c ...
C>A is greater than 20: 8
C>mutated.
C>


C>Установка Trellis'а делается так:

C>
C>easy_install --user svn://svn.eby-sarna.com/svnroot/DecoratorTools/
C>easy_install --user svn://svn.eby-sarna.com/svnroot/Trellis/
C>


Понял в чем жульничество %) При каждом вычислении он запоминает к каким атрибутам было обращение. На шарпе можно сделать точно так же.
Re[40]: Скорость JavaScript
От: Cyberax Марс  
Дата: 20.07.11 09:54
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>Понял в чем жульничество %) При каждом вычислении он запоминает к каким атрибутам было обращение. На шарпе можно сделать точно так же.

Ну да. На Шарпе такое сделать не очень просто — нужно статически заранее делать инструментацию всех классов. В JS с этим проще — все объекты можно в рантайме заменять на прокиски.
Sapienti sat!
Re[41]: Скорость JavaScript
От: Константин Б. Россия  
Дата: 20.07.11 10:04
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Константин Б., Вы писали:


КБ>>Понял в чем жульничество %) При каждом вычислении он запоминает к каким атрибутам было обращение. На шарпе можно сделать точно так же.

C>Ну да. На Шарпе такое сделать не очень просто — нужно статически заранее делать инструментацию всех классов. В JS с этим проще — все объекты можно в рантайме заменять на прокиски.

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