Здравствуйте, 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
Возможны и другие варианты, поэтому без определения соглашения о порядке выполнения функций невозможно работать с такого рода полиморфизмом, если только у каждого из аргументов не определены один и те же функции сложения
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Не понимаю, что имеется в виду под хранением имени и списка параметров.
S>>Я имел в виду нечто вроде определений cons ...
FDS>Ты имеешь в виду высокоуровневые вещи, а говорят тебе о низкоуровневых — о том как, если бы дело в asm, ты хранил бы параметры. FDS>Т.е. тип процедуры определяет информацию о хранении данных, но, естественно, вовсе не ту, о которой ты говоришь
Еще раз говорю, процедура может сохранить параметры в файл, может послать по почте. Тип процедуры говорит о том, что процедура сделала с параметрами?
Причем тут стек и asm?
FDS>Так же, скажем, нетипизированный массив объявляет только о том, что данные занимают не более некоего объёма памяти, не говоря ничего об их структуре, но при этом ещё и говорит компилятору, что есть 4 байта на указатель на этот массив — т.е. говорит и о структуре и о размере некоторых других полей.
Здравствуйте, samius, Вы писали:
S>Еще раз говорю, процедура может сохранить параметры в файл, может послать по почте. Тип процедуры говорит о том, что процедура сделала с параметрами? S>Причем тут стек и asm?
Вы сказали о том, что тип процедуры не используется компилятором для получения информации о способе хранения данных, по крайней мере я так понял.
Понял я это из того, что вы стали возражать по поводу хранения, сказав "здесь есть варианты" так, как будто объявление процедуры не декларирует информацию о хранении данных.
Соответственно, я вам привёл пример того, что объявление процедуры декларирует инфомацию о хранении данных. При этом тут asm и стек.
FDS>>Так же, скажем, нетипизированный массив объявляет только о том, что данные занимают не более некоего объёма памяти, не говоря ничего об их структуре, но при этом ещё и говорит компилятору, что есть 4 байта на указатель на этот массив — т.е. говорит и о структуре и о размере некоторых других полей.
S>А о чем говорит компилятору хэндл файла?
Смотря как этот хэндл объявлен. Минимум — о том, что ему надо выделить 4 байта на хранение этого хэндла. Т.е. объявляя хэнд файла мы так же указываем информацию о способе хранения некоторых данных (собственно, хэндла файла)
Здравствуйте, 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 разных процедуры с одним типом, которые делают с данными разные вещи?
Здравствуйте, 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 разных процедуры с одним типом, которые делают с данными разные вещи?
Ты зря игнорируешь все семь пунктов — просто словами мы с тобой друг друга понять не можем, а по пунктам ты наверняка найдёшь в чём дело (хотя я в другом сообщении уже отписался насчёт того, что мы спорим немного о разных вещах).
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Я не понимаю, о чем ты. Если даже объекты состоят из словарей полей и методов, то это и есть система типов, которая будет играть определяющую роль в языке и его интерпретации.
FDS>Где ж тут система типов? Система типов позразумевает определение типов объектов
Я понял мысль, если нет оператора typeof, значит нет системы типов?
S>>Назови уже в конце концов язык без системы типов. Но не абстрактный, который ты придумал, а конкретный, существующий.
FDS>Зачем? Я специально использую абстракцию, чтобы отделить то, что привносят типы, от того, что они не привносят. Однако язык без типов в практическом программировании — это нонсенс.
Тогда предлагаю тебе поспорить с абстрактным собеседником.
S>>>>Ну да. В итоге получаем что наличие ассоциации с операцией сложения у двух операндов не обязательно.
FDS>Под порядком я имею в виду алгоритм того, от которого из объектов будет браться метод сложения — от первого, второго и/или третьего, если у каждого из них определена своя операция сложения. В противном случае мы получаем неоднозначность.
member lookup ты имеешь в виду )))
Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>> Хватит нести чушь про стек и регистры.
FDS>Т.е. по-твоему, всё что я сказал про стек и регистры — это чушь? Поздравляю
Пусть не чушь, я не вчитывался. Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
S>>Но проблема в том, что ты походу не догоняешь, что такое процедурные типы и несешь что-то про записывание указателя в строку. Мне жаль, но я не хочу разбираться в этом бреде.
FDS>Ну если ты не хочешь спорить — это твои проблемы.
Я не вижу с твоей стороны понимания обсуждаемого вопроса.
S>>Ты утверждаешь то, что тип функции определяет то, что функция будет делать с данными.
FDS>Приведи конкретную цитату, где я это сказал.
Лень
FDS>>>Ты правда такой или притворяешься? S>>Я бы подумал что именно ты притворяешься, но теперь я думаю что ты не желаешь разобраться с процедурными типами данных и споришь о чем-то своем.
FDS>Да ну?
FDS>>>Давай по пунктам, какой из них непонятен.
FDS>Ты зря игнорируешь все семь пунктов — просто словами мы с тобой друг друга понять не можем, а по пунктам ты наверняка найдёшь в чём дело (хотя я в другом сообщении уже отписался насчёт того, что мы спорим немного о разных вещах).
Дело в том, что ни один из пунктов не имеют отношения к обсуждаемому вопросу. Мы действительно спорим о разных вещах. Я о способах хранения данных в процедурных представлениях данных, а ты о способе передачи аргументов и возврата результата в процедурах.
Здравствуйте, samius, Вы писали:
S>>>Я не понимаю, о чем ты. Если даже объекты состоят из словарей полей и методов, то это и есть система типов, которая будет играть определяющую роль в языке и его интерпретации.
FDS>>Где ж тут система типов? Система типов позразумевает определение типов объектов S>Я понял мысль, если нет оператора typeof, значит нет системы типов?
Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов.
S>>>Назови уже в конце концов язык без системы типов. Но не абстрактный, который ты придумал, а конкретный, существующий.
FDS>>Зачем? Я специально использую абстракцию, чтобы отделить то, что привносят типы, от того, что они не привносят. Однако язык без типов в практическом программировании — это нонсенс.
S>Тогда предлагаю тебе поспорить с абстрактным собеседником.
Какой в этом смысл?
FDS>>Под порядком я имею в виду алгоритм того, от которого из объектов будет браться метод сложения — от первого, второго и/или третьего, если у каждого из них определена своя операция сложения. В противном случае мы получаем неоднозначность.
S>member lookup ты имеешь в виду ))) S>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?
Компилятор тоже должен все десять способов вызвать? И все десять разных результатов запихнуть в один объект?
Здравствуйте, samius, Вы писали:
S>Пусть не чушь, я не вчитывался. Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву.
S>Я не вижу с твоей стороны понимания обсуждаемого вопроса.
А я — с твоей. И? Кстати, это уже оффтопик.
S>>>Ты утверждаешь то, что тип функции определяет то, что функция будет делать с данными.
FDS>>Приведи конкретную цитату, где я это сказал.
S>Лень
Не лень, а не можешь, потому что я этого не говорил.
S>Дело в том, что ни один из пунктов не имеют отношения к обсуждаемому вопросу. Мы действительно спорим о разных вещах. Я о способах хранения данных в процедурных представлениях данных, а ты о способе передачи аргументов и возврата результата в процедурах.
Как раз все пункты имеют, просто ты совершенно не хочешь отвечать на то, что тебе говорят. Ты споришь как раз с тем самым абстрактным собеседником, с которым смысла спорить нет, вместо того, чтобы спорить с реальным собеседником или, хотя бы, читать его посты перед тем, как отвечать на них.
моё сообщение, т.к. тебе или придётся и дальше делать вид ничего не понимающего дурачка или наконец признать, что или ты был не прав, или опять же ты был не прав . Но ты почему-то игнорируешь это сообщение... лень, да... жуть
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>>>Я не понимаю, о чем ты. Если даже объекты состоят из словарей полей и методов, то это и есть система типов, которая будет играть определяющую роль в языке и его интерпретации.
FDS>>>Где ж тут система типов? Система типов позразумевает определение типов объектов S>>Я понял мысль, если нет оператора typeof, значит нет системы типов?
FDS>Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов.
Что такое служебные функции языка?
S>>member lookup ты имеешь в виду ))) S>>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?
FDS>Компилятор тоже должен все десять способов вызвать? И все десять разных результатов запихнуть в один объект?
Компиялтор может вызвать первый попавшийся
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
FDS>>>Приведи конкретную цитату, где я это сказал.
S>>Лень
FDS>Не лень, а не можешь, потому что я этого не говорил.
Пусть не говорил, мне поровну
S>>Дело в том, что ни один из пунктов не имеют отношения к обсуждаемому вопросу. Мы действительно спорим о разных вещах. Я о способах хранения данных в процедурных представлениях данных, а ты о способе передачи аргументов и возврата результата в процедурах.
FDS>Как раз все пункты имеют, просто ты совершенно не хочешь отвечать на то, что тебе говорят. Ты споришь как раз с тем самым абстрактным собеседником, с которым смысла спорить нет, вместо того, чтобы спорить с реальным собеседником или, хотя бы, читать его посты перед тем, как отвечать на них.
Если тебе не нравится то что я сказал о процедурных типах, разберись для начала с предметом. Я не собирался с тобой спорить о стеке и регистрах.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Пусть не чушь, я не вчитывался. Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
FDS>Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву.
Это — чушь
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 имея на руках только два неименованных куска битов узнает, что к ним надо применить численное сложение, а не конкатенацию строк.
Здравствуйте, samius, Вы писали:
FDS>>Если нет данных о типе в коде или в служебных функциях самого языка — значит нет и типов. S>Что такое служебные функции языка?
Это то, что делает компилятор, чтобы определить тип, например, получает имя типа, или, скажем, список его методов и полей.
S>>>Получаем и получаем. Это неважно. Мало ли неоднозначностей в языках программирования?
FDS>>Компилятор тоже должен все десять способов вызвать? И все десять разных результатов запихнуть в один объект? S>Компиялтор может вызвать первый попавшийся
Если первую попавшуюся, то это означает, что или соглашение есть — вызвать первую, или соглашения нет — тогда функция вызывается случайно. В первом случае, очевидно, я прав, говоря, что это соглашение нужно, во втором случае, очевидно, такое выражение как 1+2+3 тогда вообще лишается смысла, так как даже сам программист никогда не узнает, что же получится в результате — т.е. в таком случае это означает фактический запрет на написание и вызов такого кода, следовательно, я опять прав.
Здравствуйте, samius, Вы писали:
FDS>>Как раз все пункты имеют, просто ты совершенно не хочешь отвечать на то, что тебе говорят. Ты споришь как раз с тем самым абстрактным собеседником, с которым смысла спорить нет, вместо того, чтобы спорить с реальным собеседником или, хотя бы, читать его посты перед тем, как отвечать на них.
S>Если тебе не нравится то что я сказал о процедурных типах, разберись для начала с предметом. Я не собирался с тобой спорить о стеке и регистрах.
Сам разберись сначала о чём я с тобой спорю — прочитай внимательно на что я первоначально отвечал и подумай, причём тут вообще способ получения и хранения данных внутри процедур (подсказка: он не при чём).
Здравствуйте, 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х байтах может и говорит, но о том в каком месте файла, и вообще в файле ли данные — нет.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, samius, Вы писали:
S>>>Пусть не чушь, я не вчитывался. Но все это имеет лишь некоторое отношение к вызову процедур. В общем случае работать со стеком и регистрами может интерпретатор, но вызов процедуры может быть лишь переходом по синтаксическому дереву.
FDS>>Это не так. Рекурсивный вызов процедуры не может быть переходом по синтаксическому дереву. S>Это — чушь
Пример в студию. Каким образом я буду переходить по синтаксическому дереву не выделяя при этом дополнительно памяти на рекурсию и запоминание самого факта вызова?
Рекурсивный вызов не может быть переходом по синтаксическому дереву, так как это уже переход по графу потока управления, который имеет циклы и деревом вообще не является.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, samius, Вы писали:
S>>Если тебе не нравится то что я сказал о процедурных типах, разберись для начала с предметом. Я не собирался с тобой спорить о стеке и регистрах.
FDS>Сам разберись сначала о чём я с тобой спорю — прочитай внимательно на что я первоначально отвечал и подумай, причём тут вообще способ получения и хранения данных внутри процедур (подсказка: он не при чём).
Здравствуйте, Temoto, Вы писали:
T>Понятно, всё делает метод +. Всё ещё непонятно, как метод (+) :: Object -> Object -> Object имея на руках только два неименованных куска битов узнает, что к ним надо применить численное сложение, а не конкатенацию строк.
Метод "+" ничего не узнаёт, он просто складывает два целых числа, так как в числах он именно такой.
В строках метод "+" определён другим способом — он уже выполняет конкатенацию.
Указатель на конкретный метод "+" каждый объект получает от программиста в свой словарь методов — что программист дал, то и есть, т.е. сам метод считает, что он применим к нужному куску битов без какой-либо проверки.