Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Курилка, Вы писали:
К>>Пример, безусловно, надуманный, но используется особенность задачи, т.е. относительно короткие, но частые запросы (т.е. для другого рода приложений потребуется отдельное решение, в отличие от общего решения в случае эрланга).
AVK>Так вот интересуют то именно практические моменты, а не надуманные примеры. И засада здесь не с языком, а с единицей деплоймента.
сейчас в вебе широко используется стриминг.
так вот, если процесс, который формирует поток (скажем Video или это XML-поток, или это докачка файла...), не закрывает соединение, и не получает новых запросов, а просто фигачит в OUTPUT что-то. но в какой-то момент,
власть поменялась и фигачить нужно уже "с другими загогулинами", например, с другой пред-обработкой видео или по-другому читать файл, который фигачить и т.п.
в такой ситуации правильнее разделять того, кто фигачит поток и того, кто его предоставляет.
таким образом, замена провайдера (того, кто предоставляет) произойдет более или менее прозрачно для исходящего потока, и замена сборки тут не нужна.
..Правда если речь идет не об одной задаче, а о множестве компонентов, которые мало знают друг о друге,
и далеко не все знают о том, что какие-то другие могут поменяться...
то тут возникает множество частных решений, ненужных усложнений и мусор в памяти
и это не проблема того, как написана программа, а проблема общей инфраструктуры, в которой нельзя динамически замещать куски программы.
.NET этим страдает — статическая среда для удобства компиллятора
(это обсуждать наверное не нужно, что бы избежать флейма, просто мое мнение)
Здравствуйте, Andrey_Pilya, Вы писали:
A_P>в такой ситуации правильнее разделять того, кто фигачит поток и того, кто его предоставляет. A_P>таким образом, замена провайдера (того, кто предоставляет) произойдет более или менее прозрачно для исходящего потока, и замена сборки тут не нужна.
Что то я шутки не уловил. Предполагается, что кто то будет править код сайта в момент скачки видео?
Ну и с незакрываемым соединением — с масштабируемостью у такого подхода траблы.
A_P>и это не проблема того, как написана программа, а проблема общей инфраструктуры, в которой нельзя динамически замещать куски программы.
А главное, к языку это совсем не имеет отношения.
A_P>.NET этим страдает — статическая среда для удобства компиллятора
.NET как раз таки динамический. Но строго типизированный. Не путай два ортогональных понятия.
... << RSDN@Home 1.2.0 alpha 4 rev. 1127 on Windows Vista 6.0.6001.65536>>
AndrewVK,
AVK>Ну и что? Во-первых какое это имеет отношение к типизации, если сей процесс принципиально происходит в рантайме и выходит за рамки контроля компилятора, а во-вторых нафига нужна эта мегафича?
Хотя бы для этого: 12 min video
Чтобы это было возможно (это = сохранение остальных коннекшнов, процессов и данных в прежнем состоянии), нужна довольно маленькая гранулярность.
Можно провести параллель между фотографией и снапшотом процесса.
Пусть на фотографии мы пытаемся заменить красные зрачки на нормальные. Если гранулы достаточно маленькие, то мы легко заменяем оттенки красного на оттенки чёрного цвета в указанной маленькой области — и все дела.
Но если гранулы достаточно большие, то например замена красного цвета на левом зрачке вызовет посинение левой половины лица и потемнение уха, а жёлтые листочки на фоне станут тёмно-зелёными. Фотография (то есть состояние процесса) будет убита.
z00n,
К>>Ты же фактически говоришь на самом деле о "ручной" типизации, которую обязательно должен делать программист.
Z>Вот пример D.Mon-а. Как бы вы избавились бы от тегов? Z>
...
Я полагаю, что речь идёт о такой задаче: сначала у нас есть просто дерево символов
А теперь мы говорим — у нас while, less и do имеют тип "оператор", getb и inc имеют тип "функция", а r0 и т.п. — "переменная". И потом хотим проехаться по такому дереву и чего-нибудь умное сделать.
Хотя решение в-общем-то тривиально, достаточно одного дополнительного применения foldts, переводящего скажем элемент while в '(op while), и получить
Да и явно создавать это дерево не нужно, достаточно во время траверса по исходному дереву просто вызывать функцию elem -> '(tag elem) перед обработкой элемента.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Можно провести параллель между фотографией и снапшотом процесса. LCR>Пусть на фотографии мы пытаемся заменить красные зрачки на нормальные. Если гранулы достаточно маленькие, то мы легко заменяем оттенки красного на оттенки чёрного цвета в указанной маленькой области — и все дела. LCR>Но если гранулы достаточно большие, то например замена красного цвета на левом зрачке вызовет посинение левой половины лица и потемнение уха, а жёлтые листочки на фоне станут тёмно-зелёными. Фотография (то есть состояние процесса) будет убита.
Что такое гранулярность я в курсе, не надо объяснять. Мне непонятна связь гранулярности и возможности на ходу, по живому, править любой существующий код, связь этой фичи со статической типизацией языка, и практическое ее применение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1127 on Windows Vista 6.0.6001.65536>>
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
К>>>Ты же фактически говоришь на самом деле о "ручной" типизации, которую обязательно должен делать программист.
Z>>Вот пример D.Mon-а. Как бы вы избавились бы от тегов? Z>>
...
LCR>Я полагаю, что речь идёт о такой задаче: сначала у нас есть просто дерево символов LCR>
LCR>'(while (less r0 (getb p2))
LCR>...
LCR>
LCR>А теперь мы говорим — у нас while, less и do имеют тип "оператор", getb и inc имеют тип "функция", а r0 и т.п. — "переменная". И потом хотим проехаться по такому дереву и чего-нибудь умное сделать.
Интересная гипотеза, но поскольку тут теги есть изначально — наверное имели в виду что-то другое
Здравствуйте, AndrewVK, Вы писали:
AVK>Реализуемо. ASP.NET, к примеру, вполне справляется. Это фича рантайма, а не языка.
А разве при этом всё web приложение не перегружается?