Re[8]: Назначение динамических языков
От: Andrey_Pilya  
Дата: 17.12.08 11:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Курилка, Вы писали:


К>>Пример, безусловно, надуманный, но используется особенность задачи, т.е. относительно короткие, но частые запросы (т.е. для другого рода приложений потребуется отдельное решение, в отличие от общего решения в случае эрланга).


AVK>Так вот интересуют то именно практические моменты, а не надуманные примеры. И засада здесь не с языком, а с единицей деплоймента.


сейчас в вебе широко используется стриминг.
так вот, если процесс, который формирует поток (скажем Video или это XML-поток, или это докачка файла...), не закрывает соединение, и не получает новых запросов, а просто фигачит в OUTPUT что-то. но в какой-то момент,
власть поменялась и фигачить нужно уже "с другими загогулинами", например, с другой пред-обработкой видео или по-другому читать файл, который фигачить и т.п.

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

..Правда если речь идет не об одной задаче, а о множестве компонентов, которые мало знают друг о друге,
и далеко не все знают о том, что какие-то другие могут поменяться...
то тут возникает множество частных решений, ненужных усложнений и мусор в памяти
и это не проблема того, как написана программа, а проблема общей инфраструктуры, в которой нельзя динамически замещать куски программы.

.NET этим страдает — статическая среда для удобства компиллятора
(это обсуждать наверное не нужно, что бы избежать флейма, просто мое мнение)
Re[9]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.12.08 00:39
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[12]: Назначение динамических языков
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 18.12.08 15:41
Оценка:
AndrewVK,

AVK>Ну и что? Во-первых какое это имеет отношение к типизации, если сей процесс принципиально происходит в рантайме и выходит за рамки контроля компилятора, а во-вторых нафига нужна эта мегафича?


Хотя бы для этого: 12 min video
Чтобы это было возможно (это = сохранение остальных коннекшнов, процессов и данных в прежнем состоянии), нужна довольно маленькая гранулярность.

Можно провести параллель между фотографией и снапшотом процесса.
Пусть на фотографии мы пытаемся заменить красные зрачки на нормальные. Если гранулы достаточно маленькие, то мы легко заменяем оттенки красного на оттенки чёрного цвета в указанной маленькой области — и все дела.
Но если гранулы достаточно большие, то например замена красного цвета на левом зрачке вызовет посинение левой половины лица и потемнение уха, а жёлтые листочки на фоне станут тёмно-зелёными. Фотография (то есть состояние процесса) будет убита.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[10]: Назначение динамических языков
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 18.12.08 16:22
Оценка:
z00n,

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


Z>Вот пример D.Mon-а. Как бы вы избавились бы от тегов?

Z>
 ...


Я полагаю, что речь идёт о такой задаче: сначала у нас есть просто дерево символов
'(while (less r0 (getb p2))
    (do
        (inc r3 (getb p2))
        (inc r2 1)))

А теперь мы говорим — у нас while, less и do имеют тип "оператор", getb и inc имеют тип "функция", а r0 и т.п. — "переменная". И потом хотим проехаться по такому дереву и чего-нибудь умное сделать.

Хотя решение в-общем-то тривиально, достаточно одного дополнительного применения foldts, переводящего скажем элемент while в '(op while), и получить
'((op while) ((op less) (var r0) ((func getb) (var p2)))
    ((op do)
        ((func inc) (var r3) ((func getb) (var p2)))
        ((func inc) (var r2) (var l))))

Да и явно создавать это дерево не нужно, достаточно во время траверса по исходному дереву просто вызывать функцию elem -> '(tag elem) перед обработкой элемента.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[13]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.12.08 16:36
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Можно провести параллель между фотографией и снапшотом процесса.

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

Что такое гранулярность я в курсе, не надо объяснять. Мне непонятна связь гранулярности и возможности на ходу, по живому, править любой существующий код, связь этой фичи со статической типизацией языка, и практическое ее применение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1127 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[11]: Назначение динамических языков
От: z00n  
Дата: 19.12.08 10:48
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

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


Z>>Вот пример D.Mon-а. Как бы вы избавились бы от тегов?

Z>>
 ...


LCR>Я полагаю, что речь идёт о такой задаче: сначала у нас есть просто дерево символов

LCR>
LCR>'(while (less r0 (getb p2))
LCR>...
LCR>

LCR>А теперь мы говорим — у нас while, less и do имеют тип "оператор", getb и inc имеют тип "функция", а r0 и т.п. — "переменная". И потом хотим проехаться по такому дереву и чего-нибудь умное сделать.

Интересная гипотеза, но поскольку тут теги есть изначально — наверное имели в виду что-то другое
Re[4]: Назначение динамических языков
От: cadet354 Россия
Дата: 02.02.09 19:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Реализуемо. ASP.NET, к примеру, вполне справляется. Это фича рантайма, а не языка.

А разве при этом всё web приложение не перегружается?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.