From 491ac51b8233656b7c7864f5e29a8b81e0cf7ac6 Mon Sep 17 00:00:00 2001 From: halw Date: Tue, 12 May 2009 01:34:50 +0000 Subject: [PATCH] Author:halw Date:2009-05-12T01:34:50.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@214 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- .../method/_images/VoidSafeErrorList.png | Bin 0 -> 40122 bytes .../method/_images/VoidSafeErrorList.png.data | 3 + .../void-safe-programming-eiffel/index.wiki | 67 ++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 documentation/current/method/_images/VoidSafeErrorList.png create mode 100644 documentation/current/method/_images/VoidSafeErrorList.png.data create mode 100644 documentation/current/method/void-safe-programming-eiffel/index.wiki diff --git a/documentation/current/method/_images/VoidSafeErrorList.png b/documentation/current/method/_images/VoidSafeErrorList.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2a56149cc41e3284004ffa59272d2d2da0b3f1 GIT binary patch literal 40122 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%0APDgr={L;4?VKNoaaJnxVrzgUDtE2w(3Xb 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 literal 0 HcmV?d00001 diff --git a/documentation/current/method/_images/VoidSafeErrorList.png.data b/documentation/current/method/_images/VoidSafeErrorList.png.data new file mode 100644 index 00000000..48731813 --- /dev/null +++ b/documentation/current/method/_images/VoidSafeErrorList.png.data @@ -0,0 +1,3 @@ +title=VoidSafeErrorList +author=halw +path=content/voidsafeerrorlist diff --git a/documentation/current/method/void-safe-programming-eiffel/index.wiki b/documentation/current/method/void-safe-programming-eiffel/index.wiki new file mode 100644 index 00000000..044d0c7c --- /dev/null +++ b/documentation/current/method/void-safe-programming-eiffel/index.wiki @@ -0,0 +1,67 @@ +[[Property:title|Void-safe programming in Eiffel]] +[[Property:weight|3]] +[[Property:uuid|a03568e8-eb79-70d7-04a3-6fd3ed7ac2b3]] +{{underconstruction}} + + +=About void-safe software development using Eiffel= + +When you develop software in Eiffel, you can be assured (at compile time) that your system will not attempt (at run time) to apply a feature to a void reference. That is, Eiffel prevents situations in which systems fail at run time with the error: "Feature call on void target". + +Throughout the history of Eiffel, a small number of important new capabilities, agents for example, have been added. Always these capabilities have added significantly to the power of Eiffel, and have been carefully designed to cause a minimum of impact on existing software. Void-safe Eiffel is such a capability. + +However, it is not quite right to refer to it as "void-safe Eiffel". In fact, it is Eiffel ... and it is void-safe, just as it is statically typed. + +Still, the reality is that Eiffel did not always provide void-safety, and that has the potential to cause confusion among both new and seasoned Eiffel developers. New developers will find for awhile that parts of the Eiffel documentation were written prior to the advent of void-safety, and may not have been updated yet. Experienced Eiffel programmers will find that software that compiled in versions of Eiffel before it became void-safe, may not compile anymore with void-safe capabilities enabled. + +The result is that we must consider certain questions: + +# How is void-safety defined? +# What are the specific elements of the mechanism for void-safety? +## How do these relate to Eiffel before void-safety? +# What do I need to know to produce standard Eiffel software? +# What do I need to know to convert my existing systems to be standard? + +Let's try to answer those questions. + +==Background== + +The primary focus of Eiffel is on software quality. Void-safety, like static typing, is another facility for improving software quality. Void-safe software is protected from run time errors caused by calls to void references, and therefore will be more reliable than software in which calls to void targets can occur. The analogy to static typing is a useful one. In fact, void-safe capability could be seen as an extension to the type system, or a step beyond static typing, because the mechanism for ensuring void-safety is integrated into the type system. + +===Static typing=== + +You know that static typing eliminates a whole class of software failures. This is done by making an assurance at compile time about a feature call of the form: + + x.f (a) + +Such a feature call is judged acceptable at compile time only if the type of x has a feature f and that any arguments, represented here by a, number the same as the formal arguments of f, and are compatible with the types of those formal arguments. + + +In statically typed languages like Eiffel, the compiler guarantees that you cannot, at run time, have a situation in which feature f is not applicable to the object attached to x. If you've ever been a Smalltalk programmer, you are certainly familiar with this most common of errors that manifests itself as "Message not understood." It happens because Smalltalk is not statically typed. + +===Non-void-safe software=== + +Static typing will ensure that there is some feature f that can be applied at run time to x in the example above. But it does not assure us that, in the case in which x is a reference, that there will always be an object attached to x at any time x.f (a) is executed. + +This problem is not unique to Eiffel. Other environments that allow or mandate reference semantics also allow the possibility of non-void-safe run time errors. If you've worked in Java or .NET you may have seen the NullReferenceException. Sometimes you might have experienced this rather poetic sounding message: "Object reference not set to an instance of an object". In Eiffel you would see "Feature call on void target". All these are the hallmarks of run time errors resulting from non-void-safe software. + +{{note|If you need a review of difference between reference types and expanded types in Eiffel, see [[ET: The Dynamic Structure: Execution Model|the chapter of the Eiffel Tutorial dedicated to the Eiffel execution model]]. }} + +Of course this is not an issue with instances of expanded types, because these instances are indeed "expanded" within their parent objects. But we could not imagine a world with expanded types only. References are important for performance reasons and for modeling purposes. For example, consider that a car has an engine and a manufacturer. When we model cars in software, it might be appropriate for engines to be expanded types, as each car has one engine. But certainly the same is not true for manufacturer. Many cars can share, through a reference, a single manufacturer. + +So, references are necessary, but we want them to be trouble free. + +==Void-safe software== + +Void-safe software, then, is software in which the compiler can give assurance, through a static analysis of the code, that at run time whenever a feature is applied to a reference, that the reference in question will have an object attached. This means that the feature call + + x.f (a) + +is valid only if we are assured that x will be attached to an object when the call executes. + + +{{info|This validity rule is called the '''Target rule''', validity code VUTA, and is the primary rule for void-safety. In the following discussion, you will see that other validity rules are involved, too. You can see the formal definition of all validity rules in the [http://www.ecma-international.org/publications/standards/Ecma-367.htm ISO/ECMA standard document] available online. }} + + +Once we have committed ourselves to this validity rule, we must have a strategy for complying with the rule. +