Re[26]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:24
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>Я утверждал что есть варианты, кроме как определения типа данных и хранения полей в словаре.


FDS>Это не так. Ты говорил, что

FDS>

FDS>Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных. Тип процедуры не то же самое, что тип данных, тем не менее процедуры позволяют хранить данные в форме отличном от "словаря переменных".

FDS>а вовсе не что "есть варианты, кроме как определение типа данных и хранения полей в словаре". Не надо отступаться от своих слов. Если утверждал — значит утверждал — так на форуме записано.

Я до сих пор так считаю. Тип процедуры не говорит о способе хранения данных.
Re[27]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 14:31
Оценка:
Здравствуйте, samius, Вы писали:

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


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


S>>>Я утверждал что есть варианты, кроме как определения типа данных и хранения полей в словаре.


FDS>>Это не так. Ты говорил, что

FDS>>

FDS>>Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных. Тип процедуры не то же самое, что тип данных, тем не менее процедуры позволяют хранить данные в форме отличном от "словаря переменных".

FDS>>а вовсе не что "есть варианты, кроме как определение типа данных и хранения полей в словаре". Не надо отступаться от своих слов. Если утверждал — значит утверждал — так на форуме записано.

S>Я до сих пор так считаю. Тип процедуры не говорит о способе хранения данных.


Может и тип структуры тоже не говорит?
Re[26]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:34
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>Покажи как тип говорит какие данные будут храниться в памяти.


FDS>При создании лексического замыкания сохраняются все контексты, а значит аргументы, а значит будет сохранён кортеж object * object (кортеж, который мы в качестве примера используем как аргумент функции cons, составляющую контекст лексического замыкания)


Все — это преувеличение, потому входные параметры не обязательно будут сохранены.

FDS>>>Где же разница между определением типа данных через struct или через замыкание?


S>>Попробуй унаследоваться от замыкания для начала


FDS>Не во всех языках есть наследование, да и причём тут наследование. Мы говорим не о наследовании — это синтаксис и возможности языка, а о том, что тип функции определяет тип хранимых данных так же, как это делается для типа хранимых данных при определении структуры.


FDS>Что касается наследования "попробовать", то завсегда пожалуйста

Молодец, попробовал
Re[33]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:35
Оценка:
Здравствуйте, FDSC, Вы писали:

S>>Я их прочитал внимательно. И пожалел об этом.


FDS>Что дальше?


Дальше я заканчиваю спорить с тобой
Re[28]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:37
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>Я до сих пор так считаю. Тип процедуры не говорит о способе хранения данных.


FDS>Может и тип структуры тоже не говорит?


Это зависит от структуры
Re[29]: Объявления типов: функциональная и ОО парадигмы
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:42
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>>>т.е. ты уверен в том, что в замыкании dispatch не может храниться хэндл файла, или даже ВООБЩЕ НИЧЕГО?


FDS>>>Где я такое написал?

S>>Такое ты не писал, но из выделенного следует что в замыкании dispatch не может храниться ничего кроме кортежа, переданного в cons.

FDS>Это так и есть, если определение dispatch такое. Вот только в кортеж ты можешь запихнуть всё что угодно, так же как и в структуру с двумя полями object


FDS>Если же ты тип процедуры cons изменишь на object -> object, то сможешь передать только имя файла — т.е. структуру из одного поля.


Я не собирался передавать в cons имя файла, я даже не настаиваю на хранении имени файла в замыкании. Замыкания может вообще не быть и на типе процедуры cons это никак не отразится. Хотя на объявлении тела — определенно да.
Re[29]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 14:42
Оценка:
Здравствуйте, samius, Вы писали:

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


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


S>>>Я до сих пор так считаю. Тип процедуры не говорит о способе хранения данных.


FDS>>Может и тип структуры тоже не говорит?


S>Это зависит от структуры


Каким образом тип структуры может говорить то, чего не говорит тип процедуры? Мы и там, и там объявляем один и тот же кортеж, он и там, и там говорит абсолютно одно и то же.
Re[30]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 14:44
Оценка: -1
Здравствуйте, FDSC, Вы писали:

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


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


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


S>>>>Я до сих пор так считаю. Тип процедуры не говорит о способе хранения данных.


FDS>>>Может и тип структуры тоже не говорит?


S>>Это зависит от структуры


FDS>Каким образом тип структуры может говорить то, чего не говорит тип процедуры? Мы и там, и там объявляем один и тот же кортеж, он и там, и там говорит абсолютно одно и то же.


Объясни себе сам, а потом поспорь.
Re[27]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 14:44
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>При создании лексического замыкания сохраняются все контексты, а значит аргументы, а значит будет сохранён кортеж object * object (кортеж, который мы в качестве примера используем как аргумент функции cons, составляющую контекст лексического замыкания)


S>Все — это преувеличение, потому входные параметры не обязательно будут сохранены.


Это уже вопрос оптимизации. В структуре компилятор, в принципе, тоже может убрать неиспользуемые поля (конечно, если он знает, что они действительно не используются)
Re[30]: Объявления типов: функциональная и ОО парадигмы
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 14:46
Оценка:
Здравствуйте, samius, Вы писали:

S>Я не собирался передавать в cons имя файла, я даже не настаиваю на хранении имени файла в замыкании. Замыкания может вообще не быть и на типе процедуры cons это никак не отразится.


С какой стати на объявлении процедуры cons это должно отражаться?

Если ты не используешь операцию new для некоторого типа, это как-то отражается на теле объявления типа? Никак.
Re[31]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 14:46
Оценка:
Здравствуйте, samius, Вы писали:

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


Не хами
Re: Какие задачи решают системы типов
От: SV.  
Дата: 12.01.10 17:29
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Расскажите, пожалуйста, зачем нужны системы типов. Какие задачи они решают?


T>Например, очевидно, что типы позволяют производить проверки корректности кода, диспатчить полиморфизмы типа оператора сложения (хотя здесь я не уверен).


Я, наверное, совсем закоснел, но каковы альтернативы? Что за безтиповое программирование такое?

Допустим, вы договорились, что все объекты в обязательном порядке поддерживают интерфейс диспетчеризации. Можете для любого foo вызывать Bar(), и либо он вызовется, либо выбросит исключение. Это — безтиповая система? Нет, это duck typing. Чтобы это заработало на стороне клиента, кто-то должен разработать типы, реализовать Bar(), заполнить таблицу диспетчеризации. Или, хотя бы, определить типы в рантайме (скрестить два объекта, например). Если посмотреть на промышленные реализации, то видно будет почти одни скрипты. В которые, со временем, проникают UDT

Совсем без типов я могу вспомнить только однозначную лапшу, типа ассемблера. Вот вам память, вот вам адрес, вот регистры, вот набор команд. Такую абстракцию как тип для того и придумали, чтобы уйти от этой лапши.

О чем же речь?
Re[2]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 17:44
Оценка: :)
T>>Расскажите, пожалуйста, зачем нужны системы типов. Какие задачи они решают?

T>>Например, очевидно, что типы позволяют производить проверки корректности кода, диспатчить полиморфизмы типа оператора сложения (хотя здесь я не уверен).


SV.>Я, наверное, совсем закоснел, но каковы альтернативы? Что за безтиповое программирование такое?


SV.>Допустим, вы договорились, что все объекты в обязательном порядке поддерживают интерфейс диспетчеризации. Можете для любого foo вызывать Bar(), и либо он вызовется, либо выбросит исключение. Это — безтиповая система? Нет, это duck typing. Чтобы это заработало на стороне клиента, кто-то должен разработать типы, реализовать Bar(), заполнить таблицу диспетчеризации. Или, хотя бы, определить типы в рантайме (скрестить два объекта, например). Если посмотреть на промышленные реализации, то видно будет почти одни скрипты. В которые, со временем, проникают UDT


SV.>Совсем без типов я могу вспомнить только однозначную лапшу, типа ассемблера. Вот вам память, вот вам адрес, вот регистры, вот набор команд. Такую абстракцию как тип для того и придумали, чтобы уйти от этой лапши.


SV.>О чем же речь?


Речь о том какие задачи решают системы типов. Может быть, вы предположили, что я спросил "а нахрена вообще нужны эти глупые типы". Нет, мне правда была интересна декомпозиция на подзадачи. Мне казалось, что так я лучше смогу понять основы. И сейчас, мне кажется, что это удалось.

И, благодаря совместным усилиям, нам удалось выяснить по-крайней мере некоторые функции систем типов. Об этом я написал в итогах http://www.rsdn.ru/forum/philosophy/3664785.1.aspx
Автор: Temoto
Дата: 11.01.10
Пока, увы, дополнений нет, но есть несколько интересных моментов:
во-первых, действительно, можно делать диспатчинг полиморфизмов без системы типов на основе duck typing (да, в этом контексте, я не считаю duck typing за систему типов), если после создания каждого значения отдельно ассоциировать его с набором операций. Это можно до какой-то степени подсластить. Например, x = 5 будет неявно ассоциировать с этим значением все численные операторы.
во-вторых, есть т.с. процедурный способ хранения, при котором данные "скрывают" в замыканиях. Об этом есть огромная ветка спора, слава богу, наконец-то утихшая.
Re[3]: Какие задачи решают системы типов
От: Курилка Россия http://kirya.narod.ru/
Дата: 12.01.10 18:00
Оценка:
Здравствуйте, Temoto, Вы писали:

T>И, благодаря совместным усилиям, нам удалось выяснить по-крайней мере некоторые функции систем типов. Об этом я написал в итогах http://www.rsdn.ru/forum/philosophy/3664785.1.aspx
Автор: Temoto
Дата: 11.01.10
Пока, увы, дополнений нет, но есть несколько интересных моментов:

T>во-первых, действительно, можно делать диспатчинг полиморфизмов без системы типов на основе duck typing (да, в этом контексте, я не считаю duck typing за систему типов), если после создания каждого значения отдельно ассоциировать его с набором операций. Это можно до какой-то степени подсластить. Например, x = 5 будет неявно ассоциировать с этим значением все численные операторы.
T>во-вторых, есть т.с. процедурный способ хранения, при котором данные "скрывают" в замыканиях. Об этом есть огромная ветка спора, слава богу, наконец-то утихшая.

А что насчёт отделения мух от котлет в языках с более мощными системами типов? (см. пресловутые монады как минимум)
Также о зависимых типах тут писали не раз
Re[4]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 18:25
Оценка:
К>А что насчёт отделения мух от котлет в языках с более мощными системами типов? (см. пресловутые монады как минимум)
К>Также о зависимых типах тут писали не раз

Если вы предлагаете обсудить конкретные системы типов, то да, конечно, это я собирался делать следующим шагом.
Re[5]: Какие задачи решают системы типов
От: deniok Россия  
Дата: 12.01.10 18:33
Оценка: 6 (1)
Здравствуйте, Temoto, Вы писали:

T>Если вы предлагаете обсудить конкретные системы типов, то да, конечно, это я собирался делать следующим шагом.


А что их обсуждать, всё более менее пригодное для практического применения у Пирса в TAPL описано, а теперь Юра Бронников и русский перевод практически сделал. Что непонятно — можно спрашивать, а так абстрактные обсуждения приводит к длинному флейму непонятно о чем
Re[6]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 18:43
Оценка: 1 (1) :)
Здравствуйте, deniok, Вы писали:

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


T>>Если вы предлагаете обсудить конкретные системы типов, то да, конечно, это я собирался делать следующим шагом.


D>А что их обсуждать, всё более менее пригодное для практического применения у Пирса в TAPL описано, а теперь Юра Бронников и русский перевод практически сделал. Что непонятно — можно спрашивать, а так абстрактные обсуждения приводит к длинному флейму непонятно о чем


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

T>>>Расскажите, пожалуйста, зачем нужны системы типов. Какие задачи они решают?


T>>>Например, очевидно, что типы позволяют производить проверки корректности кода, диспатчить полиморфизмы типа оператора сложения (хотя здесь я не уверен).


T>Речь о том какие задачи решают системы типов. Может быть, вы предположили, что я спросил "а нахрена вообще нужны эти глупые типы".


Я ничего не предполагал, а просто прочитал, что вы написали: "Расскажите, пожалуйста, зачем нужны системы типов".

Между вопросами "Расскажите, пожалуйста, зачем нужны системы типов" и "а нахрена вообще нужны эти глупые типы" я никакой разницы, кроме накала эмоций, не вижу. "Системы типов" это и есть типы, просто сформулировано наукообразнее. Вы сами же и пишете: "Например, очевидно, что типы позволяют", то есть, показываете, что разницы между просто типами и "системами типов" не видите тоже. Что касается тождественности "нахрена" и "зачем", а также эпитета "глупые", это обсуждать будем, или как?

То же самое касается и "какие задачи решают". Это то же самое, что "нахрена?", только культурнее.

Так вот, обсуждая вопрос "нахрена?", я предлагаю сопоставить [язык/платформу/чтотамеще] с типами и без типов. По моей мысли, ответ должен последовать автоматически.

Например, нахрена нужны колеса? С колесами — повозка, карета, телега, автомобиль. Без колес — лыжи, санки, волокуша, боб. Вторые херово ездят по асфальту. Первые — по рыхлому глубокому снегу. Вот и ответ. Или, если угодно, колеса "решают задачу" замены трения скольжения на трение качения, когда это нужно.

Какие [языки/платформы/чтотамеще] без типов вы знаете? Я знаю только "лапшу". Ассемблер, или какой-нибудь древний BASIC с нумерованными строками. Впрочем, лапшу можно получить на любом языке. Остальное все типизировано насквозь, явно или неявно.

>Нет, мне правда была интересна декомпозиция на подзадачи. Мне казалось, что так я лучше смогу понять основы. И сейчас, мне кажется, что это удалось.


T>да, в этом контексте, я не считаю duck typing за систему типов


А как сделать duck typing без системы типов?
Re[4]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 19:52
Оценка:
SV.>Например, нахрена нужны колеса? С колесами — повозка, карета, телега, автомобиль. Без колес — лыжи, санки, волокуша, боб. Вторые херово ездят по асфальту. Первые — по рыхлому глубокому снегу. Вот и ответ. Или, если угодно, колеса "решают задачу" замены трения скольжения на трение качения, когда это нужно.

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

>>Нет, мне правда была интересна декомпозиция на подзадачи. Мне казалось, что так я лучше смогу понять основы. И сейчас, мне кажется, что это удалось.

T>>да, в этом контексте, я не считаю duck typing за систему типов
SV.>А как сделать duck typing без системы типов?

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

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

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

Это можно передать append, значит это — список. Duck typing.
Re[5]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 20:12
Оценка:
Здравствуйте, Temoto, Вы писали:

T>>>да, в этом контексте, я не считаю duck typing за систему типов

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.

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

С тем что термин неверен, согласен и автор TAPL-а. Но он тут же пишет что употребление термина "динамическая типизация" является стандартым.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.