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

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


S>>Ни чем. Я не считаю это за определение.


FDS>Ну а я не считаю за определение ваше определение. И?

Тогда мы ни о чем не договоримся.
Кстати, я использую общепринятые определения, а не выдумываю их.

FDS>Полиморфизм не обязан привязываться к типам и может не оперировать такими понятиями как "тип".


http://en.wikipedia.org/wiki/Type_polymorphism
Re[3]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 20:44
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Ограничение видимости... вот в питоне, например, ограничение *видимости* делается как раз без типов. Когда метод называется с двух подчёркиваний, его ровно с таким именем "снаружи" не видно. Его видно иначе, как Class__name, но это детали. В гипотетическом языке можно сделать синтаксической ошибкой x.__foo() и не ошибкой this.__foo(); если при этом this будет зарезервированным словом, и любому объекту можно добавить метод __foo "на лету" — получается ограничение без типов.


Уязвили, если считать типы именно так, как я их считал, когда писал сообщение . Вы правы

T>Ещё интересно подробнее про "приводить типы вверх по дереву и унифицированно обращаться с ними". Система типов позволяет приводить типы вверх по дереву. Честно говоря, я не понял фразу.


Я в том смысле, что если у нас есть геометрические фигуры и все эти фигуры нужно переместить на какое-то расстояние, то их всех можно привести к базовому классу с реализацией метода move и работать именно с этими объектами ни о чём не задумываясь, хотя при этом каждый из них не потеряет своей индивидуальности.
Хотя, конечно, здесь можно сказать, что мы можем просто добавить в каждый объект метод move и системы типов не нужно , но тут всё же базовый тип сам собой появляется — все объекты, имеющие метод move с данной сигнатурой.

T>И про это тоже: "предоставлять стандартные интерфейсы без реализации". В гипотетическом языке каждый объект это словарь имя:метод (хороший пример — Javascript). Вы вызываете метод length, чтобы получить длину объекта dreams (допустим это список снов). Не совсем понятно, имеет ли тут место "предоставление интерфейсов" или нет. Вроде всё работает, в документации описан интерфейс: length :: Object -> Int, однако назначать для этого специальный тип объекту dreams не нужно.


Мда, я, кажется, вырыл себе терминологическую яму...
Я имел в виду то, что все объекты с заданным интерфейсом в некотором смысле являются объектами одного типа и мы этот тип требуем, т.е. описатель типа декларирует что именно должно предоставлятся и как. И если, например, при десериализации объекта без описателя типа мы не можем понять, удовлетворяет ли объект интерфейсу, то если тип описан, то по этому описателю типа мы поймём, если сохранённый объект какой-то не такой, иначе — поймём только когда программа будет неправильно работать — то бишь речь идёт про проверку корректности при взаимодействии разных модулей, а не при компиляции.
Re[7]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 20:48
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>a и b есть два параметра, результат является вызовом функции, представляющей реализацию оператора "+"

FDS>>Например,
FDS>>a и b — числа
FDS>>Тогда им соответствует функция сложения именно двух чисел (например, ассемблерная вставка или побитовое сложение соответствующей области памяти )
FDS>>a и b — строки
FDS>>Тогда им соответствует функция конкантенации, т.е. совмещения двух областей памяти в одну последовательно.

S>И чем же здесь являются понятия "числа" и "строки"?


Грубо говоря, именами типов, которые я использую для доходчивости. Что, вообще говоря, не говорит о том, что в реале операция порождает какие-либо типы (хотя требует объекты с наличествующей одинаковой операцией сложения). То бишь нам совершенно не важно знать типы объектов, чтобы работать с операцией "+", важно лишь знать наличие одинаково определённой такой операции.
Re[7]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 20:57
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>Ну а я не считаю за определение ваше определение. И?

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

И где же ссылка на стандарт? Кто эти определения признал общепринятыми?

FDS>>Полиморфизм не обязан привязываться к типам и может не оперировать такими понятиями как "тип".


S>http://en.wikipedia.org/wiki/Type_polymorphism


Ага, обратите внимание — полиморфизм ТИПОВ. А я про типы ни слова не говорил. Поищите другое определение, где не было бы слова "типы", но было бы слово "полиморфизм"

Википедия против википедии: http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29

взаимозаменяемость объектов с одинаковым интерфейсом.

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

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

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


FDS>>>a и b есть два параметра, результат является вызовом функции, представляющей реализацию оператора "+"

FDS>>>Например,
FDS>>>a и b — числа
FDS>>>Тогда им соответствует функция сложения именно двух чисел (например, ассемблерная вставка или побитовое сложение соответствующей области памяти )
FDS>>>a и b — строки
FDS>>>Тогда им соответствует функция конкантенации, т.е. совмещения двух областей памяти в одну последовательно.

S>>И чем же здесь являются понятия "числа" и "строки"?


FDS>Грубо говоря, именами типов, которые я использую для доходчивости. Что, вообще говоря, не говорит о том, что в реале операция порождает какие-либо типы (хотя требует объекты с наличествующей одинаковой операцией сложения). То бишь нам совершенно не важно знать типы объектов, чтобы работать с операцией "+", важно лишь знать наличие одинаково определённой такой операции.


Ваше право называть это чем угодно, но по общепринятой классификации систем типов — это динамическая типизация.
Кстати, условие об одинаково определенной операции — совершенно необязательное условие для реализации ad-hoc полиморфизма.
Re[4]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 21:01
Оценка:
Здравствуйте, samius, Вы писали:

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


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


T>>Хранение — бесспорно, спасибо.

S>Здесь есть варианты. Например, процедурные типы данных. Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных.

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

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


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

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


S>>http://en.wikipedia.org/wiki/Type_polymorphism


FDS>Ага, обратите внимание — полиморфизм ТИПОВ. А я про типы ни слова не говорил. Поищите другое определение, где не было бы слова "типы", но было бы слово "полиморфизм"


FDS>Википедия против википедии: http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29


В свою очередь это один из подвидов полиморфизма типов.

FDS>

FDS>взаимозаменяемость объектов с одинаковым интерфейсом.

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

FDS>Если вам так больше будет нравится, можем говорить о перегрузке операторов, а не полиморфизме — хотя суть останется одна и та же.


Перегрузка операторов — частный случай полиморфизма типов.
Re[8]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 21:07
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


FDS>Это не так.

FDS>1. Нам совершенно не нужно знать тип объекта и отождествлять объект с его типом для того, чтобы реализовать полиморфизм некоторой операции
Это верно в общем случае. Но для ad-hoc полиморфизма тип — обязательное явление.

FDS>2. Тип может задаваться объектом и иметь только один экземпляр — говорить при этом о системе типов абсурдно.

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

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


У меня есть два объекта — a и b, у них есть только одна совпадающая операция — операция сложения: какой тип у этих объектов по общепринятой классификации?

S>Кстати, условие об одинаково определенной операции — совершенно необязательное условие для реализации ad-hoc полиморфизма.


А если конкретнее, как это сделать без одинаково определённой операции?
Re[10]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 21:12
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


FDS>У меня есть два объекта — a и b, у них есть только одна совпадающая операция — операция сложения: какой тип у этих объектов по общепринятой классификации?


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

S>>Кстати, условие об одинаково определенной операции — совершенно необязательное условие для реализации ad-hoc полиморфизма.


FDS>А если конкретнее, как это сделать без одинаково определённой операции?


Пример:
сигнатура оператора сложения со строкой в C# имеет тип
(+) :: String -> Object -> String
за счет того что можно получить строковое представление любого объекта.
Re[9]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 11.01.10 21:14
Оценка:
Здравствуйте, samius, Вы писали:

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


FDS>>Это не так.

FDS>>1. Нам совершенно не нужно знать тип объекта и отождествлять объект с его типом для того, чтобы реализовать полиморфизм некоторой операции
S>Это верно в общем случае. Но для ad-hoc полиморфизма тип — обязательное явление.

Если я правильно понимаю, ad-hoc полиморфизм и есть перегрузка операторов (кстати, где здесь слово "тип") и типы там совершенно не нужны. О чём уже писал. Или вы имеете в виду какое-то моё упущение?

FDS>>2. Тип может задаваться объектом и иметь только один экземпляр — говорить при этом о системе типов абсурдно.

S>Абсудрно говорить о системе типов в привязке к количеству экземпляров.

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

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


S>>Здесь есть варианты. Например, процедурные типы данных. Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных.


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

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

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

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

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


FDS>Это как? Я не понял

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

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


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


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


FDS>>У меня есть два объекта — a и b, у них есть только одна совпадающая операция — операция сложения: какой тип у этих объектов по общепринятой классификации?


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


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

S>>>Кстати, условие об одинаково определенной операции — совершенно необязательное условие для реализации ad-hoc полиморфизма.


FDS>>А если конкретнее, как это сделать без одинаково определённой операции?


S>Пример:

S>сигнатура оператора сложения со строкой в C# имеет тип
S>(+) :: String -> Object -> String
S>за счет того что можно получить строковое представление любого объекта.

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

S>Исходя из определения полиморфизма — это вряд ли.


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

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


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

S>>Это верно в общем случае. Но для ad-hoc полиморфизма тип — обязательное явление.

FDS>Если я правильно понимаю, ad-hoc полиморфизм и есть перегрузка операторов (кстати, где здесь слово "тип") и типы там совершенно не нужны. О чём уже писал. Или вы имеете в виду какое-то моё упущение?


FDS>>>2. Тип может задаваться объектом и иметь только один экземпляр — говорить при этом о системе типов абсурдно.

S>>Абсудрно говорить о системе типов в привязке к количеству экземпляров.

FDS>Не абсурдно. Т.к. если у нас тип задаётся объектом, то использование самого понятия тип становится абсурдным. Так же как использование понятия "список" становится абсурдным, когда мы постоянно говорим о списке из одного объекта — легче сразу говорить об этом объекте, список не нужен.


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

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


S>>Исходя из определения полиморфизма — это вряд ли.


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

Точно, в этом случае не нужны.
Re[4]: Какие задачи решают системы типов
От: deniok Россия  
Дата: 11.01.10 21:30
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


S>>Исходя из определения полиморфизма — это вряд ли.


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


Это вопрос трактовки термина "тип". Если понимать его как способ классификации имеющихся сущностей, то разделение по арности — тоже род типизации. Типы же не обязательно строго зашиты; мы можем приписывать их для своих нужд. Главное, чтобы от этого польза была.
Re: Какие задачи решают системы типов
От: TimurSPB Интернет  
Дата: 11.01.10 21:30
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Привет.


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

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

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

В инновационных проектах (особенно инет), которые постоянно меняются и развиваются, когда нужны быстрые решения — языки со слабой типизацией. Phyton, PHP, Ruby и etc.
В суровых промышленных проектах, с реальным временем и прочими удовольствиями — ASM/C/C++.
Ну и золотая середина — конкурентные С# и Java. Это бизнес, банки, госуправление.
В больших проектах, в зависимости от задач пригодно всё, что позволяет решать конкретные задачи и подзадачи.
Make flame.politics Great Again!
Re[12]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.01.10 21:30
Оценка:
Здравствуйте, FDSC, Вы писали:

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


FDS>>>У меня есть два объекта — a и b, у них есть только одна совпадающая операция — операция сложения: какой тип у этих объектов по общепринятой классификации?


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


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


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

S>>>>Кстати, условие об одинаково определенной операции — совершенно необязательное условие для реализации ad-hoc полиморфизма.


FDS>>>А если конкретнее, как это сделать без одинаково определённой операции?


S>>Пример:

S>>сигнатура оператора сложения со строкой в C# имеет тип
S>>(+) :: String -> Object -> String
S>>за счет того что можно получить строковое представление любого объекта.

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


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

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


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


S>>>Здесь есть варианты. Например, процедурные типы данных. Очевидно, что процедура имеет тип, но этот тип ничего не говорит компилятору/интерпретатору о способе хранения данных.


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

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

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

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

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

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

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


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