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

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


S>>Теперь ответь как способ хранения некоторых данных замыкания влияет на тип функции


FDS>Это тип функции влияет на способ хранения данных замыкания, т.к. в твоём примере

FDS>
FDS>(define (cons x y)
FDS>(define (dispatch m)
FDS>(cond ((= m 0) x)
FDS>((= m 1) y)
FDS>(else (error "Argument not 0 or 1 -- CONS" m))))
FDS>dispatch)
FDS>

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

Запиши тип функции cons, как ты его себе представляешь
Re[18]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 12:16
Оценка:
Здравствуйте, Temoto, Вы писали:

FDS>>>>А другой вопрос мы не обсуждаем, т.к. обсуждается твоё утверждение о том, что декларация типа процедуры не объявляет вообще никакой информации о хранении данных.

S>>>Я имел в виду хранение данных а не передачу аргументов. Почувствуй разницу.

FDS>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.


T>Он говорил о том, что функция f = 15 хранит число 15. И это число можно получить посредством вызова функции.


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

Утверждать, что объявление функции не предоставляет нам никакой информации о хранении данных примерно то же самое, что утверждать, что object a нам тоже не представляет никакой информации о хранении данных. При этом этот object может хранить кучу всего разного, но факт того, что данные об этом разном не содержаться в объявлении object a никак не умаляют того факта, что объявление object a содержит информацию о хранении данных, которую использует компилятор.
С определением функции точно так же: она может возвращать лишь заголовок некоторого списка, но это не значит, что объявление функции не содержит данных о хранении некоторой информации, просто она не содержит данных именно о формате списка.
Re[22]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 12:17
Оценка:
Здравствуйте, samius, Вы писали:

S>Запиши тип функции cons, как ты его себе представляешь


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

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


S>>Запиши тип функции cons, как ты его себе представляешь


FDS>(cons x y)


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

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


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


S>>>Запиши тип функции cons, как ты его себе представляешь


FDS>>(cons x y)


S>остряк, браво!



Ну ладно, если понятней object * object -> object
Короче говоря, функция, которая принимает кортеж из двух переменных — это есть её тип
Re[19]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 12:34
Оценка: +1
FDS>>>Передача аргументов и есть хранение данных — этих самых аргументов. Об этом и спор — при определении типа функции определяется способ передачи аргументов, т.е. способ их хранения при передаче.

T>>Он говорил о том, что функция f = 15 хранит число 15. И это число можно получить посредством вызова функции.


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


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

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

То ли речь идёт о какой-то тонкой разнице в терминах...

То ли вот, допустим есть функция
elem :: List a -> Int -> a
, которая возвращает элемент списка по индексу. Применим частичную аппликацию:
elem_12 = elem [1,2]
. Тип функции elem_12 :: Int -> Int ничего не говорит нам о том, что она хранит список. Объявление функции не содержит данных о хранении некоторой информации (списке).

Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.
Re[25]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 12:38
Оценка:
Здравствуйте, FDSC, Вы писали:

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


S>>>>Запиши тип функции cons, как ты его себе представляешь


FDS>>>(cons x y)


FDS>

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

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

Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?
Re[20]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 12:44
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.


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

Смотри, какая разница

struct cons
{
    object * x;
    object * y;
}


или

(define (cons x y)
(define (dispatch m)
(cond ((= m 0) x)
((= m 1) y)
(else (error "Argument not 0 or 1 -- CONS" m))))
dispatch)


И объявление структуры cons, и объявление функции cons с замыканием не содержит информации о списке, т.е. совершенно эквивалентны, т.к. содержат только информацию о структуре пары (x, y) — в одном случае кортеж (x, y) определяется как структура с полями, в другом — как аргумент функции, при этом этот кортеж хранится в лексическом замыкании и определяя замыкание мы определяем, что этот кортеж будет хранится.

samius считает, что есть разница, но где? Её не видно — и там, и там для одной и той же структуры данных (списка, например) определяются одни и те же кортежи/структуры и информация представлена при объявлении функций точно такая же, как и при объявлении типа структуры.
Так где же тогда различие, объявляем мы тип данных как структуру или через лексическое замыкание?
Re[20]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 12:44
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.


Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.
Re[26]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 12:52
Оценка:
Здравствуйте, samius, Вы писали:

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


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


S>>>>>Запиши тип функции cons, как ты его себе представляешь


FDS>>>>(cons x y)


FDS>>

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

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

S>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?

Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся:
1. Где-то хранить путь к файлу
2. Определять так или иначе поля a и b
3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется
Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.
Re[21]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 12:59
Оценка:
Здравствуйте, samius, Вы писали:

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


T>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.


S>Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.


Тип

class IO
{
  property a
  {...}
  property b
  {...}

  private fileName;
}


так же ничего не говорит нам о том, откуда извлекаются данные — данные извлекаются в методах доступа как угодно: из поля, из файла, вычисляются, получаются по сети и т.п.
Кроме этого, само определение функции cons x y говорит, что данные хранятся в памяти. Если определение будет другое, то это будет говорить о том, что данные хранятся по другому, т.е. если

class IO
{
  property a
  {...}
  property b
  {...}

  private fileName;
}


то

(define (cons fileName) ...)


а если
class IO
{
  property a
  {return _a;}
  property b
  {return _b;}

  private _a;
  private _b;
}

то
(define (cons _a _b) ...)


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

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


T>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.


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

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

Хватит меня переиначивать. Я писал:

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

Тип, а не объявление

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


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


Выдумываешь тезисы за меня, ну-ну...

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


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

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


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


FDS>>>Ну ладно, если понятней object * object -> object

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

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

S>>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?

FDS>Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся:

FDS>1. Где-то хранить путь к файлу
FDS>2. Определять так или иначе поля a и b
FDS>3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется
FDS>Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.

На бис: и как это отражено в object * object -> object?

Споришь сам с собой теперь
Re[23]: Какие задачи решают системы типов
От: Mr.Cat  
Дата: 12.01.10 13:06
Оценка:
Здравствуйте, samius, Вы писали:
S>Нет статической, значит есть динамическая. А подразумевать-то конечно можно.
Для повышения уровня философичности беседы предлагаю вспомнить, что типизация затрагивает как объекты, так и их наименования в программе.
Re[22]: Объявления типов: функциональная и ОО парадигмы
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 13:06
Оценка:
Здравствуйте, samius, Вы писали:

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

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

S>Хватит меня переиначивать. Я писал:

S>

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

S>Тип, а не объявление

Я и говорю про тип и никого не переиначиваю. Объявление функции и объявляет её тип. Если ты не способен понять, что говоря про декларацию функции я говорю именно про декларацию её типа, то не надо на меня за это ругаться — я в этом не виноват.

Именно тип функции содержит информацию о данных в замыкании, а не что-то иное в её объявлении. Именно тип функции используется для того, чтобы определить тип кортежа, который будет хранится в лексическом замыкании.
Тип функции cons содержит данные о том, что хранится в лексическом замыкании dispatch, именно тип этой функции указывает компилятору что хранится, абсолютно как если бы мы указали определение структуры и операцию new вместо вызова cons
Re[22]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 13:06
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


T>>>Никто не утверждал, что объявление функции вообще никакой информации не содержит. (это как раз проблемы с квантором общности или как там) Он утверждал, что объявление функции не содержит информации о данных, хранящихся в замыкании.


S>>Все верно, но я не только замыкание имел в виду. Тип IO (a, b) не говорит нам о том, откуда извлекаются данные (a,b). Они могли храниться в замыкании, или в файле, чей хэндл хранится в замыкании.


FDS>Тип


FDS>
FDS>class IO
FDS>{
FDS>  property a
FDS>  {...}
FDS>  property b
FDS>  {...}

FDS>  private fileName;
FDS>}
FDS>


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

Вот об этом я и писал, нконец-то до тебя дошло. Не прошло и двухсот постов...

FDS>Кроме этого, само определение функции cons x y говорит, что данные хранятся в памяти. Если определение будет другое, то это будет говорить о том, что данные хранятся по другому, т.е. если


Определение? Я утверждал про тип, а не про определение.

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

А типы могут оставаться неизменными. МОГУТ!!! и НЕ ВСЕ ТИПЫ!!! Это на всякий случай..
Re[28]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 13:11
Оценка:
Здравствуйте, samius, Вы писали:

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


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


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


FDS>>>>Ну ладно, если понятней object * object -> object

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

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

S>>>Теперь прокомментируй это, только подумай, не мог ли я сохранить a и b в файл и оставить в замыкании путь к файлу?

FDS>>Мог, и что? То же самое можно сделать и при описании объектного типа: я делаю два свойства определённого типа и приватный путь к файлу. Однако и в описании этого типа я не описываю формат файла. И при описании лексического замыкания, и при описании объекта мне придётся:

FDS>>1. Где-то хранить путь к файлу
FDS>>2. Определять так или иначе поля a и b
FDS>>3. Читать данные из файла, при этом формат файла никак ни там, ни там не определяется
FDS>>Т.е. в обоих случаях я определяю абсолютно равное количество информации о полях a и b и файле, независимо от того, использую я функцию или объекты со свойствами или методами-акцессорами.

S>На бис: и как это отражено в object * object -> object?


Что именно отражено? В этом сообщении http://rsdn.ru/forum/philosophy/3665604.1.aspx
Автор: FDSC
Дата: 12.01.10
я отписался, как это делается на примере кода.
В частности, object * object -> object никакого отношения к хранению в файле не имеет Там сигнатура object -> object, т.к. ты в замыкании будешь хранить лишь имя файла — так это там и отражается

S>Споришь сам с собой теперь


С собой я точно не спорю, не надо передёргивать.
Re[24]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 13:12
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

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

Да, "затрагивает" — хороший термин.

10 Dim IntValue = 0
20 IntValue = "хаха!"

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

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

Ну вот, опять.

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


Покажи, как тип функции cons содержит данные о том что хранится в замыкании dispatch.
Напомню, ты привел следующий тип: object*object -> object
Re[21]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 13:16
Оценка:
FDS>samius считает, что есть разница, но где? Её не видно — и там, и там для одной и той же структуры данных (списка, например) определяются одни и те же кортежи/структуры и информация представлена при объявлении функций точно такая же, как и при объявлении типа структуры.
FDS>Так где же тогда различие, объявляем мы тип данных как структуру или через лексическое замыкание?

Хорошо, лично я для себя понял точку зрения обоих сторон. А ещё, что вам (обоим) интереснее продолжать спорить, нежели придти к соглашению.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.