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

FDS>>Информация о типе, хранящаяся в голове программиста — это абстракция. Т.е. у компилятора, получается, системы типов технологически нет, соответственно и функции она никакой в языке не играет.


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


Где ж тут система типов? Система типов позразумевает определение типов объектов, а мы нигде не определяем типы, мы определяем только сами объекты, каждый из которых может состоять из уникального набора полей

S>Назови уже в конце концов язык без системы типов. Но не абстрактный, который ты придумал, а конкретный, существующий.


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

S>>>Ну да. В итоге получаем что наличие ассоциации с операцией сложения у двух операндов не обязательно.


FDS>>При условии, что определён порядок применения этой операции.


S>Не обязательно и все тут.


Это неверно, см. ниже

S>А что ты имеешь под порядком, ассоциативность? Если да, то с какого конца будешь вычислять 1 + 2 + 3 если ассоциативность не определена?


Ассоциативность-то тут причём?

Под порядком я имею в виду алгоритм того, от которого из объектов будет браться метод сложения — от первого, второго и/или третьего, если у каждого из них определена своя операция сложения. В противном случае мы получаем неоднозначность.
Например, у нас есть три объекта, по факту хранящих числа 1, 2 и 3. В первом объекте операция сложения складывает числа, во втором — преобразует числа в строки и конкатенирует их, в третьем — складывает числа и возвращает вещественный результат (то бишь с плавающей точкой).
Тогда возможны следующие варианты:
1. 1 и результат 1 + 2, получаем 1+2=3, 3 + 3 = 6 в целочисленном виде
2. 2 и 1, получаем 2 + 3 = "23", 1 + "23" = 1 + 0x5051 = 0x5052 = 20562 в целочисленном виде (хотя, возможно, будет access violation или непредсказуемый результат, т.к. строка только два байта, а нужно целых четыре)
3. 3 и результат 2 + 3, тогда 2 + 3 = 5.0, 1 + 5.0 = 6.0

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

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


S>>Не понимаю, что имеется в виду под хранением имени и списка параметров.


S>>Я имел в виду нечто вроде определений cons ...


FDS>Ты имеешь в виду высокоуровневые вещи, а говорят тебе о низкоуровневых — о том как, если бы дело в asm, ты хранил бы параметры.

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

Еще раз говорю, процедура может сохранить параметры в файл, может послать по почте. Тип процедуры говорит о том, что процедура сделала с параметрами?
Причем тут стек и asm?

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


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

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

S>Причем тут стек и asm?

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

Соответственно, я вам привёл пример того, что объявление процедуры декларирует инфомацию о хранении данных. При этом тут asm и стек.


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


S>А о чем говорит компилятору хэндл файла?


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

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


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


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


Процедурные типы хранят данные еще до того как состоялся вызов процедуры. Хватит нести чушь про стек и регистры.

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


S>>Кто-то утверждал обратное?


FDS>Да, ты утверждал, что

FDS>

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

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

FDS>Процедурный тип говорит компилятору, что у него нет объекта String, т.е. указывает его способ получения. Если бы процедурный тип ничего не говорил компилятору о способе хранения данных, то мы могли бы записать указатель на процедуру прямо в String, или наоборот, String в указатель на процедуру — компилятор бы не различал объекты String и сами процедуры.

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

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


FDS>Кто-то утверждал обратное?

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

FDS>Ты правда такой или притворяешься?

Я бы подумал что именно ты притворяешься, но теперь я думаю что ты не желаешь разобраться с процедурными типами данных и споришь о чем-то своем.

FDS>Давай по пунктам, какой из них непонятен.


FDS>1. Тип процедуры есть информация — это понятно?

Это банальность вроде того что программа есть информация.

FDS>Если да, то

FDS>2. Тип процедуры указывает на то, что она процедура, т.е. её надо вызывать и что для вызова используется указатель
FDS>Ели это тоже понятно, то
FDS>3. Тип аргументов процедуры (т.е. сама сигнатура процедуры, её тип) указывает компилятору, как аргументы хранятся при вызове.
FDS>Если это тоже понятно, то
FDS>4. Пункты 2 и 3 и есть информация, которую компилятор использует для правильного вызва, который включает хранение в стеке или регистрах аргументов
FDS>Если это тоже понятно, то
FDS>5. Это и есть та информация о хранении данных, о которой указывает тип процедуры
FDS>Если это тоже понятно, то
FDS>6. Все остальные данные и информация о них абсолютно пофигу, независимо от того и где они, 5-ый пункт доказывает, что тип функции, как и любой другой тип, указывает компилятору, как хранить некоторую информацию.
FDS>Если это понятно, то
FDS>7. О том, что он указывает как хранить что-то кроме аргументов функции и указателя на функцию я никогда не утверждал

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

S>Процедурные типы хранят данные еще до того как состоялся вызов процедуры.


И?

S> Хватит нести чушь про стек и регистры.


Т.е. по-твоему, всё что я сказал про стек и регистры — это чушь? Поздравляю

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


Ну если ты не хочешь спорить — это твои проблемы.

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

S>Ты утверждаешь то, что тип функции определяет то, что функция будет делать с данными.

Приведи конкретную цитату, где я это сказал.

FDS>>Ты правда такой или притворяешься?

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

Да ну?

FDS>>Давай по пунктам, какой из них непонятен.


FDS>>1. Тип процедуры есть информация — это понятно?

S>Это банальность вроде того что программа есть информация.

Я не понял, тебе этот пункт понятен или нет? Программа программой, но информация о типе процедуры есть именно информация о типе процедуры, с этим ты, надеюсь, не споришь?

FDS>>Если да, то

FDS>>2. Тип процедуры указывает на то, что она процедура, т.е. её надо вызывать и что для вызова используется указатель
FDS>>Ели это тоже понятно, то
FDS>>3. Тип аргументов процедуры (т.е. сама сигнатура процедуры, её тип) указывает компилятору, как аргументы хранятся при вызове.
FDS>>Если это тоже понятно, то
FDS>>4. Пункты 2 и 3 и есть информация, которую компилятор использует для правильного вызва, который включает хранение в стеке или регистрах аргументов
FDS>>Если это тоже понятно, то
FDS>>5. Это и есть та информация о хранении данных, о которой указывает тип процедуры
FDS>>Если это тоже понятно, то
FDS>>6. Все остальные данные и информация о них абсолютно пофигу, независимо от того и где они, 5-ый пункт доказывает, что тип функции, как и любой другой тип, указывает компилятору, как хранить некоторую информацию.
FDS>>Если это понятно, то
FDS>>7. О том, что он указывает как хранить что-то кроме аргументов функции и указателя на функцию я никогда не утверждал

S>Тогда ты наверно не будешь спорить, что может существовать 2 разных процедуры с одним типом, которые делают с данными разные вещи?


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

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


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


FDS>Где ж тут система типов? Система типов позразумевает определение типов объектов

Я понял мысль, если нет оператора typeof, значит нет системы типов?

S>>Назови уже в конце концов язык без системы типов. Но не абстрактный, который ты придумал, а конкретный, существующий.


FDS>Зачем? Я специально использую абстракцию, чтобы отделить то, что привносят типы, от того, что они не привносят. Однако язык без типов в практическом программировании — это нонсенс.


Тогда предлагаю тебе поспорить с абстрактным собеседником.

S>>>>Ну да. В итоге получаем что наличие ассоциации с операцией сложения у двух операндов не обязательно.


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


member lookup ты имеешь в виду )))

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

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


S>> Хватит нести чушь про стек и регистры.


FDS>Т.е. по-твоему, всё что я сказал про стек и регистры — это чушь? Поздравляю


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

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


FDS>Ну если ты не хочешь спорить — это твои проблемы.


Я не вижу с твоей стороны понимания обсуждаемого вопроса.

S>>Ты утверждаешь то, что тип функции определяет то, что функция будет делать с данными.


FDS>Приведи конкретную цитату, где я это сказал.


Лень

FDS>>>Ты правда такой или притворяешься?

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

FDS>Да ну?


FDS>>>Давай по пунктам, какой из них непонятен.


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


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

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


FDS>>Где ж тут система типов? Система типов позразумевает определение типов объектов

S>Я понял мысль, если нет оператора typeof, значит нет системы типов?

Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов.

S>>>Назови уже в конце концов язык без системы типов. Но не абстрактный, который ты придумал, а конкретный, существующий.


FDS>>Зачем? Я специально использую абстракцию, чтобы отделить то, что привносят типы, от того, что они не привносят. Однако язык без типов в практическом программировании — это нонсенс.


S>Тогда предлагаю тебе поспорить с абстрактным собеседником.


Какой в этом смысл?

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


S>member lookup ты имеешь в виду )))

S>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?

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

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


Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву.

S>Я не вижу с твоей стороны понимания обсуждаемого вопроса.


А я — с твоей. И? Кстати, это уже оффтопик.

S>>>Ты утверждаешь то, что тип функции определяет то, что функция будет делать с данными.


FDS>>Приведи конкретную цитату, где я это сказал.


S>Лень


Не лень, а не можешь, потому что я этого не говорил.

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


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

FDS>>Приведи конкретную цитату, где я это сказал.


S>Лень


А ещё тебе лень ответить на это http://rsdn.ru/forum/philosophy/3665201.1.aspx
Автор: FDSC
Дата: 12.01.10
моё сообщение, т.к. тебе или придётся и дальше делать вид ничего не понимающего дурачка или наконец признать, что или ты был не прав, или опять же ты был не прав . Но ты почему-то игнорируешь это сообщение... лень, да... жуть
Re[24]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 10:21
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


FDS>>>Где ж тут система типов? Система типов позразумевает определение типов объектов

S>>Я понял мысль, если нет оператора typeof, значит нет системы типов?

FDS>Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов.

Что такое служебные функции языка?

S>>member lookup ты имеешь в виду )))

S>>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?

FDS>Компилятор тоже должен все десять способов вызвать? И все десять разных результатов запихнуть в один объект?

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

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


FDS>>>Приведи конкретную цитату, где я это сказал.


S>>Лень


FDS>Не лень, а не можешь, потому что я этого не говорил.


Пусть не говорил, мне поровну

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


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


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

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


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


FDS>Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву.

Это — чушь
Re[8]: Какие задачи решают системы типов
От: Temoto  
Дата: 12.01.10 10:29
Оценка:
T>>... и, соответственно, вопрос был в том как на основании двух одинаковых + :: Object -> Object -> Object компилятор узнает, что нужно подставить ADD, на какие ячейки памяти нужно ссылаться. Давайте попытаемся представить себе действия компилятора.

FDS>1. Есть указатели на объекты a и b

FDS>2. В этих объектах хранятся данные объекта в двух возможных вариантах: а) сами данные объекта как первичного типа (секция неименованных данных) б) объекты-поля в словаре полей (секция именованных полей)
FDS>3. В этих объектах хранится словарь методов, которые принимают указатели на объекты и заранее известно для каждого метода, сколько указателей принимает, и сколько возвращает

FDS>Тогда

FDS>1. Компилятор находит объекты a и b как операнды оператора "+".
FDS>2. В зависимости от соглашения, допустм, сравнивает, имеют ли a и b методы "+" и если имеют, равны ли они (совместимы ли) или просто вызывает один из методов по заранее определённому соглашению (мне нравится первый вариант, но samius указал на возможность и второго)
FDS>3. Вызов метода происходит следующим образом: в него передаются два указателя на объект, сохраняется место для результата-объекта
FDS>4. Метод реализован так, что читает данные обоих аргументов-объектов из секции неименованных данных, сам метод знает, что они 32-разрядные и передаёт два 32-разрядных числа в операцию add процессора.
FDS>5. Получив результат создаёт новый объект, куда записывает получившийся результат в секцию неименованных данных, а так же указатели на методы, соответствующие соглашению (назначению метода)

Понятно, всё делает метод +. Всё ещё непонятно, как метод (+) :: Object -> Object -> Object имея на руках только два неименованных куска битов узнает, что к ним надо применить численное сложение, а не конкатенацию строк.
Re[25]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 10:30
Оценка:
Здравствуйте, samius, Вы писали:

FDS>>Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов.

S>Что такое служебные функции языка?

Это то, что делает компилятор, чтобы определить тип, например, получает имя типа, или, скажем, список его методов и полей.

S>>>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?


FDS>>Компилятор тоже должен все десять способов вызвать? И все десять разных результатов запихнуть в один объект?

S>Компиялтор может вызвать первый попавшийся

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

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


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


Сам разберись сначала о чём я с тобой спорю — прочитай внимательно на что я первоначально отвечал и подумай, причём тут вообще способ получения и хранения данных внутри процедур (подсказка: он не при чём).
Re[11]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 10:33
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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

S>>Причем тут стек и asm?

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

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

FDS>Соответственно, я вам привёл пример того, что объявление процедуры декларирует инфомацию о хранении данных. При этом тут asm и стек.


Этот пример не опровергает моего утверждения, более того он не имеет отношения к вопросу.

Вот пример обратного

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

(define (car z) (z 0))

(define (cdr z) (z 1))
[/scheme]


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


S>>А о чем говорит компилятору хэндл файла?


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


О 4х байтах может и говорит, но о том в каком месте файла, и вообще в файле ли данные — нет.
Re[18]: Какие задачи решают системы типов
От: FDSC Россия consp11.github.io блог
Дата: 12.01.10 10:35
Оценка:
Здравствуйте, samius, Вы писали:

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


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


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


FDS>>Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву.

S>Это — чушь

Пример в студию. Каким образом я буду переходить по синтаксическому дереву не выделяя при этом дополнительно памяти на рекурсию и запоминание самого факта вызова?
Рекурсивный вызов не может быть переходом по синтаксическому дереву, так как это уже переход по графу потока управления, который имеет циклы и деревом вообще не является.
Re[19]: Какие задачи решают системы типов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 12.01.10 10:36
Оценка:
Здравствуйте, FDSC, Вы писали:

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


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


FDS>Сам разберись сначала о чём я с тобой спорю — прочитай внимательно на что я первоначально отвечал и подумай, причём тут вообще способ получения и хранения данных внутри процедур (подсказка: он не при чём).


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

T>Понятно, всё делает метод +. Всё ещё непонятно, как метод (+) :: Object -> Object -> Object имея на руках только два неименованных куска битов узнает, что к ним надо применить численное сложение, а не конкатенацию строк.


Метод "+" ничего не узнаёт, он просто складывает два целых числа, так как в числах он именно такой.
В строках метод "+" определён другим способом — он уже выполняет конкатенацию.

Указатель на конкретный метод "+" каждый объект получает от программиста в свой словарь методов — что программист дал, то и есть, т.е. сам метод считает, что он применим к нужному куску битов без какой-либо проверки.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.