Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>Это такая историческая глупость. Предки называли переменные rabyach1, rabyach2, что означало "рабочая ячейка". В эти ячейки "клали" значения. Но да, я подразумевал присваивание переменной значения.
I>Ну то-то. А то начал с того, чем отличается переменная от ее имени, а кончил тем, что не удержал заданный самим собой уровень точности и формальности, и "наклал".
не чем отличается переменная от имени, а с того, что имя переменной это одно, а объект — другое.
S>>Практически ничем. Оба выражения годятся для местечкового употребления, но верным все-таки будет являться "присваивание значения переменной".
I>Ну слава богу! Так давай так и писать, а то я уж пытаюся приспособиться к твоему местечковому диалекту, и вот глагол заменил, а существительное оставил как в оригинале.
давай
I>И кстати, в результате мы остались с переменными и значениями, куда вообще объекты-то делись, остались в местечковом диалекте? Может они и вовсе не нужны, достаточно переменных (и их имен, да ).
значение может быть полноценным объектом.
S>>Значения, точнее типы значений, могут быть иммутабельны сами по себе, а переменные сами по себе. И для того что бы отличать, что мы конкретно делаем, кладем в изменяемую переменную значение неизменяемого типа, или в неизменяемую переменную значение изменяемого типа, принято расставлять акценты об иммутабельности объекта/переменной.
I>Все-таки ты опять "наклал".
Вижу, тебя это интересует куда больше, чем тема, которую ты поднял.
Здравствуйте, samius, Вы писали:
S>не чем отличается переменная от имени, а с того, что имя переменной это одно, а объект — другое.
Так у нас все же три сущности: переменная, имя переменной и объект, или только две из них?
S>значение может быть полноценным объектом.
А в каком случае значение не является полноценным объектом?
Кроме того, в чем отличие между полноценным объектом и объектом, не являющимся полноценным, и всегда ли значение является объектом (не обязательно полноценным)?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>не чем отличается переменная от имени, а с того, что имя переменной это одно, а объект — другое.
I>Так у нас все же три сущности: переменная, имя переменной и объект, или только две из них?
Это смотря в каком аспекте смотреть. А то еще и literal-ы могут затесаться. Так, ООП не знает что такое переменная и ее имя, и оперирует идентификаторами/ссылками. А ЯП может не знать, что такое объект.
S>>значение может быть полноценным объектом.
I>А в каком случае значение не является полноценным объектом?
См ниже
I>Кроме того, в чем отличие между полноценным объектом и объектом, не являющимся полноценным, и всегда ли значение является объектом (не обязательно полноценным)?
Что бы был объект, необходимы возможности отправки ему сообщений и object identity, которая представлена идентификаторами/ссылками. Если значению невозможно отправить сообщение, то нет смысла о нем говорить как об объекте.
Но т.к. типично значения используются лишь в контексте того что identity у них имеется (идентификатор, ссылка, алиас, или нечто, позволяющее обращаться к результату выражения), то о необходимости identity забывается и рассматривается лишь тип значения. И тогда если тип значения не допускает отправку ему сообщений, то смысла нет считать значения таких типов объектами.
Далее все зависит от соглашения конкретной ОО системы, что именно считать за посылку сообщения. Вообще говоря не обязательно считать методы экземпляра типа значения за сообщения. Так в выражении CloseHandle(hObject) можно считать что объекту по ссылке hObject передается сообщение "CloseHandle".
Здравствуйте, samius, Вы писали:
S>Это смотря в каком аспекте смотреть. А то еще и literal-ы могут затесаться. Так, ООП не знает что такое переменная и ее имя, и оперирует идентификаторами/ссылками. А ЯП может не знать, что такое объект.
В том аспекте, в котором было твое "имя переменной это одно, а объект — другое", имеются еще и переменные кроме имен переменных и объектов?
> Есть еще тонкость. Иммутабельность объекта определяется не его состоянием, а его наблюдаемым поведением. Например, следующий объект иммутабелен: >
> class Immutable
> {
> int v_;
> public:
> void Update() { v_++; }
> };
>
>
Ссылочку-обоснование можно? Потому как в данном случае меняется внутреннее состояние объекта. Как бы получается противоречие определениям. Два немутабельных объекта становятся неидентичными и объекты не могут быть расположены в ридонли.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>Это смотря в каком аспекте смотреть. А то еще и literal-ы могут затесаться. Так, ООП не знает что такое переменная и ее имя, и оперирует идентификаторами/ссылками. А ЯП может не знать, что такое объект.
I>В том аспекте, в котором было твое "имя переменной это одно, а объект — другое", имеются еще и переменные кроме имен переменных и объектов?
В том аспекте — имеются.
Здравствуйте, grosborn, Вы писали:
>> Есть еще тонкость. Иммутабельность объекта определяется не его состоянием, а его наблюдаемым поведением. Например, следующий объект иммутабелен: >>
>> class Immutable
>> {
>> int v_;
>> public:
>> void Update() { v_++; }
>> };
>>
In some cases, an object is considered immutable even if some internally used attributes change but the object's state appears to be unchanging from an external point of view. For example, an object that uses memoization to cache the results of expensive computations could still be considered an immutable object.
Написано "In some cases", но вообще говоря именно такие объекты лежат в основе ленивых вычислений во многих чистых ФП языках.
G>Потому как в данном случае меняется внутреннее состояние объекта.
Не имеет значения, если внутреннее состояние не может влиять на наблюдаемое поведение.
G>Как бы получается противоречие определениям.
Каким именно? G>Два немутабельных объекта становятся неидентичными и объекты не могут быть расположены в ридонли.
Идентичность в ООП говорит о том, какие объекты считать идентичными, а какие — нет. В частности, идентичность, основанная на location объекта говорит что два объекта идентичны <=> они расположены в том же самом месте.
А причем тут ридонли — вообще непонятно.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>В том аспекте — имеются.
I>И чем переменные отличаются от объектов с одной стороны, и от имен переменных с другой?
Может ты таки откроешь какой-нибудь букварь и почитаешь? По-моему ты меня просто подтролливаешь. Уж не найти отличий переменной от объекта
Здравствуйте, samius, Вы писали:
S>Может ты таки откроешь какой-нибудь букварь и почитаешь? По-моему ты меня просто подтролливаешь. Уж не найти отличий переменной от объекта
Найти запросто, но тогда не понимаю, где ты видишь отличие переменной от ее имени. То есть на мой взгляд либо:
Не катит
> Не имеет значения, если внутреннее состояние не может влиять на наблюдаемое поведение.
Ха-ха-ха
Внутреннее состояние для того и состояние, что изменяет поведение.
Не изменяет только в твоем абстрактном примере, а так всегда изменяет.
> G>Два немутабельных объекта становятся неидентичными и объекты не могут быть расположены в ридонли. > Идентичность в ООП говорит о том, какие объекты считать идентичными, а какие — нет. В частности, идентичность, основанная на location объекта говорит что два объекта идентичны <=> они расположены в том же самом месте.
Поскольку внутреннее состояние всегда изменяет поведение, то объекты с изменяющимися внутренними состояниями нельзя считать немутабельными.
В общем с твоим определением возникают разночтения немутабельности из за разночтения идентичности. Идентичность определяется программистом, он решает какие объекты считать идентичными, от этого и в немутабельности путаница. Такие определения лучше не вводить лишний раз.
Здравствуйте, grosborn, Вы писали:
G>Поскольку внутреннее состояние всегда изменяет поведение...
Вообще-то частью внутреннего состояния может быть кэш, влияющий не скорость, но не на результат; так что в зависимости от того, что понимать под поведением, твое утверждение может быть неверно. Если скорость в определении того, что считать поведением не учавствует, твое утверждение неверно.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>Может ты таки откроешь какой-нибудь букварь и почитаешь? По-моему ты меня просто подтролливаешь. Уж не найти отличий переменной от объекта
I>Найти запросто, но тогда не понимаю, где ты видишь отличие переменной от ее имени. То есть на мой взгляд либо:
I>(имя переменной == переменная) && (переменная != объект)
I>либо:
I>(имя переменной != переменная) && (переменная == объект)
на мой взгляд ни то ни другое. Про неравенство имени и именуемого объекта ты спорил уже с Lloyd-ом. А то что переменная не есть объект, видно хотя бы из времени жизни того и другого.
Здравствуйте, grosborn, Вы писали:
>> G>Ссылочку-обоснование можно? >> http://en.wikipedia.org/wiki/Immutable_object
G>Не катит
>> Не имеет значения, если внутреннее состояние не может влиять на наблюдаемое поведение.
G>Ха-ха-ха G>Внутреннее состояние для того и состояние, что изменяет поведение. G>Не изменяет только в твоем абстрактном примере, а так всегда изменяет.
выделенное слишком сильное утверждение. мой пример, конечно, абстрактный. Но пример с ленивыми вычислениями/мемоизацией — вполне рабочий.
>> G>Два немутабельных объекта становятся неидентичными и объекты не могут быть расположены в ридонли. >> Идентичность в ООП говорит о том, какие объекты считать идентичными, а какие — нет. В частности, идентичность, основанная на location объекта говорит что два объекта идентичны <=> они расположены в том же самом месте.
G>Поскольку внутреннее состояние всегда изменяет поведение, то объекты с изменяющимися внутренними состояниями нельзя считать немутабельными.
Посыл неверный, вывод тоже.
G>В общем с твоим определением возникают разночтения немутабельности из за разночтения идентичности. Идентичность определяется программистом, он решает какие объекты считать идентичными, от этого и в немутабельности путаница.
Ты не путаешь идентичность (identity) с равенством (equality)? G>Такие определения лучше не вводить лишний раз.
Я ничего нового не вводил в этой теме. Идентичность, основанная на location, придумана не мной.
Здравствуйте, samius, Вы писали:
S>на мой взгляд ни то ни другое. Про неравенство имени и именуемого объекта ты спорил уже с Lloyd-ом.
Ты передернул, я же написал "имя переменной == переменная", объекта там не было.
Кроме того Lloyd закончил дискуссию тем, что исполнил какой-то шутовской номер, я воспринял это как признание им своей неправоты, улыбнулся и не стал продолжать.
> G>Не изменяет только в твоем абстрактном примере, а так всегда изменяет. > выделенное слишком сильное утверждение. мой пример, конечно, абстрактный. Но пример с ленивыми вычислениями/мемоизацией — вполне рабочий.
И с ленивыми вычислениями меняет. Иначе бы зачем их вводить?
Но ведь ты подразумеваешь несколько другое, дескать в общем смысле меняет, но для каких-то определенных задач можно сказать, что совсем даже не меняет
> G>Поскольку внутреннее состояние всегда изменяет поведение, то объекты с изменяющимися внутренними состояниями нельзя считать немутабельными. > Посыл неверный, вывод тоже.
Вижу, уперся рогом.
Собственно поэтому и просил ссылку.
> G>Такие определения лучше не вводить лишний раз. > Я ничего нового не вводил в этой теме. Идентичность, основанная на location, придумана не мной.
Я об определении немутабельности, которое подразумевает что немутабельность, это не совсем немутабельность, а такая немутабельность, что например ленивые объекты можно считать немутабельными. Вот такие определения, которые суть немножко не то, что написали, их тяжело в голове держать, я такие не люблю и предпочитаю выбрасывать.
Ссылочку плиз.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, samius, Вы писали:
S>>на мой взгляд ни то ни другое. Про неравенство имени и именуемого объекта ты спорил уже с Lloyd-ом.
I>Ты передернул, я же написал "имя переменной == переменная", объекта там не было.
Я обобщил, объект здесь не объект ООП, а "именуемый именем объект". Если смущает "объект", пусть будет "именуемая именем шняга".
I>Кроме того Lloyd закончил дискуссию тем, что исполнил какой-то шутовской номер, я воспринял это как признание им своей неправоты, улыбнулся и не стал продолжать.
Из этого не следует что "имя переменной == переменная".