Re[3]: Назначение динамических языков
От: deniok Россия  
Дата: 14.12.08 06:30
Оценка:
Здравствуйте, z00n, Вы писали:


Z>Хороший пример реальной проблемы, которая вообще не возникает, например, в лиспе: "Scrap your boilerplate":

Z>http://www.cs.vu.nl/boilerplate/

Тут не понял. В чем проблема-то? Поскольку в лиспе типов нет, то это у него проблема: он не может проехаться по сложной иерархии и в ней выполнить некоторую операцию только над вхождениями определенного типа в иерархию
Re[4]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 08:22
Оценка:
Здравствуйте, deniok, Вы писали:

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


D>Тут не понял. В чем проблема-то? Поскольку в лиспе типов нет, то это у него проблема: он не может проехаться по сложной иерархии и в ней выполнить некоторую операцию только над вхождениями определенного типа в иерархию


У меня нет слов
Чем tagged-list с предикатом не тип?

P.S. Tree fold имени Олега Киселева:
;------------------------------------------------------------------------
;            Extended tree fold
; tree = atom | (node-name tree ...)
;
; foldts fdown fup fhere seed (Leaf str) = fhere seed str
; foldts fdown fup fhere seed (Nd kids) =
;         fup seed $ foldl (foldts fdown fup fhere) (fdown seed) kids

; procedure fhere: seed -> atom -> seed
; procedure fdown: seed -> node -> seed
; procedure fup: parent-seed -> last-kid-seed -> node -> seed
; foldts returns the final seed

(define (foldts fdown fup fhere seed tree)
  (cond
   ((null? tree) seed)
   ((not (pair? tree))        ; An atom
    (fhere seed tree))
   (else
    (let loop ((kid-seed (fdown seed tree)) (kids (cdr tree)))
      (if (null? kids)
      (fup seed kid-seed tree)
      (loop (foldts fdown fup fhere kid-seed (car kids))
        (cdr kids)))))))

http://okmij.org/ftp/Scheme/xml.html#SXSLT
Re[3]: Назначение динамических языков
От: dotneter  
Дата: 14.12.08 08:25
Оценка: +1
Здравствуйте, D. Mon, Вы писали:

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


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


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

DM>
DM>[:while, [:less, :r0, [:getb, :p2]],
DM>  [:do,
DM>    [:inc, :r3, [:getb, :p2]],
DM>    [:inc, :r2, 1]     
DM>  ]
DM>]
DM>

Кортеж?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[5]: Назначение динамических языков
От: deniok Россия  
Дата: 14.12.08 08:43
Оценка:
Здравствуйте, z00n, Вы писали:

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


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


D>>Тут не понял. В чем проблема-то? Поскольку в лиспе типов нет, то это у него проблема: он не может проехаться по сложной иерархии и в ней выполнить некоторую операцию только над вхождениями определенного типа в иерархию


Z>У меня нет слов

Z>Чем tagged-list с предикатом не тип?

Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.
Re[6]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 09:14
Оценка:
Здравствуйте, deniok, Вы писали:

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


Z>>Чем tagged-list с предикатом не тип?


D>Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.


Разница в том, что любой первокурсник может сделать это на схеме (ну или скажем руби). А SYB — это несколько Ph.D лет, куча статей ... В плохом смысле напоминает метапрограмирование на шаблонах.
Кстати, где брать SYB для других статически-типизированных языков?
Re[12]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 09:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Хотсвоп в эрланге основан на позднем связывании: когда функцию из подменяемого модуля вызывают не по ссылке, а по имени.

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

К>Так вот, собственно: есть такая штука, как декорированные имена. И для С++ных dll это прекрасно работает. Хотя C++ в отказе от типизации обвинить сложно


И для них есть хотсвоп?
Re[6]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 09:22
Оценка:
Здравствуйте, deniok, Вы писали:

D>Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.


Выделенное по-моему очень важный момент, т.е. программист должен практически ещё до возникновения задачи интуитивно догадаться, что ему понадобятся тэги. Т.е. фактически типизация вручную. А если код делал другой программер в другой стране пару лет назад?
Re[7]: Назначение динамических языков
От: deniok Россия  
Дата: 14.12.08 09:33
Оценка: +1
Здравствуйте, z00n, Вы писали:

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


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


Z>>>Чем tagged-list с предикатом не тип?


D>>Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.


Z>Разница в том, что любой первокурсник может сделать это на схеме (ну или скажем руби). А SYB — это несколько Ph.D лет, куча статей ... В плохом смысле напоминает метапрограмирование на шаблонах.


Первокурсник? Аналог кода от Олега? С таким количеством ФВП?
Такой первокурсник на втором курсе легко заимплементирует SYB.

Z>Кстати, где брать SYB для других статически-типизированных языков?

Это к адептам этих других языков
Re[3]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 09:40
Оценка:
Здравствуйте, z00n, Вы писали:

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


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

Z>Вообще, это очень флеймоопасная тема (например на LtU ее обсуждение просто запрещено) — за пределами признания пары очевидных фактов:
Z>- Любая статическая система типов обявит некоторое множество корректных программ некорректными.
Продемонстрируй практический пример теоретического высказывания?
Ключевой вопрос имхо — в рамках чего будут корректны твои корректные программы?
Z>- Никакая статическая система типов не может гарантировать коррекности программы в целом.
Вообще никакие тулзы не могут гарантировать 100% корректность (даже в тулзах доказательства теорем есть пункт, а ту ли теорему вы сформулировали ), но есть по-моему заметная разница между некими гарантиями/констрейнтами и отсутствием оных. Я ничего не имею против динамической типизации, но статическая типизация переводит заметную часть "дисциплины" разработчика из его головы на компилятор, но при этом отнюдь не отменяет её. Т.е. мозг программиста всё равно обязателен, но внимание его переключается, туда или нет — зависит от языка (скажем не везде есть вывод типов и т.п. ньюансы)
Re[7]: Назначение динамических языков
От: deniok Россия  
Дата: 14.12.08 09:48
Оценка: +1
Здравствуйте, Курилка, Вы писали:

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


D>>Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.


К>Выделенное по-моему очень важный момент, т.е. программист должен практически ещё до возникновения задачи интуитивно догадаться, что ему понадобятся тэги. Т.е. фактически типизация вручную. А если код делал другой программер в другой стране пару лет назад?


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

Но поскольку в Хаскелле интерфейсы (т.е. классы типов) добавляются когда надо к чему угодно, то это не проблема. К тому же в современном GHC автоматически поддерживается deriving (Typeable, Data), то есть весь SYB вообще поддерживается практически бесплатно.
Re[7]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 09:49
Оценка:
Здравствуйте, Курилка, Вы писали:

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


D>>Тип, тип. Только о тегах надо заранее позаботится. Иначе не к чему будет предикат цеплять. Собственно Typable + Data в SYB этим и занимаются, я разницы особой не вижу.


К>Выделенное по-моему очень важный момент, т.е. программист должен практически ещё до возникновения задачи интуитивно догадаться, что ему понадобятся тэги. Т.е. фактически типизация вручную. А если код делал другой программер в другой стране пару лет назад?


Я честно говоря не очень понимаю о чем вы оба говорите. Речь шла о SYB, т.е. грубо говоря о том как обходить всякие разлапистые деревья. Как изобразить такое дерево на языке с динамической типизацией без тегов я так даже с ходу и не соображу. Вот D.Mon рядом привел код на руби, который явно AST, c тегами. XML — хороший пример, тоже с тегами.
Прелесть таких структур данных заключается в том, что независимо от их сложности, они обходятся обычной функцией fold.

Интуитивно догадываться не нужно, есть книги, SICP например
Re[4]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 10:01
Оценка:
Здравствуйте, Курилка, Вы писали:

Z>>- Любая статическая система типов обявит некоторое множество корректных программ некорректными.

К>Продемонстрируй практический пример теоретического высказывания?
Хрестоматийный пример: функция flattree — функция берет любое дерево и превращает его в плоский список.
К>Ключевой вопрос имхо — в рамках чего будут корректны твои корректные программы?
Z>>- Никакая статическая система типов не может гарантировать коррекности программы в целом.
К>Вообще никакие тулзы не могут гарантировать 100% корректность (даже в тулзах доказательства теорем есть пункт, а ту ли теорему вы сформулировали ), но есть по-моему заметная разница между некими гарантиями/констрейнтами и отсутствием оных. Я ничего не имею против динамической типизации, но статическая типизация переводит заметную часть "дисциплины" разработчика из его головы на компилятор, но при этом отнюдь не отменяет её. Т.е. мозг программиста всё равно обязателен, но внимание его переключается, туда или нет — зависит от языка (скажем не везде есть вывод типов и т.п. ньюансы)

Я не хочу спорить, но хочу заметить, что это вам кажется, что статическая типизация переводит заметную часть "дисциплины" разработчика из его головы на компилятор. Есть люди, которым кажется по другому — о чем тут говорить?
Re[5]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 10:12
Оценка:
Здравствуйте, z00n, Вы писали:

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


Z>>>- Любая статическая система типов обявит некоторое множество корректных программ некорректными.

К>>Продемонстрируй практический пример теоретического высказывания?
Z>Хрестоматийный пример: функция flattree — функция берет любое дерево и превращает его в плоский список.
Раскрой, пожалуйста, пример и проблему в нём для статики, по ходу мы разные христоматии читали.
Плюс я просил практический пример.

К>>Ключевой вопрос имхо — в рамках чего будут корректны твои корректные программы?

Этот вопрос ты скипнул?

Z>Я не хочу спорить, но хочу заметить, что это вам кажется, что статическая типизация переводит заметную часть "дисциплины" разработчика из его головы на компилятор. Есть люди, которым кажется по другому — о чем тут говорить?

Откуда ты берёшь "кажется"? Возьмём "соседний" пример: наличие тэгов ничем не гарантируется, кроме доброй воли автора, наличие типов в компилируемой программе гарантируется компилятором.
Но флейм начинать смысла нет, коли реальные факты принимаются за "кажется".
Re[8]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 10:17
Оценка:
Здравствуйте, z00n, Вы писали:

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


К>> А если код делал другой программер в другой стране пару лет назад?


Z>Интуитивно догадываться не нужно, есть книги, SICP например


Специально для тебя. 2 года назад даже намёка на задачу "по всему дереву" не было (и чего-нибудь около того), тэги были элементарно не нужны.
Ты же фактически говоришь на самом деле о "ручной" типизации, которую обязательно должен делать программист.
Re[9]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 10:32
Оценка:
Здравствуйте, Курилка, Вы писали:

Z>>Интуитивно догадываться не нужно, есть книги, SICP например


К>Специально для тебя. 2 года назад даже намёка на задачу "по всему дереву" не было (и чего-нибудь около того), тэги были элементарно не нужны.

Сдаюсь — как такие задачи решает статическая типизация ?

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


Вот пример D.Mon-а. Как бы вы избавились бы от тегов?
[:while, [:less, :r0, [:getb, :p2]],
  [:do,
    [:inc, :r3, [:getb, :p2]],
    [:inc, :r2, 1]     
  ]
]
Re[8]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 10:48
Оценка:
Здравствуйте, deniok, Вы писали:

Z>>Разница в том, что любой первокурсник может сделать это на схеме (ну или скажем руби). А SYB — это несколько Ph.D лет, куча статей ... В плохом смысле напоминает метапрограмирование на шаблонах.


D>Первокурсник? Аналог кода от Олега? С таким количеством ФВП?

D>Такой первокурсник на втором курсе легко заимплементирует SYB.

Первокурсник легко обойдется чем-нибудь попроще (олегов код передает состояние от родителей к детям и обратно)
Re[4]: Назначение динамических языков
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 14.12.08 10:49
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Кортеж?


А многие ли статически типизированные языки разрешают описать функцию, принимающую произвольный кортеж (в том числе произвольной длины)?
Re[10]: Назначение динамических языков
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.12.08 10:53
Оценка:
Здравствуйте, z00n, Вы писали:

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


Z>>>Интуитивно догадываться не нужно, есть книги, SICP например


К>>Специально для тебя. 2 года назад даже намёка на задачу "по всему дереву" не было (и чего-нибудь около того), тэги были элементарно не нужны.

Z>Сдаюсь — как такие задачи решает статическая типизация ?
Задачи типизации, т.е. гарантии контрактов.

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


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

Там изначально был нужны тэги, так что вопрос некорректен. Я говорил как раз о варианте, когда тэги требуются после.
Но как вариант "развития ситуации": что будет если в код, которому был нужен этот "байткод" (именно тот код, а не тот, который работает просто с массивами) я передам [1,1,1]? Переходим к переходу к обработке контрактов в рантайме (или падению).
Re[11]: Назначение динамических языков
От: z00n  
Дата: 14.12.08 11:23
Оценка:
Здравствуйте, Курилка, Вы писали:

Z>>Сдаюсь — как такие задачи решает статическая типизация ?

К>Задачи типизации, т.е. гарантии контрактов.
Тут недавно гейм девелоперы мерялись ассертами — 1 ассерт на 5 строк кода. Не доверяют, видать, статической типизации

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

К>Там изначально был нужны тэги, так что вопрос некорректен. Я говорил как раз о варианте, когда тэги требуются после.
Например о каком? Мы то сначала говорили о SYB.

К>Но как вариант "развития ситуации": что будет если в код, которому был нужен этот "байткод" (именно тот код, а не тот, который работает просто с массивами) я передам [1,1,1]? Переходим к переходу к обработке контрактов в рантайме (или падению).


Это зависит — если это компилятор — то все "неинтересные" случаи мы просто пропускаем. В ерланге, например, можно подождать с этим пару недель — пока код не проапдейтят. Иногда имеет смысл исключение бросить. В чем проблема то?
Re[5]: Назначение динамических языков
От: dotneter  
Дата: 14.12.08 11:27
Оценка: +2
Здравствуйте, D. Mon, Вы писали:


DM>А многие ли статически типизированные языки разрешают описать функцию, принимающую произвольный кортеж (в том числе произвольной длины)?

Тогда что нибудь типа анонимного union type,
["a", 1, "b"] string|int list
["a", 2, true] string|int|bool list
А потом патерн мачингом бежим по этому списку и радуемся жизни.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.