Re[35]: html5
От: Mamut Швеция http://dmitriid.com
Дата: 26.07.11 12:45
Оценка:
WH>>>Все равно будет тонна синтаксического оверхеда.
M>>Не обязательно
WH>Практика показывает что обязательно.

WH>>>И не будет нормальных проверок.

M>>Теперь полключаем твою любимую статику и?
WH>Как? У нас компилятора то нет.

Блин. Причем тут компилятор???? Берешь в руки GWT — у тебя генерируется HTML+JS. Добавляешь к нему reactivejava, у тебя есть реактивность. Да еще и со столь любимой тобой статикой


M>>Каша там только в твоей голове. А делает этот код, если я не ошибаюсь, то же самое (с разными интервалами выводит на странице текст).

WH>Каша там в коде.
WH>У Гапертона два калбека в то время как в оригинале 0.

В оригинале там Buffer.write, как минимум


M>>Особой разницы с Ur'ом нет.

WH>Куча лишнего кода на ровном месте это конечно ерунда.
M>>Единственная «разница» в том, что не явно отправляются сообщения, а вызывается Buffer.write и Buffer.render
WH>Buffer.render вызывается один раз.
WH>Дальше всю работу делает реактивность.

Которая где-то там упрятана в недрах Ur'а. И? Тебе написать обертку над достаточно низкоуровневым кодом Гапертона религия не позволяет?

M>>Пример, описанный Гапертоном более низкоуровневый, что не мешает ео уложить в настолько же прямолинейную обертку

WH>Ну попробуй.

runWorkerJS взят отсюда: https://gist.github.com/989438. Код там страшный, потому что в W3C, как всегда, придумали какую-то хрень Код не тестировался, так, для иллюстрации идеи.
/*
 *  Wrapper
 */
var workerCode = function( a_event ){
    var count = 0;

    setInterval( function(){
        postMessage( a_event.data.prefix + ' ' + count++ );
    }, a_event.data.delay );
    
};

var workerWrapper = function(){
    return {
        start: function(prefix, delay){
            var code = "self['onmessage'] = " + workerCode.toString();
            runWorkerJs(code, {prefix: prefix, delay: delay}, this.write)
        },
        write: function(text){
            document.write(result);
        }        
    }
};

/*
 *  Code
 */

workerWrapper().start("A", 5000);
workerWrapper().start("B", 5000);



Достаточно generic обертка будет выглядеть, естественно, по-другому. По сути, runWorkerJs уже достаточно.

M>>И ты еще утверждаешь, что это гуано лучше, чем полноценная многозадачность, которую привел Gaperton?

WH>Это "гуано" позволяет писать прямолинейный код без кучи каллбеков.

Который не будет работать чуть более, чем во всех реальных случаев из-за реализации, но это е тебя не волнует, так ведь

M>>И ты еще утверждаешь, что ее же невозможно реализовать средствами JS?

WH>Без тонный синтаксического оверхеда не получится.

Ну да, я помню, что такое твой синтаксичесий оверхед. Скобочки там, ага


M>>То есть, внятно объяснить, что именно тебе надо, ты не в состоянии.

WH>То есть ты не в состоянии посмотреть на то, как работает ур?

Смотрю я на Ur. Конкретно в данный момент я смотрю на threads. Ничего сверхъестественного там нет. Ну сахар и сахар Пишешь тонкий враппер над Гапертоновским кодом и радуешься жизни. Если то вообще надо...
Смотрю на ListEdit. Ну, сигналы/слоты Вау. Это и есть реактивность? А, нет, наверное «реактивность» это установка значений вручную вот так:
<button value="Change to:" onclick={s <- get ss'; set ss s}/>


О да, это — верх программерской мысли

Смотрю на <a href="http://www.impredicative.com/ur/more/dragList.html">dragList</a>, там чем дальше, тем реактивнее, ага
<li onmousedown={set draggingItem (Some itemSource)}
              onmouseup={set draggingItem None}
              onmouseover={di <- get draggingItem;
                           case di of
                               None => return ()
                             | Some di => original <- get di;
                               movedOver <- get itemSource;
                               set di movedOver;
                               set itemSource original;
                               set draggingItem (Some itemSource)}>
              <dyn signal={Monad.mp cdata (signal itemSource)}/>
         </li></xml>


Вся «реактивность» заключается в сахаре над signal/slots

И этот человек мне говорит, что вот это вот нельзя реализовать в библиотеке для любого серверного языка? Ах, да, signal/slot есть и для JS. Правда, для тебя он будет слишком многословным, видать.


WH>Ну посмотри на knockuot.js там реактивность правильная.

WH>Но с кучей синтаксического оверхеда.

Его не так много, чтобы этого кого-либо парило, кроме тебя

M>>Напомню контекст. Ты утверждал, что сделать что-то, что делает Ur, билиотекой невозможно. Оказалось, что не только возможно, но и делают. Единственный твой аргумент — это «синтаксический оверхед»

WH>Так это единственный смысл существования яву.
WH>Есть лишь один способ сравнить уровень языков это сравнить сколько кода будет написано при решении одной и той же задачи.

Самый крутой — мой язык. Там есть одна функция, «сделатьОхрененно()» Я частично согласен с тобой в определении, до тех пор пока это не превращается в абсурд. Потому что бесспорным победителем (на определенном классе задач) выйдет какой-нибудь J.


M>>Внятно объяснить, что именно тебе надо, ты не в состоянии. Хотя — нет, можешь даже не утруждать себя. Тебе надо, чтобы оно выглядело, как Ur, вело себя,к ак Ur, и до последней запятой содержало абсолютно точно такое же количество букв, как Ur.

WH>Аргументы совсем кончились.

У тебя — да. Почему реактивнотсь для GWT — это не то, ты так и не объяснил.
Почему невозможно реализовать библиотекой (на Java/C++/Python/Ruby/хрен знает что там еще) то, что реализует Ur, ты так и не объяснил. Твой единственный «аргумент» — это «Без компилятора не получится».


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.