Re[9]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 19.07.11 16:23
Оценка:
Здравствуйте, TK, Вы писали:

TK>>>В случае с canvas в первую очередь важна скорость рендеринга — это делается браузером.

G>>А в случае с WebGL ты тоже считаешь, что "это делается браузером"?

TK>Ну, мы же не будем опускаться до того, что рендеринг делается видео-картой?


Почему бы не "опуститься" до того, как в реальности обстоят вещи? При рендеринге canvas, так же как и OpenGL, тебе не надо layout выполнять как это делается для DOM. И "рендеринг" делается именно что видеокартой (пробросом вызовов сквозь API). И скорость рендеринга canvas ограничена в первую очередь скоростью выдачи примитивов, которая в свою очередь, в настоящее время ограничена JavaScript-ом.
Re[12]: html5
От: Евгений Акиньшин grapholite.com
Дата: 19.07.11 16:49
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Евгений Акиньшин, Вы писали:


ЕА>>Угу, как будто мало других вещей, которые не могут быть разрулены кроме как административно, так мы еще и за компьютеры работу делать будем — для удобства


G>У тебя и в статически типизированном языке надо "разруливать" эту вещь административно. Точно также.


Да пока не приходилось , никто пока не догадался в .net поведение базовых типов из вне угробить
Не шалю, никого не трогаю, починяю примус Diagrams Designer for iPad and Windows 10
Re[10]: html5
От: WolfHound  
Дата: 19.07.11 17:12
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Для JS она, разумеется, тоже есть, и наличествует, например, в Google Closure Compiler. И никаких фундаментальных проблем делать это для динамических языков не существует.

Те превращаем динамически типизированный язык в статически типизированный?
А не проще сразу нормальный статически типизированный язык взять?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[8]: html5
От: WolfHound  
Дата: 19.07.11 17:24
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Валяй, затипизируй в своем любимом Хиндли-Милнере от природы динамические DOM-деревья. Паржом.

Они не от природы динамически типизированные.
А от глупости их создателей.

G>И покажи, чем pattern-matching будет в работе с ними удобнее, чем типичные для JS, насквозь динамические селекторы вида $('.node').

Хочешь сказать что я не смогу типизировать селекторы?

Может ты покажешь задачу где нужна динамическая типизация?
А то я только одно применение знаю. Динамическая загрузка кода. Но и тут достаточно одной проверки при загрузке этого кода, а дальше опять статика пошла.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: html5
От: TK Лес кывт.рф
Дата: 19.07.11 17:45
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Почему бы не "опуститься" до того, как в реальности обстоят вещи? При рендеринге canvas, так же как и OpenGL, тебе не надо layout выполнять как это делается для DOM. И "рендеринг" делается именно что видеокартой (пробросом вызовов сквозь API). И скорость рендеринга canvas ограничена в первую очередь скоростью выдачи примитивов, которая в свою очередь, в настоящее время ограничена JavaScript-ом.


Не все так просто... Вызовы canvas можно немедленно транслировать в вызовы API, а можно их накапливать в буфере и рендерить в фоне, script может работать в одном процессе, а рендеринг в другом... Один canvas может отрисовываться поверх другого... Мест, где можно добавить зависимость от браузера полно.

Если же вернуться к начальному топику — практически у всех современных скриптовых языков (JS, AS, C# и т.п) есть JIT и тому подобная ерунда. т.е. в худшем случае, скорость генерации "примитивов" будет у всех примерно одинаковой. А вот для рендеринга/лейаута подобной сходимости пока не видно...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[11]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 07:37
Оценка:
Здравствуйте, TK, Вы писали:

G>>Почему бы не "опуститься" до того, как в реальности обстоят вещи? При рендеринге canvas, так же как и OpenGL, тебе не надо layout выполнять как это делается для DOM. И "рендеринг" делается именно что видеокартой (пробросом вызовов сквозь API). И скорость рендеринга canvas ограничена в первую очередь скоростью выдачи примитивов, которая в свою очередь, в настоящее время ограничена JavaScript-ом.


TK>Не все так просто... Вызовы canvas можно немедленно транслировать в вызовы API, а можно их накапливать в буфере и рендерить в фоне, script может работать в одном процессе, а рендеринг в другом... Один canvas может отрисовываться поверх другого... Мест, где можно добавить зависимость от браузера полно.


Это все частности и мелочи. Неважно.

TK>Если же вернуться к начальному топику — практически у всех современных скриптовых языков (JS, AS, C# и т.п) есть JIT и тому подобная ерунда. т.е. в худшем случае, скорость генерации "примитивов" будет у всех примерно одинаковой.


Для JS и C# она, естественно, не одинакова. JS медленнее, а еще несколько лет назад он был медленнее раз эдак в 100. Тебе именно об этом выше по ветке собеседник говорит. Он тебе какбэ намекает.

TK> А вот для рендеринга/лейаута подобной сходимости пока не видно...


Отрисовка контента canvas в точных координатах имеет очень мало общего с лейаутом страницы, при котором этих координат нет, и надо определить размеры и взаимное расположение элементов.
Re[9]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 07:54
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>Валяй, затипизируй в своем любимом Хиндли-Милнере от природы динамические DOM-деревья. Паржом.

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

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

G>>И покажи, чем pattern-matching будет в работе с ними удобнее, чем типичные для JS, насквозь динамические селекторы вида $('.node').

WH>Хочешь сказать что я не смогу типизировать селекторы?

Которые селектят динамический DOM? Для начала тебе придется затипизировать DOM (см. выше). Но я хочу сказать не это, а ровно то, что я сказал. Странно, что ты ищешь какой-то подтекст в простом вопросе.

Покажи, чем pattern-matching будет в работе с ними удобнее, чем типичные для JS, насквозь динамические селекторы вида $('.node'). Мне страшно любопытно.

WH>Может ты покажешь задачу где нужна динамическая типизация?


Я тебе ее показываю. Это работа с отрисовкой веб-страницы и сетью в браузере.

WH>А то я только одно применение знаю. Динамическая загрузка кода. Но и тут достаточно одной проверки при загрузке этого кода, а дальше опять статика пошла.


Динамика выгодна тогда, когда у тебя данные от природы динамические. Это, например, сетевой обмен, и работа с слабоструктурированными данными, вроде DOM-деревьев.

Когда в задаче доминирует работа со слабоструктурированными данными, выгодна "динамическая" семантика по умолчанию, и опциональная статическая типизация.
Re[11]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 07:58
Оценка:
Здравствуйте, WolfHound, Вы писали:

G>>Для JS она, разумеется, тоже есть, и наличествует, например, в Google Closure Compiler. И никаких фундаментальных проблем делать это для динамических языков не существует.

WH>Те превращаем динамически типизированный язык в статически типизированный?

Не совсем так. Семантика все-таки динамическая, суть soft type system в том, что ты ограничиваешь множество возможных вариантов типов для каждого случая настолько сильно, насколько это нужно.

WH>А не проще сразу нормальный статически типизированный язык взять?


Да в общем, нет, не проще. С soft type system ты можешь очень гибко варьировать "строгость" проверок типов по месту. Хочешь — ничего не ограничил. Хочешь — по самое небалуйся утипизировал. Это удобно. Это в использовании удобнее, например, generic-ов.

Но по сути разница между статикой и динамикой этими штуками нивелируется, это да. Настолько, что спорить об этом не имеет смысла.
Re[13]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 07:59
Оценка:
Здравствуйте, Евгений Акиньшин, Вы писали:

ЕА>>>Угу, как будто мало других вещей, которые не могут быть разрулены кроме как административно, так мы еще и за компьютеры работу делать будем — для удобства


G>>У тебя и в статически типизированном языке надо "разруливать" эту вещь административно. Точно также.


ЕА>Да пока не приходилось , никто пока не догадался в .net поведение базовых типов из вне угробить


А это, меж тем, в последних редакциях C# сделать при желании можно.
Re[14]: html5
От: Sinix  
Дата: 20.07.11 08:08
Оценка:
Здравствуйте, Gaperton, Вы писали:

ЕА>>Да пока не приходилось , никто пока не догадался в .net поведение базовых типов из вне угробить

G>А это, меж тем, в последних редакциях C# сделать при желании можно.
Эмм?
class A
{
  public object GetTheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything()
  {
    Thread.Sleep(TimeSpan.FromYears(7.5 * 1000 * 1000));
    return 42;
  }
}

class B
{
  static void DoSomething(A a)
  {
    object something = a.GetTheAnswerToTheUltimateQuestionOfLifeTheUniverseAndEverything();
    // Итак, как нам тут получить нечто, отличное от 42?
  } 
}
Re[12]: html5
От: TK Лес кывт.рф
Дата: 20.07.11 08:14
Оценка:
Здравствуйте, Gaperton, Вы писали:

TK>>Не все так просто... Вызовы canvas можно немедленно транслировать в вызовы API, а можно их накапливать в буфере и рендерить в фоне, script может работать в одном процессе, а рендеринг в другом... Один canvas может отрисовываться поверх другого... Мест, где можно добавить зависимость от браузера полно.


G>Это все частности и мелочи. Неважно.


Можно сравнить бенчмарки для FF 3.6 и FF 4.0:
http://javierb.com.ar/2011/03/24/firefox4-benchmark/v8benchmark/ vs http://javierb.com.ar/2011/03/24/firefox4-benchmark/v8benchmark/ С одной стороны видно, что производительность JS выросла в 10раз что, дало 1FPS на отрисовку... Тогда как Chrome со сравнимым JS движком имеет в 2 раза больше FPS. Может все таки не в JS дело?

G>Для JS и C# она, естественно, не одинакова. JS медленнее, а еще несколько лет назад он был медленнее раз эдак в 100. Тебе именно об этом выше по ветке собеседник говорит. Он тебе какбэ намекает.


Собеседник выше говорит, что Google V8 невероятно быстр — для Веб-приложений такой скорости вполне достаточно.. А кто с ним спорит?

G>Отрисовка контента canvas в точных координатах имеет очень мало общего с лейаутом страницы, при котором этих координат нет, и надо определить размеры и взаимное расположение элементов.


Если отрисовка контента это такая ерунда то, почему оно так часто тормозит?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[10]: html5
От: WolfHound  
Дата: 20.07.11 08:20
Оценка:
Здравствуйте, Gaperton, Вы писали:

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

Я знаю, что я умнее.

G>Которые селектят динамический DOM? Для начала тебе придется затипизировать DOM (см. выше). Но я хочу сказать не это, а ровно то, что я сказал. Странно, что ты ищешь какой-то подтекст в простом вопросе.

Ошибка была совершена в тот момент, когда сделали динамическим ДОМ.
Пока ее не исправить все навороты будут только ухудшать положение.

G>Я тебе ее показываю. Это работа с отрисовкой веб-страницы и сетью в браузере.

Ни для того ни для другого динамическая типизация не нужна.
Вот, например: http://www.impredicative.com/ur/demo/
Ничего не мешает сделать синтаксис более человечным и засунуть это в браузер.
Как видишь все статически типизировано.
И кода получается меньше чем на HTML+JS+CSS.

G>Динамика выгодна тогда, когда у тебя данные от природы динамические.

Такого не бывает. Никогда.

G>Это, например, сетевой обмен, и работа с слабоструктурированными данными, вроде DOM-деревьев.

И? На одном конце мы сериализуем типизированные данные и на другом десериализуем.
Типы проверяются только в момент загрузки.
Зачем тут динамика?

G>Когда в задаче доминирует работа со слабоструктурированными данными, выгодна "динамическая" семантика по умолчанию, и опциональная статическая типизация.

Таких задач не существует.
Есть решения созданные не от большого ума.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[12]: html5
От: WolfHound  
Дата: 20.07.11 08:25
Оценка:
Здравствуйте, Gaperton, Вы писали:

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

Остается один очень существенный момент.
В случае с нормальной статикой я имею гарантии.
В случае с этой байдой ничего не гарантировано и как следствие все проблемы динамики остаются.
Например, стандартный паттерн рефакторинга кода на статически типизированном языке: поменять сигнатуру и пройтись по ошибкам компилятора.
Работать не будет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: html5
От: Sinix  
Дата: 20.07.11 08:36
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Ошибка была совершена в тот момент, когда сделали динамическим ДОМ.

Не для холивара. Как можно добиться
1) Проверки DOM-а на этапе компиляции кода
2) Сохранив возможность произвольно изменять документ, не привлекая программистов
?

Единственный вариант, что я вижу — явно описывать используемые куски документа (необязательно прямо в в документе, достаточно аналога xsd). Но такой подход будет отвратительно уживаться с "живыми" документами, содержимое которых будет зависеть от внешних данных. Получается, что описание схемы сначала начнёт смешиваться с логикой, затем появятся проверки аля
if (reportData.Detailed) { reportDOM.DetailsSection ... }

и в конце-концов мы получим нечто среднее между ExpressionTree шарпа и VisualTree WPF: всё вроде бы и типизированно, но разбирать — удовольствие ниже среднего.

Что упустил?
Re[15]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 08:50
Оценка:
Здравствуйте, Sinix, Вы писали:

ЕА>>>Да пока не приходилось , никто пока не догадался в .net поведение базовых типов из вне угробить

G>>А это, меж тем, в последних редакциях C# сделать при желании можно.
S>Эмм?

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

А вот сломать при этом поведение даже в JS надо еще постараться.
Re[13]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 08:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


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

WH>Остается один очень существенный момент.
WH>В случае с нормальной статикой я имею гарантии.

До тех пор, пока не пользуешься типом Object и "динамиками".

WH>В случае с этой байдой ничего не гарантировано и как следствие все проблемы динамики остаются.


В случае с этой "байдой" тебе точно так же, как и в статике, 100% гарантированно, что программа соответствует тайп-констрейнтам, которые ты указал.

WH>Например, стандартный паттерн рефакторинга кода на статически типизированном языке: поменять сигнатуру и пройтись по ошибкам компилятора.

WH>Работать не будет.

Естественно будет. И работает. С чего б ему не работать-то?

Кроме того, стандартный паттерн рефакторинга в динамике другой. Поменять сигнатуру, и пройтись по ошибкам юнит-тестов. Это более надежный "паттерн рефакторинга".
Re[12]: html5
От: WolfHound  
Дата: 20.07.11 08:57
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Не для холивара. Как можно добиться

S>1) Проверки DOM-а на этапе компиляции кода
А в чем проблема?

S>2) Сохранив возможность произвольно изменять документ, не привлекая программистов

Такого не бывает.

S>Единственный вариант, что я вижу — явно описывать используемые куски документа (необязательно прямо в в документе, достаточно аналога xsd). Но такой подход будет отвратительно уживаться с "живыми" документами, содержимое которых будет зависеть от внешних данных. Получается, что описание схемы сначала начнёт смешиваться с логикой, затем появятся проверки аля

Re[2]: Веб фрэймворк для Nemerle
Автор: WolfHound
Дата: 14.02.11

Re[3]: Веб фрэймворк для Nemerle
Автор: WolfHound
Дата: 15.02.11


S>Что упустил?

То, что изначально нужно проектировать с умом, а не делать как все.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: html5
От: WolfHound  
Дата: 20.07.11 09:27
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>До тех пор, пока не пользуешься типом Object и "динамиками".

Я ими не пользуюсь.

G>В случае с этой "байдой" тебе точно так же, как и в статике, 100% гарантированно, что программа соответствует тайп-констрейнтам, которые ты указал.

Проблема в том, что их можно и не указать.
А если их указывать везде, то я уж лучше нормальный язык возьму.

G>Кроме того, стандартный паттерн рефакторинга в динамике другой. Поменять сигнатуру, и пройтись по ошибкам юнит-тестов. Это более надежный "паттерн рефакторинга".

1)Юнит тесты ошибки не ловят. Они могут поймать только регрессию.
2)Ты веришь в 100% покрытие? Ну-ну.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: html5
От: WolfHound  
Дата: 20.07.11 09:30
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Насколько я припоминаю, можно насовать "расширяющих методов" куда угодно. Точно так же, как надобавлять своих методов в прототипы базовых типов в JS. И точно так же, программист-рукосуй получит в команде за это по рукам, независимо от того, C# это или JS.

Методы расширения это чистый сахар для вызова статических методов.
И если случится конфликт то будет ошибка компиляции.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: html5
От: Gaperton http://gaperton.livejournal.com
Дата: 20.07.11 09:33
Оценка: 1 (1)
Здравствуйте, WolfHound, Вы писали:

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

WH>Я знаю, что я умнее.

Не совсем так. Ты уверен, что другие идиоты. Это не одно и то же.

G>>Которые селектят динамический DOM? Для начала тебе придется затипизировать DOM (см. выше). Но я хочу сказать не это, а ровно то, что я сказал. Странно, что ты ищешь какой-то подтекст в простом вопросе.

WH>Ошибка была совершена в тот момент, когда сделали динамическим ДОМ.
WH>Пока ее не исправить все навороты будут только ухудшать положение.

Правильно-ли я понял, что ты не можешь показать, как затипизировать DOM в Хиндли-Милнере?

Правильно-ли я понимаю, что вырезанный тобой мой вопрос, который я задал дважды (про то, чем pattern-matching лучше JS-ный селекторов), означает, что ты не в состоянии дать на него ответ?

G>>Я тебе ее показываю. Это работа с отрисовкой веб-страницы и сетью в браузере.

WH>Ни для того ни для другого динамическая типизация не нужна.

См. выше. Голословные утверждения надоели. Сколько не повторяй "халва", слаще во рту не станет.

WH>Вот, например: http://www.impredicative.com/ur/demo/

WH>Ничего не мешает сделать синтаксис более человечным и засунуть это в браузер.
WH>Как видишь все статически типизировано.
WH>И кода получается меньше чем на HTML+JS+CSS.

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

Сгенерить аналогичный гуй внутри браузера, воспользовавшись современным JS фреймворком вроде ExtJS, будет куда проще. И кода получится меньше.

G>>Динамика выгодна тогда, когда у тебя данные от природы динамические.

WH>Такого не бывает. Никогда.

Любое распределенное приложение (например, работающее с enterprise bus), имеет дело именно с от природы такими данными. Такая ситуация возникает при любом интеропе, где задействован тегированный формат передачи данных.

G>>Это, например, сетевой обмен, и работа с слабоструктурированными данными, вроде DOM-деревьев.

WH>И? На одном конце мы сериализуем типизированные данные и на другом десериализуем.
WH>Типы проверяются только в момент загрузки.
WH>Зачем тут динамика?

Раздербанивая мой текст на абзацы, ты лишаешь себя возможности понять, что я хочу тебе сказать (а это, меж тем, очень простые вещи). Мне приходится повторять по двадцать раз одно и то же. Надоело.

G>>Когда в задаче доминирует работа со слабоструктурированными данными, выгодна "динамическая" семантика по умолчанию, и опциональная статическая типизация.

WH>Таких задач не существует.

Ты не веришь в существование слабоструктурированных данных? Забавно.

WH>Есть решения созданные не от большого ума.


Заканчиваем тем, с чего начали. Тебе кажется, что вера в то, что вокруг идиоты, должна автоматически означать, что ты сам большого ума. Это очень забавно.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.