mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-08 15:52:26 +01:00
Author:halw
Date:2009-08-26T22:00:15.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@289 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -250,9 +250,29 @@ This would be fine in ''workbench'' code, but what happens if the code is ''fina
|
||||
The answer is that the <code>check</code> remains in force in finalized code, because it is necessary to prove void-safety.
|
||||
|
||||
|
||||
|
||||
==Stable attributes==
|
||||
|
||||
|
||||
Remember that stable attributes are actually detachable attributes, with the difference that they can never be the target of an assignment in which the source is <code>Void</code> or anything that could have a value of <code>Void</code>.
|
||||
|
||||
Stable attributes are useful in situations in which there are valid object life scenarios in which some particular attribute will never need an object attached, or will only need an object attached late in the scenario. So in this case, the attribute is used only under certain runtime conditions. Declaring these attributes as stable eliminates the need to make attachments during object creation. Yet once needed, that is, once the attribute is attached, it will always be attached.
|
||||
|
||||
Also, you should remember that unlike other attributes, you can access stable attributes directly in a CAP:
|
||||
<code>
|
||||
my_stable_attribute: detachable SOME_TYPE
|
||||
note
|
||||
options: stable
|
||||
attribute
|
||||
end
|
||||
|
||||
...
|
||||
|
||||
if my_stable_attribute /= Void then
|
||||
my_stable_attribute.do_something
|
||||
end
|
||||
|
||||
...
|
||||
</code>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@ where <code>x</code> is the formal argument for <code>r</code>, then if x is of
|
||||
|
||||
===Stable attributes===
|
||||
|
||||
Stable attributes are really stable ''detachable'' attributes, as adding the concept of stability is meaningful only for detachable attributes. Declaring a detachable attribute as stable, means that it behaves like a detachable attribute except that its assignment rules mimic those of attached attributes. In other words, a stable attribute does not need to be attached upon creation like attached attributes do. But like attached attributes, stable attributes can never be the target of an assignment in which the source is <code>Void</code> or a detachable type.
|
||||
Stable attributes are really stable ''detachable'' attributes, as adding the concept of stability is meaningful only for detachable attributes. Declaring a detachable attribute as stable, means that it behaves like a detachable attribute except that its assignment rules mimic those of attached attributes. In other words, a stable attribute does not need to be attached during object creation the way that attributes declared as attached must. But like attached type attributes, stable attributes can never be the target of an assignment in which the source is <code>Void</code> or a detachable type.
|
||||
<code>
|
||||
my_test: detachable TEST
|
||||
note
|
||||
@@ -209,9 +209,9 @@ Stable attributes are really stable ''detachable'' attributes, as adding the con
|
||||
end
|
||||
</code>
|
||||
|
||||
This means that even though stable attributes do not need to be initialized like attached attributes, once they are attached to an object, they can never be void again.
|
||||
This means that even though stable attributes do not need to be initialized like attributes of attached types, once they are attached to an object, they can never be void again.
|
||||
|
||||
Stable attributes are also interesting in that they are the only exception to the rule given in the [[Void-safety: Background, definition, and tools#Certified Attachment Patterns (CAPs)|CAPs section]] above that said that access to attributes cannot be protected by a CAP. A stable attribute can be used under the protection of a CAP. This is because once a stable attribute has an object attached, it can never again be set to <code>Void</code>. So there's no worry about having the attribute's state going from attached to non-attached because of the actions of other routines or threads.
|
||||
Stable attributes are also interesting in that they are the only exception to the rule given above in the [[Void-safety: Background, definition, and tools#Certified Attachment Patterns (CAPs)|CAPs section]] that stated that direct access to attributes cannot be protected by a CAP. A stable attribute can be used under the protection of a CAP. This is because once a stable attribute has an object attached, it can never again be set to <code>Void</code>. So there's no worry about having the attribute's state going unexpectedly from attached to non-attached because of the actions of other routines or threads.
|
||||
|
||||
===Rule for generic parameters===
|
||||
|
||||
|
||||
Reference in New Issue
Block a user