Re[5]: Какие задачи решают системы типов
От: SV.  
Дата: 12.01.10 21:38
Оценка:
Здравствуйте, Temoto, Вы писали:

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


Почему вопрос глупый? Глупо делать вид, что вы его не задавали, а сам вопрос очень даже не глупый.

Например, я не уверен, что знаю правильный ответ. Поскольку кроме "лапши" ничего безтипового я больше не знаю, то мой ответ — типы помогают "разделять и властвовать". Это очень древний механизм, который появился на ранних этапах эволюции программирования. Как я себе это представляю: понадобилось сделать косвенную адресацию более безопасной — ввели типы указателей. Не ввели бы, например, в C — и код *(0x00ffffff) = 0; работал бы "на ура". Поверх плоской памяти наложили паттерны, кускам которых дали имена — получили структуры/юнионы. При рассмотрении куска памяти как паттерна такого-то потребовали в явном виде указывать, что с ним можно делать — получили классы и ООП. Лишили возможности рассматривать кусок памяти иначе, чем как паттерн и прибили к нему гвоздями информацию об этом паттерне — получили C# . Стали рассматривать память, которая хранит код, а не данные, тоже через паттерны — получили ФП (типы-функции).

В этом месте я сверился с википедией: http://en.wikipedia.org/wiki/Type_system#Fundamentals

Пишут, что введение типов решает четыре базовых задачи:

  • Безопасность. Многие бессмысленные применения машинных инструкций запрещаются. Иллюстрируется это примером 3 / "Hello, World".
  • Оптимизация. Я не согласен (или не понял). Выравнивания и без типов прекрасно делаются.
  • Документирование. Применение типов — форма документации. size_t вместо int, например. Или имена enum fields.
  • Модульность. Типы позволяют думать о памяти как об объектах (string вместо набора символов) и делать интерфейсы.

    В целом, все переплетено и вполне сводится к "разделяй и властвуй". Вроде, ничего неожиданного.

    SV.>>А как сделать duck typing без системы типов?


    T>/повторяя сказанное выше/

    T>
    T>a = 5 # подразумевает a.__plus = int_plus, и остальные численные операторы
    T>a + 0
    T>

    T>К этому можно прибавить ноль и получить целое число, значит это было целое число. Duck typing.

    T>Или вот.

    T>
    T>xs = [] # подразумевает xs.__append = list_append, xs.__length = list_length, и остальные операторы над списками
    T>append xs 5
    T>

    T>Это можно передать append, значит это — список. Duck typing.

    А где определены __plus и __append? Вот если вам удастся привести пример каких-то подобных вещей совсем без типов, это будет интересно. Типа такого, знаете, набора команд, который был бы безопасен в применении, документировался сам собой и выстраивался в модульные системы.
  • Re[32]: Какие задачи решают системы типов
    От: samius Япония http://sams-tricks.blogspot.com
    Дата: 12.01.10 21:44
    Оценка:
    Здравствуйте, FDSC, Вы писали:

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


    S>>Объясни себе сам, а потом поспорь.


    FDS>Не хами


    Приношу извинения за хамство.
    Однако продолжать желания нет.
    Re[6]: Какие задачи решают системы типов
    От: samius Япония http://sams-tricks.blogspot.com
    Дата: 12.01.10 22:02
    Оценка:
    Здравствуйте, SV., Вы писали:

    SV.>В этом месте я сверился с википедией: http://en.wikipedia.org/wiki/Type_system#Fundamentals


    SV.>Пишут, что введение типов решает четыре базовых задачи:


    SV.>
  • Безопасность. Многие бессмысленные применения машинных инструкций запрещаются. Иллюстрируется это примером 3 / "Hello, World".
    SV.>
  • Оптимизация. Я не согласен (или не понял). Выравнивания и без типов прекрасно делаются.
    SV.>
  • Документирование. Применение типов — форма документации. size_t вместо int, например. Или имена enum fields.
    SV.>
  • Модульность. Типы позволяют думать о памяти как об объектах (string вместо набора символов) и делать интерфейсы.

    SV.>В целом, все переплетено и вполне сводится к "разделяй и властвуй". Вроде, ничего неожиданного.


    Сравнил с введением в TAPL
    Первым пунктом идет
    Выявление ошибок
    Вторым
    Абстракция — в качестве стимула для поддержания дисциплины программирования. В этом же пункте упоминается Модульность.
    Затем
    Документация
    Четвертым
    Безопасность языков — здесь проще привести примеры, что Безопансые — ML, Haskell, Java, LISP, Scheme, Perl, Postscript и т.п. Небезопансые — C, C++ и т.п.
    Эффективность — упоминаются избегание множества динамических проверок, оптимизации на основе информации, собранной процедурой проверки типов, замена вызовов сборщика мусора стековыми операциями...
    Другие приложения — упоминаются области безопасности компьютеров и сетей, инструменты анализа программ помимо компиляторов, автоматическое доказательство теорем системы типов, интерес специалистов по БД, вычислительная лингвистика.
  • Re[6]: Какие задачи решают системы типов
    От: Temoto  
    Дата: 13.01.10 12:54
    Оценка:
    SV.>Например, я не уверен, что знаю правильный ответ. Поскольку кроме "лапши" ничего безтипового я больше не знаю, то мой ответ — типы помогают "разделять и властвовать". Это очень древний механизм, который появился на ранних
    [...]

    Что вполне вписывается в первый пункт — проверка корректности. Спасибо.

    SV.>>>А как сделать duck typing без системы типов?


    [...]

    SV.>А где определены __plus и __append? Вот если вам удастся привести пример каких-то подобных вещей совсем без типов, это будет интересно. Типа такого, знаете, набора команд, который был бы безопасен в применении, документировался сам собой и выстраивался в модульные системы.


    a = 5 # подразумевает a.__plus = int_plus, и остальные численные операторы
    xs = [] # подразумевает xs.__append = list_append, xs.__length = list_length, и остальные операторы над списками

    Вот здесь и определены. Любое значение (объект) это словарь, обращение к полям через точку.
    append вызывает x.__append (то есть встроенную функцию list_append). А list_append оперирует низкоуровневыми структурами, это уже реализация языка.

    Я не обещал безопасности, документирования, ничего что написано в википедии. Я привёл пример диспатчинга полиморфизмов, duck typing, без типов.
    Re[7]: Какие задачи решают системы типов
    От: SV.  
    Дата: 13.01.10 14:23
    Оценка:
    Здравствуйте, Temoto, Вы писали:

    T>Я не обещал безопасности, документирования, ничего что написано в википедии. Я привёл пример диспатчинга полиморфизмов, duck typing, без типов.


    Что ж вы остановились на одном плюсе? Приводите дальше. Раз и навсегда, чтобы покрыть все будущие нужды. И не пришлось бы вводить "глупые" типы, чтобы программист мог повторить этот фокус своими руками.
    Re[8]: Какие задачи решают системы типов
    От: Temoto  
    Дата: 13.01.10 14:56
    Оценка:
    T>>Я не обещал безопасности, документирования, ничего что написано в википедии. Я привёл пример диспатчинга полиморфизмов, duck typing, без типов.

    SV.>Что ж вы остановились на одном плюсе? Приводите дальше. Раз и навсегда, чтобы покрыть все будущие нужды. И не пришлось бы вводить "глупые" типы, чтобы программист мог повторить этот фокус своими руками.


    Мне решительно непонятно чего вы от меня хотите. Вы неправильно поняли мой изначальный вопрос. Я вам пояснил, что я не против типов. Но вы говорите, что прочитали всё как надо и спорите с выдуманными тезисами. И сейчас опять то же самое. Я не утверждал того с чем вы спорите (обвиняете, утверждаете, тот-глагол-который-здесь-уместен). Попросите кого-нибудь рядом перечитать наш диалог и, надеюсь, всё станет на свои места.
    Re[9]: Какие задачи решают системы типов
    От: SV.  
    Дата: 14.01.10 15:29
    Оценка:
    Здравствуйте, Temoto, Вы писали:

    T>Мне решительно непонятно чего вы от меня хотите.


    http://en.wikipedia.org/wiki/Duck_typing это не только вызов кряканья, но и создание разнообразной живности (не только уток, но и мутированных ежей, ужей и мышей), которая умеет крякать по-утиному. У вас утка, которая умеет складывать, реализована за кулисами и, типа, убрана из рассмотрения. Так сложения, извините, мало. Если это язык, ЧТО на нем можно будет сделать еще?

    Что касается изначального вопроса, который я "не понял". Вот вам не вопрос, а утверждение — без типов нельзя сделать вообще ничего сложнее ассемблера и примитивнейших скриптов, а потому перебирать отдельные задачи, решаемые типизацией, не имеет смысла. Хотите — оспаривайте.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.