digitalmars.D - some proposals
- tetsuya (72/72) Dec 13 2004 D has been a great language :)
- Tyro (19/34) Dec 13 2004 Oh, please don't do that. It is the single most confusing thing about le...
- tetsuya (22/66) Dec 13 2004 I didn't mean to say preprocessor is superior than what D offers as
- Lionello Lunesu (3/7) Dec 13 2004 Maybe you can use if(1) and if(0), or version(any) and version(none)
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (7/14) Dec 13 2004 You should not use comments to disable code,
- tetsuya (6/20) Dec 13 2004 Thanks for the suggestion. I'll take that.
- J C Calvarese (19/47) Dec 13 2004 I don't quite understand what you're suggesting, but I like the way that...
- Thomas Kuehne (10/13) Dec 13 2004 -----BEGIN PGP SIGNED MESSAGE-----
- J C Calvarese (8/21) Dec 13 2004 I was referring to code that has outlived its usefulness or that was
- Ben Hinkle (13/54) Dec 13 2004 nice idea but the trouble is finding a nice keyword to use. The choice o...
- tetsuya (16/57) Dec 13 2004 I was making a structure that represents a rational number
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (14/36) Dec 13 2004 Remember that the static arrays in D are just
-
tetsuya
(22/29)
Dec 13 2004
In article
, - =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (14/25) Dec 13 2004 Not really, but maybe I explained my little "workaround" badly...
-
Carlos Santander B.
(29/29)
Dec 13 2004
"tetsuya"
escribió en el mensaje - tetsuya (13/43) Dec 13 2004 IIRC, there's no operation !== in D, instead
-
Carlos Santander B.
(14/14)
Dec 13 2004
"tetsuya"
escribió en el mensaje - tetsuya (6/20) Dec 13 2004 Ouch!!! Sorry about that. I'm embarraseed..
- Lionello Lunesu (15/30) Dec 13 2004 I agree, but not by using 'const'. Why not make it a constant-length arr...
- tetsuya (26/49) Dec 14 2004 In fact, I don't care what the syntax's gonna be.
- Bastiaan Veelo (18/27) Dec 14 2004 The problem is that you say "'in' scope inherited by 'body' [...]". The
D has been a great language :) But I dare try to give some proposals that I though might be useful from the experience of writing about 2500 lines in D so far. Please think about them for a little bit ;)) 1. auto-calculation of static array length Since declaring like int[] a = [1, 2]; gives a dynamic array, I though maybe letting int[const] a = [1, 2]; be a static array would make enough sense. 2. 'this' in struct is not a pointer, but an instance I was writing a struct and always writing '*this' bothered me a little bit. And I think assuming 'this' to be an instance in struct is a very straightforward way of thinking in D's policy. I hope this isn't too late to be changed. 3. assert(Object) checks null-ness, assert(Object.invariant) checks contract Since 'if (Object)' checks if it is null or not, I thought it is not so reasonable to make assert(Object) check its invariability. In the proposed way, the code also has clarity in its meanings. 4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++. 5. .init propery of function arguments It seems like .init property of function arguments is currently same with <its type>.init, i.e., void foo(int x) { assert(x.init == int.init); } So, why not make the .init property return the value passed when the function was called. This could be used as the 'const-ness' check of the arguments, like void foo(int x) out { assert(x == x.init); // confirm the value never been changed } body { /* do nothing */ } 6. special scope rules in contract While in & out contract is *very* useful for developing (I proved myself! ;)), I think there is still some more things improvable. One thing I believe would be very useful is to allow more flexible scope rules, such as, 'in' scope inherited by 'body' and 'out', 'body' scope inherited by 'out'. Then you can declare variables only for contract checking. For example, you can simulate the 'const-ness' check in this way too. void foo(int x) in { int y = x; } out { assert(y == x); // able to access 'y' } body { /* do nothing */ } 7. do-while scope rule (proposed before) This is something proposed before in http://www.digitalmars.com/d/archives/21339.html and I really appreciated the idea. I want it to be re-thought for one more chance. P.S. I love to hear opinions from anyone else, especially those with experience in writing D, and of course, Walter ! -tetsuya
Dec 13 2004
In article <cpkagp$1s59$1 digitaldaemon.com>, tetsuya says...[snip]4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.Oh, please don't do that. It is the single most confusing thing about learning to program in C/C++. So much so that I have settled for simply learning programming on my own by simply rummaging through D files. You don't know how dumb I feel being one of the oldest followers of this language and not being able to contribute to its development. It's like I'm reenventing the wheel, but God knows it's far less confusing than Preprocessor Directives. Please don't confuse me anymore than I already am.[snip]7. do-while scope rule (proposed before) This is something proposed before in http://www.digitalmars.com/d/archives/21339.html and I really appreciated the idea. I want it to be re-thought for one more chance.I think this is a very handy feature to have in the language and enthusiastically support its inclusion.P.S. I love to hear opinions from anyone else, especially those with experience in writing D, and of course, Walter ! -tetsuyaP.S. The most important feature in my mind is the Book that teaches me to progam. I obviously don't know how to ask the right questions so I can only hope for the book that will teach me to become a programmer using the D language. Andrew -- acedwards at ieee dot org
Dec 13 2004
In article <cpkklb$28g2$1 digitaldaemon.com>, Tyro says...In article <cpkagp$1s59$1 digitaldaemon.com>, tetsuya says...I didn't mean to say preprocessor is superior than what D offers as its alternatives. I was just feeling that C's way (switching by simply altering 0 or 1) is one of a few things where C is a little more programmer-friendly.[snip]4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.Oh, please don't do that. It is the single most confusing thing about learning to program in C/C++. So much so that I have settled for simply learning programming on my own by simply rummaging through D files. You don't know how dumb I feel being one of the oldest followers of this language and not being able to contribute to its development. It's like I'm reenventing the wheel, but God knows it's far less confusing than Preprocessor Directives. Please don't confuse me anymore than I already am.Fair enough. I hope I could someday (hopefully in the near future) write a site about D and contribute to make D community bigger ;) But it doesn't mean no more features should be considered or added, I guess.[snip]7. do-while scope rule (proposed before) This is something proposed before in http://www.digitalmars.com/d/archives/21339.html and I really appreciated the idea. I want it to be re-thought for one more chance.I think this is a very handy feature to have in the language and enthusiastically support its inclusion.P.S. I love to hear opinions from anyone else, especially those with experience in writing D, and of course, Walter ! -tetsuyaP.S. The most important feature in my mind is the Book that teaches me to progam. I obviously don't know how to ask the right questions so I can only hope for the book that will teach me to become a programmer using the D language.Andrew -- acedwards at ieee dot orgP.S. You sound like you're little aggressive, but what's your problem? If I did something impolite then please just tell me about it, or just simply forgive me because English is not my first language. And I don't mean to confuse you, I mean to want D to be a great language, or even greater than it is now. If you are confused by what I said, then just ignore it because if some (or all) of my ideas would seem stupid to the crowds then they would not be adopted in any of the future spec. I also want no idea to be employed if it makes things more confusing. cheers, -tetsuya
Dec 13 2004
I didn't mean to say preprocessor is superior than what D offers as its alternatives. I was just feeling that C's way (switching by simply altering 0 or 1) is one of a few things where C is a little more programmer-friendly.Maybe you can use if(1) and if(0), or version(any) and version(none) instead? L.
Dec 13 2004
tetsuya wrote:4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.You should not use comments to disable code, instead you could use either "debug { }", or version(none) or version(all) for #if 0 or 1... /+ +/ isn't used for much else than commenting out code, that had been commented with /* */ --anders
Dec 13 2004
In article <cpkm0l$29rc$1 digitaldaemon.com>, =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= says...tetsuya wrote:Thanks for the suggestion. I'll take that. But then what are nested comments used for? Seems like there's not so much need for it. -tetsuya4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.You should not use comments to disable code, instead you could use either "debug { }", or version(none) or version(all) for #if 0 or 1... /+ +/ isn't used for much else than commenting out code, that had been commented with /* */ --anders
Dec 13 2004
tetsuya wrote:In article <cpkm0l$29rc$1 digitaldaemon.com>, =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= says...I don't quite understand what you're suggesting, but I like the way that nested comments currently work. I don't see a need for improving it, but maybe that's just because I haven't run into the problem you're trying to solve.tetsuya wrote:4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.I agree with that.You should not use comments to disable code, instead you could use either "debug { }", or version(none) or version(all) for #if 0 or 1... /+ +/ isn't used for much else than commenting out code, that had been commented with /* */ --andersThanks for the suggestion. I'll take that. But then what are nested comments used for? Seems like there's not so much need for it. -tetsuyaTrue, they aren't right for every situation, but nested comments have come in very handy for me when I'm trying to nail down a bug. If something weird is happening (but I'm not sure where the problem is), I might used nested comments to comment out a large section. If I still see the problem, I can enlarge the commented section again by nesting the first commented area and adding another section. Take my word for it, they are useful the way they currently work. In my mind, the nested comments should be removed from code once the bugs are fixed. If the contained code isn't needed anymore, then it should be removed altogether of course. -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
Dec 13 2004
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 J C Calvarese schrieb am Mon, 13 Dec 2004 17:39:29 -0600:In my mind, the nested comments should be removed from code once the bugs are fixed. If the contained code isn't needed anymore, then it should be removed altogether of course.How about using version(none){} ? ... Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFBviyD3w+/yD4P9tIRAqhCAKCLKgPmAZKeMmtK5OUHE2uPvUnA2wCbB5ak b9QYV1FKnTp4f4xB3N3hRwc= =gfml -----END PGP SIGNATURE-----
Dec 13 2004
Thomas Kuehne wrote:-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 J C Calvarese schrieb am Mon, 13 Dec 2004 17:39:29 -0600:I was referring to code that has outlived its usefulness or that was worthless to begin with. I'd assume that version(none){} would be reserved for code that might be useful. Each tool has its purpose. More tools are better than fewer tools. -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/In my mind, the nested comments should be removed from code once the bugs are fixed. If the contained code isn't needed anymore, then it should be removed altogether of course.How about using version(none){} ? ... Thomas
Dec 13 2004
"tetsuya" <tetsuya_member pathlink.com> wrote in message news:cpkagp$1s59$1 digitaldaemon.com...D has been a great language :) But I dare try to give some proposals that I though might be useful from the experience of writing about 2500 lines in D so far. Please think about them for a little bit ;)) 1. auto-calculation of static array length Since declaring like int[] a = [1, 2]; gives a dynamic array, I though maybe letting int[const] a = [1, 2]; be a static array would make enough sense.nice idea but the trouble is finding a nice keyword to use. The choice of "const" seems reasonable but it isn't clear from the code what is going on. To a newbie it would probably look pretty confusing.2. 'this' in struct is not a pointer, but an instance I was writing a struct and always writing '*this' bothered me a little bit. And I think assuming 'this' to be an instance in struct is a very straightforward way of thinking in D's policy. I hope this isn't too late to be changed.Can you give examples of when you needed to write *this? I've found most struct uses of "this" in structs are to get at members and in that case this.foo works fine IIRC. [snip]4. /+ +/ comments out, /++ +/ uncomments While debugging with nested comments, I realized that I always had to remember where to comment out so that I could make things back. Letting /++ +/ make the code inside valid again would be a very good way to solve this problem and make D's nested comment more comparable to the '#if 0 ... #endif' stuff in C/C++.seems confusing [snip]6. special scope rules in contract While in & out contract is *very* useful for developing (I proved myself! ;)), I think there is still some more things improvable. One thing I believe would be very useful is to allow more flexible scope rules, such as, 'in' scope inherited by 'body' and 'out', 'body' scope inherited by 'out'. Then you can declare variables only for contract checking. For example, you can simulate the 'const-ness' check in this way too. void foo(int x) in { int y = x; } out { assert(y == x); // able to access 'y' } body { /* do nothing */ }that sounds cool! [snip]
Dec 13 2004
In article <cpkq10$2erj$1 digitaldaemon.com>, Ben Hinkle says...[snip]I was making a structure that represents a rational number (I don't do it in class becaues rational number is to be numerically operated many times and I wanted speed.) and I wonder how many times I wrote "return '*this;'. Anyway, I think even if there's not much time everyone has to write '*this', it should be modified to make sense. As you know, one has to be able to write most (or IMHO all) of the code *without* using pointers when he dare chose D. I believe it is one of the biggest and important challenge of D while it is still pursuing equivalent to or even more speed than C/C++.2. 'this' in struct is not a pointer, but an instance I was writing a struct and always writing '*this' bothered me a little bit. And I think assuming 'this' to be an instance in struct is a very straightforward way of thinking in D's policy. I hope this isn't too late to be changed.Can you give examples of when you needed to write *this? I've found most struct uses of "this" in structs are to get at members and in that case this.foo works fine IIRC.[snip]Yeah! :)) I often feel desperate when I try to write reasonable yet efficient contracts.6. special scope rules in contract While in & out contract is *very* useful for developing (I proved myself! ;)), I think there is still some more things improvable. One thing I believe would be very useful is to allow more flexible scope rules, such as, 'in' scope inherited by 'body' and 'out', 'body' scope inherited by 'out'. Then you can declare variables only for contract checking. For example, you can simulate the 'const-ness' check in this way too. void foo(int x) in { int y = x; } out { assert(y == x); // able to access 'y' } body { /* do nothing */ }that sounds cool![snip]-tetsuya
Dec 13 2004
tetsuya wrote:1. auto-calculation of static array length Since declaring like int[] a = [1, 2]; gives a dynamic array, I though maybe letting int[const] a = [1, 2]; be a static array would make enough sense.Remember that the static arrays in D are just like "regular" arrays in C. That is, pointers. static int* a = [1, 2]; // C: int a[] = {1, 2}; (for some reason, all such arrays need to be static to be inited: "variable a is not a static and cannot have static initializer") Usually you *want* to type them, though... "int[2] a = [1, 2];" is more "type-safe" ? Something like the following (D) code:import std.stdio; void main() { // D style static int[] a = [1, 2]; foreach (int i; a) writefln("%d",i); // C style static int *b = [1, 2, -1]; for (int* p = b; *p != -1; p++) printf("%d\n",*p); }Most people prefer the dynamic arrays. :-) --anders PS. The "-1" is known as a sentinel. Like the '\0' in strings ? One could have used a length. Or in C: sizeof(a)/sizeof(a[0])
Dec 13 2004
In article <cpl091$2mhq$1 digitaldaemon.com>, =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= says...[snip]Remember that the static arrays in D are just like "regular" arrays in C. That is, pointers. static int* a = [1, 2]; // C: int a[] = {1, 2};By "static array" I mean "static array" as opposed to "dynamic array" whose length is known at compile time. Its "static" has nothing to do with heap area / stack area. I guess you're taking me wrong? Please see, http://www.digitalmars.com/d/arrays.html [snip]Usually you *want* to type them, though...I don't think so. Everytime you need a big or small "static" array, you want to let your compiler handle the length to make code easier to be modified and read. That is one of the reasons you think out a trick like sizeof(a)/sizeof(a[0]) in C. You never want to calculate the length of an array yourself, let alone write it (what you call magic number) down on your own code."int[2] a = [1, 2];" is more "type-safe" ?Please tell me how safe it is :-Q IMHO, "type-safe" is not about specifying int[2] or int[5], but hiding those magic numbers. [snip]Most people prefer the dynamic arrays. :-) --andersSurely you don't include me then.. Please don't ban me from the D community for my uniqueness, or stupidness.. :) -tetsuya
Dec 13 2004
tetsuya wrote:By "static array" I mean "static array" as opposed to "dynamic array" whose length is known at compile time. Its "static" has nothing to do with heap area / stack area. I guess you're taking me wrong?Not really, but maybe I explained my little "workaround" badly... (and while it does work, it might be considered a "gross hack")Just meant that you can't interchange it with an int[5] array... (and you are right that the numbers should probably be const's)"int[2] a = [1, 2];" is more "type-safe" ?Please tell me how safe it is :-Q IMHO, "type-safe" is not about specifying int[2] or int[5], but hiding those magic numbers.Oh, I hadn't planned to :-) What you suggest is *not* unique, and does involve a lot less overhead than dynamic array + GC and all. It's not a bad idea at all, for an add-on. Just that it needs some new declaration style, since [] is "taken". I guess your "[const]" isn't that bad, but looks a little like AA? Maybe something like "[...]" could work ? Inits of arrays, especially static arrays and associative arrays, isn't really complete yet - so all suggestions will improve them... --andersMost people prefer the dynamic arrays. :-)Surely you don't include me then.. Please don't ban me from the D community for my uniqueness, or stupidness.. :)
Dec 13 2004
"tetsuya" <tetsuya_member pathlink.com> escribió en el mensaje news:cpkagp$1s59$1 digitaldaemon.com... | | 3. assert(Object) checks null-ness, assert(Object.invariant) checks contract | | Since 'if (Object)' checks if it is null or not, I thought | it is not so reasonable to make assert(Object) check its | invariability. In the proposed way, the code also has clarity | in its meanings. | You can always do "assert(Object !== null);" | | | 4. /+ +/ comments out, /++ +/ uncomments | | While debugging with nested comments, I realized that I always | had to remember where to comment out so that I could make things | back. Letting /++ +/ make the code inside valid again would be | a very good way to solve this problem and make D's nested comment | more comparable to the '#if 0 ... #endif' stuff in C/C++. | | I use them. Here's what I do to uncomment: //+ ...code... //+/ Remove the first slash to comment, add it to uncomment. ----------------------- Carlos Santander Bernal
Dec 13 2004
In article <cplfsf$5mu$1 digitaldaemon.com>, Carlos Santander B. says..."tetsuya" <tetsuya_member pathlink.com> escribió en el mensaje news:cpkagp$1s59$1 digitaldaemon.com... | | 3. assert(Object) checks null-ness, assert(Object.invariant) checks contract | | Since 'if (Object)' checks if it is null or not, I thought | it is not so reasonable to make assert(Object) check its | invariability. In the proposed way, the code also has clarity | in its meanings. | You can always do "assert(Object !== null);"IIRC, there's no operation !== in D, instead "assert(! (Object is null));" will do the job. But what I meant was not wether it can be done in current spec, but treating the expression in 'assert' as different from that in 'if' and others would be somehow confusing because both are dealing with conditions, or booleans.| | | 4. /+ +/ comments out, /++ +/ uncomments | | While debugging with nested comments, I realized that I always | had to remember where to comment out so that I could make things | back. Letting /++ +/ make the code inside valid again would be | a very good way to solve this problem and make D's nested comment | more comparable to the '#if 0 ... #endif' stuff in C/C++. | | I use them. Here's what I do to uncomment: //+ ...code... //+/ Remove the first slash to comment, add it to uncomment. ----------------------- Carlos Santander BernalThanks. I just suggested because I never knew version(none) and version(all) could be used to comment codes. Now I will use that. I admit that it wasn't a good idea, just forget it.I'm done with nested comment stuff now :) -tetsuyaTo all those who are threatened by that idea
Dec 13 2004
"tetsuya" <tetsuya_member pathlink.com> escribió en el mensaje news:cpln80$d07$1 digitaldaemon.com... | IIRC, there's no operation !== in D, instead | "assert(! (Object is null));" will do the job. | Err... void main () { Object o = new Object; assert ( o !== null ); } Compiles, links and run. ----------------------- Carlos Santander Bernal
Dec 13 2004
In article <cplp97$f65$1 digitaldaemon.com>, Carlos Santander B. says..."tetsuya" <tetsuya_member pathlink.com> escribió en el mensaje news:cpln80$d07$1 digitaldaemon.com... | IIRC, there's no operation !== in D, instead | "assert(! (Object is null));" will do the job. | Err... void main () { Object o = new Object; assert ( o !== null ); } Compiles, links and run.Ouch!!! Sorry about that. I'm embarraseed.. I should have tested before posting. There might be some more things I can't just reason from the documents.. Gotta be care > myself.----------------------- Carlos Santander Bernal
Dec 13 2004
Hi.. Just a quicky.1. auto-calculation of static array length [...]I agree, but not by using 'const'. Why not make it a constant-length array instead of a dynamic one? Or maybe use "..." for, as in "int[...] a" or "int[] a = [1,2,...];" :-S2. 'this' in struct is not a pointer, but an instance [...]I agree that 'this' in D should behave like C++'s '*this'. If some pro wants the pointer, he can always do '&this'.3. assert(Object) checks null-ness, assert(Object.invariant) checks contract [...]I agree with you.4. /+ +/ comments out, /++ +/ uncomments [...]Confusing.5. .init propery of function arguments [...]Making <instance>.init different from <type>.init seems too big a change, since .init is something like a static property of a class.6. special scope rules in contract [...]Aren't the contracts compiled-in optionally? This would mean that if you don't want the contracts to be tested, the declaration in the in/out blocks should still be compiled, but not the statements? Odd.7. do-while scope rule (proposed before) [...]Got my vote too! L.
Dec 13 2004
In article <cpm4pt$ps7$1 digitaldaemon.com>, Lionello Lunesu says...Hi.. Just a quicky.In fact, I don't care what the syntax's gonna be. I just wanted the compiler's auto-calculation. So let's leave to Walter what sugar to eat :)1. auto-calculation of static array length [...]I agree, but not by using 'const'. Why not make it a constant-length array instead of a dynamic one? Or maybe use "..." for, as in "int[...] a" or "int[] a = [1,2,...];" :-SExactly! [snip]2. 'this' in struct is not a pointer, but an instance [...]I agree that 'this' in D should behave like C++'s '*this'. If some pro wants the pointer, he can always do '&this'.Not actually ;) 'int.init' is assured to be 'cast(int) 0', but '<variable_name>.init' is not. For example, the test below shows the interesting behavior of .init. <code> unittest { int x = 5; assert(x.init == 5); } unittest { int x; x = 5; assert(x.init == int.init); } </code>5. .init propery of function arguments [...]Making <instance>.init different from <type>.init seems too big a change, since .init is something like a static property of a class.Hmm, I guess I need an example to understand it well.6. special scope rules in contract [...]Aren't the contracts compiled-in optionally? This would mean that if you don't want the contracts to be tested, the declaration in the in/out blocks should still be compiled, but not the statements? Odd.-tetsuya7. do-while scope rule (proposed before) [...]Got my vote too! L.
Dec 14 2004
tetsuya wrote:The problem is that you say "'in' scope inherited by 'body' [...]". The spec says: "For a release build of the code, the in and out code is not inserted." So there is a conflict. I can't see what you would want to use the 'in' scope for in the 'body', and for the sake of efficiency I prefer the spec as it is now. However, I do see the use for letting the scope of 'out' inherit the scope of 'in', which would allow your example. You have my vote on this one :-) As for letting 'out' inherit the 'body' scope, I do not agree. The 'out' contract should verify that the function implementation ('body') does the right thing. For correctness, it is important that changes in the implementation can not change the contract, i.e., the test should be independent from the thing that is being tested. So the 'out' block should not have access to implementation details of the function, therefore I do not want 'out' to inherit the 'body' scope. Cheers, Bastiaan.Hmm, I guess I need an example to understand it well.6. special scope rules in contract [...]Aren't the contracts compiled-in optionally? This would mean that if you don't want the contracts to be tested, the declaration in the in/out blocks should still be compiled, but not the statements? Odd.
Dec 14 2004