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

S>>>"Объекты, которые можно складывать"

FDS>>И кто же определил такой тип? Или по-вашему достаточно того, чтобы он фактически был, а синтаксическое определение и явное использование понятия "тип" не обязательно?

S>Нет, не обязательно. Существует толпа языков, не использующих тип явно, в отличии от языков, в которых бы не было типа совсем.


Т.е. это означает, что объект в этой толпе языков имеет множество типов вне одной ветки дерева, а так же информация об этом неявно типе где-то хранится, или нет?


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

S>В таком случае мне не понятно, что Вы имеет в виду под перегрузкой операторов вообще.

Я имею в виду, что для каждого объекта я могу задать свою операцию сложения, которая будет обладать одинаковым синтаксисом и именем для всех объектов, где операция задана, но работать в них по разному.
Re[2]: Какие задачи решают системы типов
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.01.10 21:39
Оценка: +1
Здравствуйте, TimurSPB, Вы писали:

TSP>В инновационных проектах (особенно инет), которые постоянно меняются и развиваются, когда нужны быстрые решения — языки со слабой типизацией. Phyton, PHP, Ruby и etc.


Не путай, плиз, динамическую и слабую типизацию
Re[5]: Какие задачи решают системы типов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.10 21:43
Оценка:
Здравствуйте, deniok, Вы писали:

AVK>>Хм. А как тогда трактовать статический полиморфизм ввиде перегрузки функций по количеству аргументов? Вроде бы в этом случае типы не нужны, нет?


D>Это вопрос трактовки термина "тип". Если понимать его как способ классификации имеющихся сущностей, то разделение по арности — тоже род типизации.


Ну я понимаю, что презерватив и на глобус натянуть можно. Только это уже чистая софистика. Тип в контексте разговора должен быть чем то реально существующим, а не голой абстракцией.
AVK Blog
Re[7]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 21:44
Оценка:
Здравствуйте, FDSC, Вы писали:

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

S>>Из адреса не выводится объем памяти )))

FDS>Из адреса выводится объём памяти на указатель, так же, как и для любого другого массива данных.

Что бы это значило?

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

S>>Это не факт. Процедуры могут иметь один тип, но разные реализации.

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


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

S>>Это когда вместо типа данных возвращается процедура, которая в свою очередь вернет данные при определенных обстоятельствах.


FDS>В данном случае компилятор знает, что данные хранятся как процедура — а больше ему и не нужно.

Компилятор об этом может и не знать

FDS>Я, признаться, ни разу не видел, чтобы при объявленном типе String прямо туда можно было бы запихнуть процедуру, а значит компилятор должен знать о том, что там хранится не сама строка, а процедура, т.е. имеет информацию о том, что эта процедура есть, нужно хранить указатель на неё, знает, как эту процедуру вызвать.


Прямо туда — это куда?

FDS>Таким образом, объявляя процедуру как способ получения данных мы всё равно сообщаем компилятору некоторую информацию о способе хранения данных и их получения (точнее, о том, что данные выражаются в адресе функции и факте её вызова).

О способе хранения — нет. О способе их получения — не факт. Эта информация может быть получена динамически.
Re[8]: Какие задачи решают системы типов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.10 21:49
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>В этой строке нет ни слова о классах — только об интерфейсах.


Хм, а некий известный заранее интерфейс может не являться типом?
AVK Blog
Re[9]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 21:53
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


FDS>>В этой строке нет ни слова о классах — только об интерфейсах.


AVK>Хм, а некий известный заранее интерфейс может не являться типом?


Хм. Хм. Хмммм...
Скажем так: не обязательно, что этот интерфейс как-то отмечен и имеет название (см. спор про операцию "+"), следовательно, говорить о типе можно примерно так же, как говорить о конечном автомате в программе, где есть парсинг, который можно сделать путём объявления конечного автомата.
То бишь математически тип конечно есть, но фактически этот тип уже никому не нужен — он не помечается и не объявляется и сам термин "тип" можно не использовать.
Re[14]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 21:53
Оценка:
Здравствуйте, FDSC, Вы писали:

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


FDS>>>И кто же определил такой тип? Или по-вашему достаточно того, чтобы он фактически был, а синтаксическое определение и явное использование понятия "тип" не обязательно?


S>>Нет, не обязательно. Существует толпа языков, не использующих тип явно, в отличии от языков, в которых бы не было типа совсем.


FDS>Т.е. это означает, что объект в этой толпе языков имеет множество типов вне одной ветки дерева, а так же информация об этом неявно типе где-то хранится, или нет?


Нет, не означает

S>>В таком случае мне не понятно, что Вы имеет в виду под перегрузкой операторов вообще.


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


Тогда операция сложения может задаваться лишь типом (ассоциацией с процедурой сложения) первого аргумента. Задание этой операции у второго аргумента не обязательно.
Re[6]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 21:55
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


AVK>>>Хм. А как тогда трактовать статический полиморфизм ввиде перегрузки функций по количеству аргументов? Вроде бы в этом случае типы не нужны, нет?


D>>Это вопрос трактовки термина "тип". Если понимать его как способ классификации имеющихся сущностей, то разделение по арности — тоже род типизации.


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


В этом сообщении http://rsdn.ru/forum/philosophy/3664919.1.aspx
Автор: AndrewVK
Дата: 12.01.10
мне показалось, что вы говорите именно о голой абстракции — ведь интерфейс объекта может быть задан неявно — просто возможностью наличия или отсутствия некоторой операции (операции сложения, например)
Re[7]: Какие задачи решают системы типов
От: Курилка Россия http://kirya.narod.ru/
Дата: 11.01.10 21:58
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


AVK>>>>Хм. А как тогда трактовать статический полиморфизм ввиде перегрузки функций по количеству аргументов? Вроде бы в этом случае типы не нужны, нет?


D>>>Это вопрос трактовки термина "тип". Если понимать его как способ классификации имеющихся сущностей, то разделение по арности — тоже род типизации.


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


FDS>В этом сообщении http://rsdn.ru/forum/philosophy/3664919.1.aspx
Автор: AndrewVK
Дата: 12.01.10
мне показалось, что вы говорите именно о голой абстракции — ведь интерфейс объекта может быть задан неявно — просто возможностью наличия или отсутствия некоторой операции (операции сложения, например)


Т.е. по-твоему duck typing не является типизацией?
Re[8]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 22:00
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>Из адреса выводится объём памяти на указатель, так же, как и для любого другого массива данных.

S>Что бы это значило?

Это значит, что мы определяем объём памяти, который должен быть использован для хранения этого указателя, до бишь делаем примерно то же, что и когда декларируем поле int.

S>Тем не менее две функции одной сигнатуры и соглашения о вызове могут иметь разные реализации, соответсвенно по-разному использовать стек внутри себя. Я не понимаю к чему все это, тип функции не определяет объем памяти, используемой функцией.


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

FDS>>Я, признаться, ни разу не видел, чтобы при объявленном типе String прямо туда можно было бы запихнуть процедуру, а значит компилятор должен знать о том, что там хранится не сама строка, а процедура, т.е. имеет информацию о том, что эта процедура есть, нужно хранить указатель на неё, знает, как эту процедуру вызвать.


S>Прямо туда — это куда?


В поле типа String. Всегда вместо этого объявляется делегат, интерфейс или объект, приводимый к String

FDS>>Таким образом, объявляя процедуру как способ получения данных мы всё равно сообщаем компилятору некоторую информацию о способе хранения данных и их получения (точнее, о том, что данные выражаются в адресе функции и факте её вызова).

S>О способе хранения — нет. О способе их получения — не факт. Эта информация может быть получена динамически.

О способе хранения — да. См. выше про хранение аргументов функции и указателя на неё.
О способе получения — да, так как мы должны вызвать функцию и отвести место, куда будем получать результат (если результат сложный — то место под указатель на результат)
Re[6]: Какие задачи решают системы типов
От: deniok Россия  
Дата: 11.01.10 22:00
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

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


AVK>>>Хм. А как тогда трактовать статический полиморфизм ввиде перегрузки функций по количеству аргументов? Вроде бы в этом случае типы не нужны, нет?


D>>Это вопрос трактовки термина "тип". Если понимать его как способ классификации имеющихся сущностей, то разделение по арности — тоже род типизации.


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


Для подсистемы диспетчеризации отношение таких сущностей (скажем,f(a,b) и f(a,b,c)) к разным типам — самая реальная реальность. А то что программисту не надо тут писать типы, так и в Хаскелле их тоже можно почти нигде не писать — их компилятор выводит для проверки. Я не вижу здесь принципиальной разницы.
Re[8]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 22:07
Оценка:
Здравствуйте, Курилка, Вы писали:

FDS>>В этом сообщении http://rsdn.ru/forum/philosophy/3664919.1.aspx
Автор: AndrewVK
Дата: 12.01.10
мне показалось, что вы говорите именно о голой абстракции — ведь интерфейс объекта может быть задан неявно — просто возможностью наличия или отсутствия некоторой операции (операции сложения, например)


К>Т.е. по-твоему duck typing не является типизацией?


Не совсем: если при этом речь идёт об объявленном типе — то является типизацией, а если просто идёт проверка на наличие и совместимость некоторых операций, то нет, тогда это просто проверка. Так же, как не является проверкой типа операция проверки на чётность числа if (a mod 2)ф [для особо аккуратных if (a and 1 == 0)], но от неё вполне может зависеть ветка исполнения программы
Re[10]: Какие задачи решают системы типов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.10 22:08
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Скажем так: не обязательно, что этот интерфейс как-то отмечен и имеет название (см. спор про операцию "+")


Ну ты же сам их назвал — строка, число.
AVK Blog
Re[7]: Какие задачи решают системы типов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.10 22:08
Оценка:
Здравствуйте, deniok, Вы писали:

D>Для подсистемы диспетчеризации отношение таких сущностей (скажем,f(a,b) и f(a,b,c)) к разным типам — самая реальная реальность.


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

D> А то что программисту не надо тут писать типы, так и в Хаскелле их тоже можно почти нигде не писать — их компилятор выводит для проверки.


Нельзя писать != отсутствуют. Потому что как только они несовпадут, к примеру, ты сразу о существовании типов в Хаскеле узнаешь.
AVK Blog
Re[15]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 22:09
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>Т.е. это означает, что объект в этой толпе языков имеет множество типов вне одной ветки дерева, а так же информация об этом неявно типе где-то хранится, или нет?


S>Нет, не означает


Тогда я могу назвать операцией типизации конструкцию if a mod 2 then ?

S>>>В таком случае мне не понятно, что Вы имеет в виду под перегрузкой операторов вообще.


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


S>Тогда операция сложения может задаваться лишь типом (ассоциацией с процедурой сложения) первого аргумента. Задание этой операции у второго аргумента не обязательно.


Тогда может оказаться, что операция сложения вылетит в связи с несовместимостью типов.
Re[9]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 22:09
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>Тем не менее две функции одной сигнатуры и соглашения о вызове могут иметь разные реализации, соответсвенно по-разному использовать стек внутри себя. Я не понимаю к чему все это, тип функции не определяет объем памяти, используемой функцией.


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


object*object -> object.
Много чего сказало это компилятору о том как хранить данные?

FDS>>>Я, признаться, ни разу не видел, чтобы при объявленном типе String прямо туда можно было бы запихнуть процедуру, а значит компилятор должен знать о том, что там хранится не сама строка, а процедура, т.е. имеет информацию о том, что эта процедура есть, нужно хранить указатель на неё, знает, как эту процедуру вызвать.


S>>Прямо туда — это куда?


FDS>В поле типа String. Всегда вместо этого объявляется делегат, интерфейс или объект, приводимый к String

Я тоже не встречал такого бреда — в поле типа String засунуть процедуру. Спишем это на позднее время

FDS>>>Таким образом, объявляя процедуру как способ получения данных мы всё равно сообщаем компилятору некоторую информацию о способе хранения данных и их получения (точнее, о том, что данные выражаются в адресе функции и факте её вызова).

S>>О способе хранения — нет. О способе их получения — не факт. Эта информация может быть получена динамически.

FDS>О способе хранения — да. См. выше про хранение аргументов функции и указателя на неё.

Не исключаю что функция object*object -> object положит аргументы в словарь и вернет словарь. А может положить их в список и вернуть список, а может записать их в файл и вернуть хэндл файла. Так что сигнатура и соглашение не говорят ничего компилятору о способе хранения переданных данных.

FDS>О способе получения — да, так как мы должны вызвать функцию и отвести место, куда будем получать результат (если результат сложный — то место под указатель на результат)

мы должны вызвать функцию, чтобы получить данные обратно. Зачем об этой функции что-то знать компилятору?
Re[11]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 22:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


FDS>>Скажем так: не обязательно, что этот интерфейс как-то отмечен и имеет название (см. спор про операцию "+")


AVK>Ну ты же сам их назвал — строка, число.


Это я их назвал, но это не значит, что они объявлены специально как целое 32-битное число и т.п. То бишь для компилятора разница лишь в том, какие методы объявлены в этих объектах
Re[16]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 22:13
Оценка:
Здравствуйте, FDSC, Вы писали:

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


FDS>>>Т.е. это означает, что объект в этой толпе языков имеет множество типов вне одной ветки дерева, а так же информация об этом неявно типе где-то хранится, или нет?


S>>Нет, не означает


FDS>Тогда я могу назвать операцией типизации конструкцию if a mod 2 then ?


Вы — можете. Уверен в этом теперь.

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


S>>Тогда операция сложения может задаваться лишь типом (ассоциацией с процедурой сложения) первого аргумента. Задание этой операции у второго аргумента не обязательно.


FDS>Тогда может оказаться, что операция сложения вылетит в связи с несовместимостью типов.


Иначе может оказаться что вылетит операция диспетчеризации метода сложения
Re[12]: Какие задачи решают системы типов
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.10 22:18
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Это я их назвал, но это не значит, что они объявлены специально как целое 32-битное число и т.п.


Если эти термины имеют какой то смысл в контексте языка (не реализации), то таки типы есть.

FDS> То бишь для компилятора разница лишь в том, какие методы объявлены в этих объектах


Все, как только компилятор знает про объявленные методы, сразу же имеем типы. Единственная возможность поиметь полиморфизм операторов без типов — язык, в котором методы привязываются к экземплярам в рантайме.
AVK Blog
Re[10]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 22:18
Оценка:
Здравствуйте, samius, Вы писали:

S>object*object -> object.

S>Много чего сказало это компилятору о том как хранить данные?

Столько, сколько ему нужно. Это сказало компилятору, что нужно выделить 8 байт в стеке для аргументов и байта на результат (для 32-битной архитектуры)

FDS>>>>Я, признаться, ни разу не видел, чтобы при объявленном типе String прямо туда можно было бы запихнуть процедуру, а значит компилятор должен знать о том, что там хранится не сама строка, а процедура, т.е. имеет информацию о том, что эта процедура есть, нужно хранить указатель на неё, знает, как эту процедуру вызвать.


S>>>Прямо туда — это куда?


FDS>>В поле типа String. Всегда вместо этого объявляется делегат, интерфейс или объект, приводимый к String

S>Я тоже не встречал такого бреда — в поле типа String засунуть процедуру. Спишем это на позднее время

Ну вот, а значит когда мы объявляем вызов функции, которая возвращает строку, то это не то же самое, что объявление строки

S>Не исключаю что функция object*object -> object положит аргументы в словарь и вернет словарь. А может положить их в список и вернуть список, а может записать их в файл и вернуть хэндл файла. Так что сигнатура и соглашение не говорят ничего компилятору о способе хранения переданных данных.


Говорят. Я уже писал, выше в этом сообщении и в предыдущем сообщении, но ты невнимательно прочитал.
Объявление функции object * object -> object говорит компилятору, что он делает приращение вершины стека на 2 указателя (8-мь или 16-ть байт, в зависимости от архитектуры), определяет место под результат в виде 1 указателя, ставит команду call на месте вызова функции и передаёт ей указатель на эту функцию. А если ты хочешь, чтобы в одной строчке программы сразу объявить как и что она делает и хранит, то ты многого хочешь. Достаточно того, что компилятор из этой строки узнал новую и необходимую для него информацию.

FDS>>О способе получения — да, так как мы должны вызвать функцию и отвести место, куда будем получать результат (если результат сложный — то место под указатель на результат)

S>мы должны вызвать функцию, чтобы получить данные обратно. Зачем об этой функции что-то знать компилятору?
Чтобы её правильно вызвать, как ты понимаешь.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.