Назначение динамических языков
От: busk  
Дата: 13.12.08 10:53
Оценка:
Привет!

Много в последнее время слышу про язык Python от достаточно продвинутых парней. Также много слышу, что будущее за функциональными языками.
Расскажите пожалуйста основное назначение динамических языков и функциональных?
Чем например сочетание ASP.NET + JavaScript уступают им?

спасибо
Re: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 11:51
Оценка:
Здравствуйте, busk, Вы писали:

B>Привет!


B>Много в последнее время слышу про язык Python от достаточно продвинутых парней. Также много слышу, что будущее за функциональными языками.

B>Расскажите пожалуйста основное назначение динамических языков и функциональных?
У любых языков главное назначение — программировать (за исключением всяких брейнфков)
B>Чем например сочетание ASP.NET + JavaScript уступают им?
1. Кому "им"?
2. Зачем сваливать в 1 кучу технологию и язык? Сравниваешь тёплое с мягким?
Ну и Javascript вполне себе динамически типизированный язык (просто динамическим называть некорректно по-моему), а под ASP.Net ты можешь, наверное, и на F# писать (который очень даже функциональный)
Re: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 11:52
Оценка:
Здравствуйте, busk, Вы писали:

B>Привет!


B>Много в последнее время слышу про язык Python от достаточно продвинутых парней. Также много слышу, что будущее за функциональными языками.

Ну и про "будущее":

There is no silver bullet


А если про решение задач, то первейший инструмент программиста — его мозг.
Re: Назначение динамических языков
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.12.08 12:17
Оценка:
Здравствуйте, busk, Вы писали:

B>Чем например сочетание ASP.NET + JavaScript уступают им?


JavaScript и есть динамический и во многом функциональный язык.
Re: Назначение динамических языков
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 13.12.08 14:28
Оценка: 39 (3)
Здравствуйте, busk, Вы писали:

B>Расскажите пожалуйста основное назначение динамических языков и функциональных?

B>Чем например сочетание ASP.NET + JavaScript уступают им?

Динамические языки типа Питона и Руби часто позволяют записать решение задачи очень лаконично, но при этом читаемо. Сочетание такой лаконичности и хорошей стандартной библиотеки позволяют сократить время разработки небольших проектов примерно втрое по сравнению с С++/Java.
При этом у них есть две особенности: низкая скорость работы и тот факт, что многие ошибки, которые в статически типизированных языках поймал бы компилятор, тут проявляются уже во время исполнения. Соответственно, если программа не совсем тривиальная, то приходится прилагать много усилий на покрытие ее тестами, что тоже требует времени и сил. Соответственно, назначение — области, где скорость работы не самое важное (как многие web-приложения, где все упирается в скорость базы данных) и где важна быстрота и гибкость разработки.
Кроме того, гибкий синтаксис некоторых из них очень хорош для создания DSL'ей. На мой взгляд, тут Руби вне конкуренции.


Функциональные языки в большинстве своем строго типизированы, причем даже более строго, чем традиционные императивные, что позволяет сильно уменьшить число багов и необходимость в отладке. Плюс, такие языки обычно имеют вывод типов и ряд интересных концепций, за счет которых происходит выигрыш по объему исходников и времени разработки. Они сложнее для изучения и понимания, что делает их менее читаемыми для обычных программеров. Соответственно, назначение — области, где важна корректность программ и алгоритмов, всевозможные исследования и эксперименты.

Частенько про ФЯ говорят в аспекте их хорошей параллелизуемости, но на практике этот аспект мало где реализован и используется, он пока больше теоретический.
Re: Назначение динамических языков
От: nikov США http://www.linkedin.com/in/nikov
Дата: 13.12.08 18:47
Оценка:
Здравствуйте, busk, Вы писали:

B>Расскажите пожалуйста основное назначение динамических языков и функциональных?


Вот я, честно говоря, не вижу никаких преимуществ у динамических языков перед языками со статической типизацией, поддерживающими вывод типов и structural typing (например, Scala). Если мне кто-то их укажет, я буду очень благодарен.
Re[2]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 19:10
Оценка:
Здравствуйте, nikov, Вы писали:

N>Вот я, честно говоря, не вижу никаких преимуществ у динамических языков перед языками со статической типизацией, поддерживающими вывод типов и structural typing (например, Scala). Если мне кто-то их укажет, я буду очень благодарен.


Может не очень важный аргумент, но всёж: как ты себе представляешь статически типизируемые shell-скрипты?
Также, наверное, можно вспомнить горячую замену кода на эрланге, хотя, возможно, для языка со статической типизацией это реализуемо, но эквивалента я не знаю.
Re[3]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.12.08 19:20
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Может не очень важный аргумент, но всёж: как ты себе представляешь статически типизируемые shell-скрипты?


В чем конкретно проблема?

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


Реализуемо. ASP.NET, к примеру, вполне справляется. Это фича рантайма, а не языка.
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[4]: Назначение динамических языков
От: anonymous Россия http://denis.ibaev.name/
Дата: 13.12.08 19:32
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

К>>Может не очень важный аргумент, но всёж: как ты себе представляешь статически типизируемые shell-скрипты?

AVK>В чем конкретно проблема?

Тут даже 2 проблемы. Во-первых, за время написания кода тип переменной может несколько раз измениться. Это конечно решается на этапе проектирования, но кто будет всерьёз проектировать скрипты, тут важна скорость написания кода. Во-вторых, за время работы скрипта может несколько раз измениться тип значения переменной. Например, получили мы в качестве аргумента некоторое строковое значение и хотим произвести над ним некоторые арифметические операции. То что мы можем работать с той же переменной, существенно сокращает объём кода.

Проблемы со статически типизированными скриптами как бы нет, но динамическая типизация тут просто удобнее.
Re[4]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 19:36
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


К>>Может не очень важный аргумент, но всёж: как ты себе представляешь статически типизируемые shell-скрипты?


AVK>В чем конкретно проблема?


Скорей всего в скорости и удобстве написания, хотя принципиальных проблем, скорее всего нет.

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


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


И там можно подменить dll, код которой выполняется процессом?
Скажем, вебсервер выдаёт в течении полуминуты очень длинную страницу из последовательности цифры, которая задана в dll. Скажем в старой dll это была 1, в новой — 2. Можно ли получить ...111112222... и если да, то какими усилиями?
Re[5]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.12.08 19:48
Оценка:
Здравствуйте, anonymous, Вы писали:

A>Тут даже 2 проблемы. Во-первых, за время написания кода тип переменной может несколько раз измениться.


Вывод типов спасет

A>Во-вторых, за время работы скрипта может несколько раз измениться тип значения переменной.


Зачем?

A> Например, получили мы в качестве аргумента некоторое строковое значение и хотим произвести над ним некоторые арифметические операции. То что мы можем работать с той же переменной, существенно сокращает объём кода.


Неявные операторы преобразования типов?

A>Проблемы со статически типизированными скриптами как бы нет, но динамическая типизация тут просто удобнее.


Ну вот хотелось бы поконкретнее.
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[5]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.12.08 19:48
Оценка:
Здравствуйте, Курилка, Вы писали:

К>И там можно подменить dll, код которой выполняется процессом?


Подменить нельзя, можно загрузить параллельно

К>Скажем, вебсервер выдаёт в течении полуминуты очень длинную страницу из последовательности цифры, которая задана в dll. Скажем в старой dll это была 1, в новой — 2. Можно ли получить ...111112222... и если да, то какими усилиями?


Нет, нельзя. А зачем такой изврат? Один запрос будет выполнятся на старой версии, следующий уже на новой, этого вполне достаточно.
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[6]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 20:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


К>>И там можно подменить dll, код которой выполняется процессом?


AVK>Подменить нельзя, можно загрузить параллельно


К>>Скажем, вебсервер выдаёт в течении полуминуты очень длинную страницу из последовательности цифры, которая задана в dll. Скажем в старой dll это была 1, в новой — 2. Можно ли получить ...111112222... и если да, то какими усилиями?


AVK>Нет, нельзя. А зачем такой изврат? Один запрос будет выполнятся на старой версии, следующий уже на новой, этого вполне достаточно.


Пример, безусловно, надуманный, но используется особенность задачи, т.е. относительно короткие, но частые запросы (т.е. для другого рода приложений потребуется отдельное решение, в отличие от общего решения в случае эрланга). Плюс вопрос каким образом здесь проявляется статическая типизация, если обрабатываются HTTP-запросы, которые явно нетипизированы?
Re[7]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.12.08 20:27
Оценка:
Здравствуйте, Курилка, Вы писали:

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


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

К> Плюс вопрос каким образом здесь проявляется статическая типизация, если обрабатываются HTTP-запросы, которые явно нетипизированы?


Для написания кода используются вполне себе статически типизированные C# и VB
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[8]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 20:51
Оценка:
Здравствуйте, AndrewVK, Вы писали:

К>> Плюс вопрос каким образом здесь проявляется статическая типизация, если обрабатываются HTTP-запросы, которые явно нетипизированы?


AVK>Для написания кода используются вполне себе статически типизированные C# и VB


ОК, насколько я понимаю единицей будет dll, какие статические контракты на неё накладываются?
Re[9]: Назначение динамических языков
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.12.08 20:57
Оценка:
Здравствуйте, Курилка, Вы писали:

К>ОК, насколько я понимаю единицей будет dll, какие статические контракты на неё накладываются?


Контракты на dll? Мы еще о языках разговариваем?
... << RSDN@Home 1.2.0 alpha 4 rev. 1120 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[10]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.12.08 21:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


К>>ОК, насколько я понимаю единицей будет dll, какие статические контракты на неё накладываются?


AVK>Контракты на dll? Мы еще о языках разговариваем?


Вот об этом-то тебе я и пытаюсь сказать: при переходе к dll мы теряем типизацию, т.е. хотсвоп типизированного кода не происходит. Т.е. если упростить, то фактически решение почти равносильно перезагрузке программы. В отличие от этого, эрланговские процессы при хотсвопе продолжат работу с новым кодом, если, конечно, в новом модуле нет багов и т.п.
Можно ли сделать обновление кода без какого-то отказа от типизации по-моему большой вопрос.
Re[11]: Назначение динамических языков
От: Кодт Россия  
Дата: 13.12.08 23:38
Оценка:
Здравствуйте, Курилка, Вы писали:

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

К>Можно ли сделать обновление кода без какого-то отказа от типизации по-моему большой вопрос.

Хотсвоп в эрланге основан на позднем связывании: когда функцию из подменяемого модуля вызывают не по ссылке, а по имени.
С dll, в общем-то, та же история, только нужно обеспечить правильное время жизни и сосуществования модулей; это ручная работа, а в эрланге оно всё "само" делается.

Так вот, собственно: есть такая штука, как декорированные имена. И для С++ных dll это прекрасно работает. Хотя C++ в отказе от типизации обвинить сложно
Перекуём баги на фичи!
Re[2]: Назначение динамических языков
От: z00n  
Дата: 13.12.08 23:54
Оценка: 11 (3)
Здравствуйте, nikov, Вы писали:

N>Вот я, честно говоря, не вижу никаких преимуществ у динамических языков перед языками со статической типизацией, поддерживающими вывод типов и structural typing (например, Scala). Если мне кто-то их укажет, я буду очень благодарен.

Вообще, это очень флеймоопасная тема (например на LtU ее обсуждение просто запрещено) — за пределами признания пары очевидных фактов:
— Любая статическая система типов обявит некоторое множество корректных программ некорректными.
— Никакая статическая система типов не может гарантировать коррекности программы в целом.

Хороший пример реальной проблемы, которая вообще не возникает, например, в лиспе: "Scrap your boilerplate":
http://www.cs.vu.nl/boilerplate/

Браху еще можно почитать:
http://bracha.org/pluggable-types.pdf
http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Bracha.pdf
Re[2]: Назначение динамических языков
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 14.12.08 03:59
Оценка:
Здравствуйте, nikov, Вы писали:

N>Вот я, честно говоря, не вижу никаких преимуществ у динамических языков перед языками со статической типизацией, поддерживающими вывод типов и structural typing (например, Scala).


Первый пришедший на ум пример — гетерогенные структуры данных без предварительного описания. Например, на Руби я свободно могу использовать такое значение:
[:while, [:less, :r0, [:getb, :p2]],
  [:do,
    [:inc, :r3, [:getb, :p2]],
    [:inc, :r2, 1]     
  ]
]

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