diff -uNr dmd-0.147/dmd/html/d/abi.html dmd-0.148/dmd/html/d/abi.html --- dmd-0.147/dmd/html/d/abi.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/abi.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -
bit[] b; -... -b[0..8]; // ok -b[8..16]; // ok -b[8..17]; // ok -b[1..16]; // error, lower bound is not on a byte boundary -- - Misaligned bit array slices will cause an ArrayBoundsError exception - to be thrown at runtime. -
bit[10] x; // array of 10 bits -- - The amount of storage used up is implementation dependent. - Implementation Note: on - Intel CPUs it would be rounded up to the next 32 bit size. - -
x.length // 10, number of bits -x.size // 4, bytes of storage -- - So, the size per element is not (x.size / x.length). - - -
+
+
+
+
+ + +· D vs C/C++/C#/Java + + +· Rationale for Builtins + + +· Converting C to D + + +· Converting C++ to D + + +· The C Preprocessor vs D + + +· D strings vs C++ std::string + + +· D complex vs C++ std::complex + + +· D Contract Programming vs C++ + + + + |
+
+
+
+Core Language Features vs Library Implementation+ + + D offers several capabilities built in to the core language + that are implemented as libraries in other languages such + as C++: + +
+ + Some general initial observations: +
Dynamic Arrays+ + C++ has builtin core arrays. It's just that they don't work very + well. Rather than fix them, several different array types were + created as part of the C++ Standard Template Library, each covering + a different deficiency in the builtin arrays. These + include: + +
+ + As usual, a builtin type lets us create syntactic sugar for it. + This starts with having an array literal, and follows with some + new operators specific to arrays. A library array implementation + has to make due with overloading existing operators. + The indexing operator, a[i], it shares with C++. + Added are the array concatenation operator ~, array append operator + ~=, array slice operator a[i..j], + and the array vector operator + a[]. + + + The ~ and ~= concatenation operators resolve a problem that comes + up when only existing operators can be overloaded. Usually, + is + pressed into service as concatenation for library array + implementations. But that winds up precluding having + mean + array vector addition. Furthermore, concatenation has nothing in + common with addition, and using the same operator for both is + confusing. + + Strings+ + A detailed comparison with C++'s std::string. + + C++ has, of course, builtin string support in the form of string + literals and char arrays. It's just that they suffer from all + the weaknesses of C++ builtin arrays. ++ + But after all, what is a string if not an array of characters? + If the builtin array problems are fixed, doesn't that resolve + the string problems as well? It does. It seems odd at first that + D doesn't have a string class, but since manipulating strings + is nothing more than manipulating arrays of characters, if arrays + work, there's nothing a class adds to it. + + + Furthermore, the oddities resulting from builtin string literals + not being of the same type as the library string class type go + away. + + Associative Arrays+ + The main benefit for this is, once again, syntactic sugar. + An associative array keying off of a type T and storing an + int value is naturally written + as: + +int[T] foo;
+
+
+ rather than:
+
+import std.associativeArray; +... +std.associativeArray.AA!(T, int) foo; ++ + Builtin associative arrays also offer the possibility of having + associative array literals, which are an often requested additional + feature. + + Complex Numbers+ + A detailed comparison with C++'s std::complex. ++ + The most compelling reason is compatibility with C's imaginary + and complex floating point types. + Next, is the ability to have imaginary floating point literals. + Isn't: + + c = (6 + 2i - 1 + 3i) / 3i; ++ + far preferable than writing: + + c = (complex!(double)(6,2) + complex!(double)(-1,3)) / complex!(double)(0,3); ++ + ? It's no contest. + + + |
+ +
For example, consider the Sieve program:
/* Eratosthenes Sieve prime number calculation. */ -bit flags[8191]; +bit flags[8191]; int main() { int i, prime, k, count, iter; diff -uNr dmd-0.147/dmd/html/d/comparison.html dmd-0.148/dmd/html/d/comparison.html --- dmd-0.147/dmd/html/d/comparison.html 2006-02-13 04:19:20.000000000 +0100 +++ dmd-0.148/dmd/html/d/comparison.html 2006-02-25 17:37:14.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Mon Feb 13 04:19:18 2006 +@@ -210,14 +210,6 @@Last update Sat Feb 25 17:37:12 2006No - Arrays of bits - Yes - No - No - No - No - - Built-in strings Yes No @@ -579,6 +571,14 @@ Yes + Scope guards + Yes + No + No + No + No + + try-catch-finally blocks Yes No @@ -707,14 +707,6 @@ Yes - Regular expressions - Yes - No - No - No - No - - Documentation comments Yes No diff -uNr dmd-0.147/dmd/html/d/cppcomplex.html dmd-0.148/dmd/html/d/cppcomplex.html --- dmd-0.147/dmd/html/d/cppcomplex.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/cppcomplex.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments - Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/cppdbc.html dmd-0.148/dmd/html/d/cppdbc.html --- dmd-0.147/dmd/html/d/cppdbc.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/cppdbc.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/cppstrings.html dmd-0.148/dmd/html/d/cppstrings.html --- dmd-0.147/dmd/html/d/cppstrings.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/cppstrings.html 2006-02-25 11:48:34.000000000 +0100 @@ -26,7 +26,7 @@ " title="Read/write comments and feedback">Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/cpptod.html dmd-0.148/dmd/html/d/cpptod.html --- dmd-0.147/dmd/html/d/cpptod.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/cpptod.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/ctod.html dmd-0.148/dmd/html/d/ctod.html --- dmd-0.147/dmd/html/d/ctod.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/ctod.html 2006-02-25 11:48:34.000000000 +0100 @@ -26,7 +26,7 @@ " title="Read/write comments and feedback">Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/dbc.html dmd-0.148/dmd/html/d/dbc.html --- dmd-0.147/dmd/html/d/dbc.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/dbc.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/dcompiler.html dmd-0.148/dmd/html/d/dcompiler.html --- dmd-0.147/dmd/html/d/dcompiler.html 2006-02-10 17:22:32.000000000 +0100 +++ dmd-0.148/dmd/html/d/dcompiler.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:22:30 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/ddoc.html dmd-0.148/dmd/html/d/ddoc.html --- dmd-0.147/dmd/html/d/ddoc.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/ddoc.html 2006-02-25 11:48:38.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Fri Feb 10 17:17:04 2006 +diff -uNr dmd-0.147/dmd/html/d/declaration.html dmd-0.148/dmd/html/d/declaration.html --- dmd-0.147/dmd/html/d/declaration.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/declaration.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:36 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/dlinks.html dmd-0.148/dmd/html/d/dlinks.html --- dmd-0.147/dmd/html/d/dlinks.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/dlinks.html 2006-02-25 11:48:34.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:02 2006 +@@ -87,6 +87,9 @@ · RationaleLast update Sat Feb 25 11:48:33 2006
+ · Exception Safety
+ + · Glossary
@@ -111,6 +114,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/dll.html dmd-0.148/dmd/html/d/dll.html --- dmd-0.147/dmd/html/d/dll.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/dll.html 2006-02-25 11:48:36.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Fri Feb 10 17:17:04 2006 +@@ -87,6 +87,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -111,6 +114,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/dstyle.html dmd-0.148/dmd/html/d/dstyle.html --- dmd-0.147/dmd/html/d/dstyle.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/dstyle.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:04 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/entity.html dmd-0.148/dmd/html/d/entity.html --- dmd-0.147/dmd/html/d/entity.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/entity.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:04 2006 +diff -uNr dmd-0.147/dmd/html/d/enum.html dmd-0.148/dmd/html/d/enum.html --- dmd-0.147/dmd/html/d/enum.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/enum.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:35 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/errors.html dmd-0.148/dmd/html/d/errors.html --- dmd-0.147/dmd/html/d/errors.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/errors.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/exception-safe.html dmd-0.148/dmd/html/d/exception-safe.html --- dmd-0.147/dmd/html/d/exception-safe.html 1970-01-01 01:00:00.000000000 +0100 +++ dmd-0.148/dmd/html/d/exception-safe.html 2006-02-25 17:35:22.000000000 +0100 @@ -0,0 +1,605 @@ + + + + + + + + +Last update Sat Feb 25 11:48:34 2006D Programming Language - Exception Safety + + + + + + + + + + ++
+ + + + ++ + + + + + +
+ + · Overview
+ + + · D for Win32
+ + + · Win32 DLLs in D
+ + + · C .h to D Modules
+ + + · FAQ
+ + + · Style Guide
+ + + · Example: wc
+ + + · Future
+ + + · D Change Log
+ + + · Tech Tips
+ + + · Rationale
+ + + · Exception Safety
+ + + · Glossary
+ + + · Acknowledgements
+ + +
+ Tools +
+ · DMD D Compiler
+ + + · GDC D Compiler
+ + + · Linker
+ + + · Profiler
+ + + · Code Coverage
+ + + · DMD Script Shell
+ + +
+ Community +
+ + · News
+ + + · Forum
+ + + · Announcements
+ + + · Learn
+ + + · D links
+ + +
+ Archives +
+ · digitalmars.D
+ + + · digitalmars.D.dtl
+ + + · digitalmars.D.announce
+ + + · digitalmars.D.learn
+ + + · digitalmars.D.bugs
+ + + · D.gnu
+ + + · Old D
+ + +
+ ++ + Exception Safe Programming
+ +Exception safe programming is programming so that if any piece of +code that might throw an exception does throw an exception, the +the state of the program is not corrupted. +Getting this right using traditional methods often results in complex, +unappealing and brittle code. As a result, exception safety often +is either buggy or simply ignored for +the sake of expediency. + + +Example
+ +For example, if there's a Mutex m that must be acquired and held +for a few statements, then released: + +void abc() +{ + Mutex m = new Mutex; + lock(m); // lock the mutex + foo(); // do processing + unlock(m); // unlock the mutex +} ++ +If foo() throws an exception, then abc() exits via exception unwinding, +unlock(m) is never called and the Mutex is not released. This is a fatal +problem with this code. +
+ +The RAII (Resource Acquisition Is Initialization) idiom +and the try-finally statement form the backbone of +the traditional approaches to writing exception safe programming. +
+ +RAII is scoped destruction, and the example can be fixed by providing +a Lock class with a destructor that gets called upon the exit of the scope: +
+ +class Lock +{ + Mutex m; + + this(Mutex m) + { + this.m = m; + lock(m); + } + + ~this() + { + unlock(m); + } +} + +void abc() +{ + Mutex m = new Mutex; + auto Lock L = new Lock(m); + foo(); // do processing +} ++ +If abc() is exited normally or via an exception thrown from foo(), L gets +its destructor called and the mutex is unlocked. +The try-finally solution to the same problem looks like: + +void abc() +{ + Mutex m = new Mutex; + lock(m); // lock the mutex + try + { + foo(); // do processing + } + finally + { + unlock(m); // unlock the mutex + } +} ++ +Both solutions work, but both have drawbacks. +The RAII solution often requires +the creation of an extra dummy class, which is both a lot of lines of code to +write and a lot of clutter obscuring the control flow logic. +This is worthwhile to manage resources that must be cleaned up and that appear +more than once in a program, but it is clutter when it only needs to be +done once. +The try-finally +solution separates the unwinding code from the setup, and it can often be +a visually large separation. Closely related code should be grouped together. +
+ +The scope exit statement is an easier +approach: +
+ +void abc() +{ + Mutex m = new Mutex; + + lock(m); // lock the mutex + on_scope_exit unlock(m); // unlock on leaving the scope + + foo(); // do processing +} ++ +The on_scope_exit statement is executed at the closing curly +brace upon +normal execution, or when the scope is left due to an exception having +been thrown. +It places the unwinding code where it aesthetically belongs, next to the +creation of the state that needs unwinding. It's far less code to write +than either the RAII or try-finally solutions, and doesn't require the +creation of dummy classes. + +Example
+ +The next example is in a class of problems known as transaction processing: + +Transaction abc() +{ + Foo f; + Bar b; + + f = dofoo(); + b = dobar(); + + return Transaction(f, b); +} +
+ +Both dofoo() and dobar() must succeed, or the transaction has failed. +If the transaction failed, the data must be restored to the state +where neither dofoo() nor dobar() have happened. To support that, +dofoo() has an unwind operation, dofoo_undo(Foo f) which will roll back +the creation of a Foo. +
+ +With the RAII approach: +
+ +class FooX +{ + Foo f; + bool commit; + + this() + { + f = dofoo(); + } + + ~this() + { + if (!commit) + dofoo_undo(f); + } +} + +Transaction abc() +{ + auto FooX f = new FooX(); + Bar b = dobar(); + f.commit = true; + return Transaction(f.f, b); +} ++ +With the try-finally approach: + +Transaction abc() +{ + Foo f; + Bar b; + + f = dofoo(); + try + { + b = dobar(); + return Transaction(f, b); + } + catch (Object o) + { + dofoo_unwind(f); + throw o; + } +} ++ +These work as well, but have the same problems as well. +The RAII approach involves the creation of dummy classes, and the obtuseness +of moving some of the logic out of the abc() function. +The try-finally approach is wordy even with this simple example, try +writing it if there are more than two components of the transaction that +must succeed. It scales poorly. +
+ +The on_scope_failure statement solution looks like: +
+ +Transaction abc() +{ + Foo f; + Bar b; + + f = dofoo(); + on_scope_failure dofoo_unwind(f); + + b = dobar(); + + return Transaction(f, b); +} ++ +The dofoo_unwind(f) only is executed if the scope is exited via an +exception. The unwinding code is minimal and kept aesthetically where +it belongs. It scales up in a natural way to more complex transactions: + + +Transaction abc() +{ + Foo f; + Bar b; + Def d; + + f = dofoo(); + on_scope_failure dofoo_unwind(f); + + b = dobar(); + on_scope_failure dobar_unwind(b); + + d = dodef(); + + return Transaction(f, b, d); +} ++ +Example
+ +The next example involves temporarilly changing the state of some object. +Suppose there's a class data member verbose, which controls the +emission of messages logging the activity of the class. +Inside one of the methods, verbose needs to be turned off because +there's a loop that would otherwise cause a blizzard of messages to be output: + +class Foo +{ + bool verbose; // true means print messages, false means silence + ... + bar() + { + auto verbose_save = verbose; + verbose = false; + ... lots of code ... + verbose = verbose_save; + } +} ++ +There's a problem if Foo.bar() exits via an exception - the verbose +flag state is not restored. +That's easilly fixed with on_scope_exit: + +class Foo +{ + bool verbose; // true means print messages, false means silence + ... + bar() + { + auto verbose_save = verbose; + verbose = false; + on_scope_exit verbose = verbose_save; + + ...lots of code... + } +} ++ +It also neatly solves the problem if ...lots of code... goes on at +some length, and in the future a maintenance programmer inserts a +return statement in it, not realizing that verbose must be reset upon +exit. The reset code is where it belongs conceptually, rather than where +it gets executed +(an analogous case is the continuation expression in a ForStatement). +It works whether the scope is exited by a return, break, goto, continue, +or exception. +
+ +The RAII solution would be to try and capture the false state of verbose +as a resource, an abstraction which doesn't make much sense. +The try-finally solution requires arbitrarilly large separation between +the conceptually linked set and reset code, besides requiring +the addition of an irrelevant scope. +
+ +Example
+ +Here's another example of a multi-step transaction, +this time for an email program. +Sending an email consists of two operations: + ++ +
- Perform the SMTP send operation.
+- Copy the email to the "Sent" folder, which in POP is on the local +disk, and in IMAP is also remote.
+Messages should not appear in "Sent" that haven't been actually sent, +and sent messages must actually appear in "Sent". +
+ +Operation (1) is not undoable because it's a well-known distributed +computing issue. Operation (2) is undoable with some degree of +reliability. So we break the job down into three steps: +
+ ++ +
- Copy the message to "Sent" with a changed title "[Sending] +<Subject>". This operation ensures there's space in the client's IMAP +account (or on the local disk), the rights are proper, the connection +exists and works, etc.
+ +- Send the message via SMTP.
+ +- If sending fails, delete the message from "Sent". If the message +succeeds, +change its title from "[Sending] <Subject>" to "<Subject>". +Both of these operation have a high probability to succeed. If the +folder is local, the probability of success is very high. If the folder +is remote, probability is still vastly higher than that of step (1) +because it doesn't involve an arbitrarily large data transfer.
+ +class Mailer +{ + void Send(Message msg) + { + { + char[] origTitle = msg.Title(); + on_scope_exit msg.SetTitle(origTitle); + msg.SetTitle("[Sending] " ~ origTitle); + Copy(msg, "Sent"); + } + on_scope_success SetTitle(msg.ID(), "Sent", msg.Title); + on_scope_failure Remove(msg.ID(), "Sent"); + SmtpSend(msg); // do the least reliable part last + } +} ++ +This is a compelling solution to a complex problem. +Rewriting it with RAII would require two extra silly classes, +MessageTitleSaver and MessageRemover. +Rewriting the example with try-finally would require nested try-finally +statements or use an extra variable to track state evolution. + +Example
+ +Consider giving feedback to the user about a lengthy +operation (mouse changes to an hourglass, window title is +red/italicized, ...). +With on_scope_exit that can be easilly done without +needing to make an artificial resource out of whatever UI state element +used for the cues: + +void LongFunction() +{ + State save = UIElement.GetState(); + on_scope_exit UIElement.SetState(save); + ...lots of code... +} ++ +Even more so, on_scope_success and on_scope_failure +can be used to give an indication if the operation succeeded or if +an error occurred: + +void LongFunction() +{ + State save = UIElement.GetState(); + on_scope_success UIElement.SetState(save); + on_scope_failure UIElement.SetState(Failed(save)); + ...lots of code... +} ++ +Acknowledgements
+ +I am indebted to Andrei Alexandrescu for his invaluable assistance +with these ideas and text, and to Scott Meyers for teaching +me about exception safe programming. + +References:
+ ++
+ + +- +Generic<Programming>: Change the Way You Write Exception-Safe Code Forever +by Andrei Alexandrescu and Petru Marginean + +
+ +- "Item 29: Strive for exception-safe code" in + + Effective C++ Third Edition, pg. 127 by Scott Meyers + +
+ ++Copyright © 1999-2006 by Digital Mars, All Rights Reserved | +Page generated by Ddoc. ++ + + + + + + + + diff -uNr dmd-0.147/dmd/html/d/expression.html dmd-0.148/dmd/html/d/expression.html --- dmd-0.147/dmd/html/d/expression.html 2006-02-13 03:57:42.000000000 +0100 +++ dmd-0.148/dmd/html/d/expression.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Mon Feb 13 03:57:40 2006 +@@ -835,7 +835,7 @@ and added to the pointer. It is illegal if the second operand modulo 8 is non-zero. -Last update Sat Feb 25 11:48:34 2006bit* p; +bit* p; p += 1; // error, 1%8 is non-zero p += 8; // okdiff -uNr dmd-0.147/dmd/html/d/faq.html dmd-0.148/dmd/html/d/faq.html --- dmd-0.147/dmd/html/d/faq.html 2006-02-11 23:01:14.000000000 +0100 +++ dmd-0.148/dmd/html/d/faq.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 11 23:01:12 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/float.html dmd-0.148/dmd/html/d/float.html --- dmd-0.147/dmd/html/d/float.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/float.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/function.html dmd-0.148/dmd/html/d/function.html --- dmd-0.147/dmd/html/d/function.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/function.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:35 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/future.html dmd-0.148/dmd/html/d/future.html --- dmd-0.147/dmd/html/d/future.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/future.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:04 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/garbage.html dmd-0.148/dmd/html/d/garbage.html --- dmd-0.147/dmd/html/d/garbage.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/garbage.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/glossary.html dmd-0.148/dmd/html/d/glossary.html --- dmd-0.147/dmd/html/d/glossary.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/glossary.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:04 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/html.html dmd-0.148/dmd/html/d/html.html --- dmd-0.147/dmd/html/d/html.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/html.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/htomodule.html dmd-0.148/dmd/html/d/htomodule.html --- dmd-0.147/dmd/html/d/htomodule.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/htomodule.html 2006-02-25 11:48:36.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 11:48:35 2006Last update Fri Feb 10 17:17:04 2006 +@@ -87,6 +87,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -111,6 +114,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/iasm.html dmd-0.148/dmd/html/d/iasm.html --- dmd-0.147/dmd/html/d/iasm.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/iasm.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +@@ -407,7 +407,7 @@ IntegerConstant FloatConstant __LOCAL_SIZE - $$ + $ Register DotIdentifier @@ -473,7 +473,7 @@Last update Sat Feb 25 11:48:35 2006Represents the program counter of the start of the next instruction. So, - jmp $$ ; +diff -uNr dmd-0.147/dmd/html/d/interfaceToC.html dmd-0.148/dmd/html/d/interfaceToC.html --- dmd-0.147/dmd/html/d/interfaceToC.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/interfaceToC.html 2006-02-25 11:48:38.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -jmp $ ;branches to the instruction following the jmp instruction. diff -uNr dmd-0.147/dmd/html/d/index.html dmd-0.148/dmd/html/d/index.html --- dmd-0.147/dmd/html/d/index.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/index.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:02 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:33 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/interface.html dmd-0.148/dmd/html/d/interface.html --- dmd-0.147/dmd/html/d/interface.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/interface.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +@@ -154,8 +154,7 @@Last update Sat Feb 25 11:48:35 2006Interfaces
--InterfaceDeclaration: +@@ -274,10 +272,10 @@ B b = new B(); b.foo(); // returns 2 -D d = (D) b; +D d = cast(D) b; d.foo(); // returns 2 -A a = (A) b; -D d2 = (D) a; +A a = cast(A) b; +D d2 = cast(D) a; d2.foo(); // returns 2, even though it is A's D, not B's DInterfaceDeclaration: interface Identifier InterfaceBody interface Identifier : SuperInterfaces InterfaceBody @@ -167,7 +166,6 @@ { DeclDefs }- Interfaces describe a list of functions that a class that inherits from the interface must implement. A class that implements an interface can be converted to a reference @@ -249,7 +247,7 @@ B b = new B(); b.foo(); // returns 2 -D d = (D) b; // ok since B inherits A's D implementation +D d = cast(D) b; // ok since B inherits A's D implementation d.foo(); // returns 2;Last update Fri Feb 10 17:17:04 2006 +diff -uNr dmd-0.147/dmd/html/d/intro.html dmd-0.148/dmd/html/d/intro.html --- dmd-0.147/dmd/html/d/intro.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/intro.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:36 2006Last update Fri Feb 10 17:17:02 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:33 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/lex.html dmd-0.148/dmd/html/d/lex.html --- dmd-0.147/dmd/html/d/lex.html 2006-02-12 02:09:52.000000000 +0100 +++ dmd-0.148/dmd/html/d/lex.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sun Feb 12 02:09:50 2006 +diff -uNr dmd-0.147/dmd/html/d/memory.html dmd-0.148/dmd/html/d/memory.html --- dmd-0.147/dmd/html/d/memory.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/memory.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/mixin.html dmd-0.148/dmd/html/d/mixin.html --- dmd-0.147/dmd/html/d/mixin.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/mixin.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:35 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/module.html dmd-0.148/dmd/html/d/module.html --- dmd-0.147/dmd/html/d/module.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/module.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/operatoroverloading.html dmd-0.148/dmd/html/d/operatoroverloading.html --- dmd-0.147/dmd/html/d/operatoroverloading.html 2006-02-13 04:16:30.000000000 +0100 +++ dmd-0.148/dmd/html/d/operatoroverloading.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Mon Feb 13 04:16:29 2006 +@@ -451,18 +451,6 @@Last update Sat Feb 25 11:48:34 2006opCatAssign - - - ~~ - no - opMatch - - - - - !~ - no - opMatch - - - @@ -696,32 +684,6 @@ } -
Overloading Match ~~ and !~
- - opMatch serves for both ~~ and !~. - If an opMatch is provided, opNext should be - to so that WhileStatements will work. - opNext takes no arguments, - and must return a value of the same type - as opMatch. - That type must be testable for a boolean result. - The value returned is the value for _match - for the next iteration. -- - This is the implementation used by std.regexp.RegExp: - -
RegExp opMatch(char[] string) -{ - return test(input, 0) ? this : null; -} - -RegExp opNext() -{ - return test(input, pmatch[0].rm_eo) ? this : null; -} --Future Directions
The operators =, !, ., &&, ||, ?:, and a few others will likely never diff -uNr dmd-0.147/dmd/html/d/overview.html dmd-0.148/dmd/html/d/overview.html --- dmd-0.147/dmd/html/d/overview.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/overview.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:02 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:33 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
@@ -656,7 +662,7 @@ The fundamental data type is the bit, and D has a bit data type. This is most useful in creating arrays of bits: -bit[] foo; +bit[] foo;Documentation
@@ -1049,7 +1055,7 @@/* Sieve of Eratosthenes prime numbers */ -bit[8191] flags; +bit[8191] flags; int main() { int i, count, prime, k, iter; diff -uNr dmd-0.147/dmd/html/d/phobos/object.html dmd-0.148/dmd/html/d/phobos/object.html --- dmd-0.147/dmd/html/d/phobos/object.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/object.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Wed Feb 15 09:47:42 2006 +@@ -111,9 +111,9 @@ This module is implicitly imported.Last update Sat Feb 25 10:46:14 2006
-
- alias bool; +
- alias bit;
-- Standard boolean type. Implemented as a bit type. +
-- Standard boolean type. Implemented as a bit type.
diff -uNr dmd-0.147/dmd/html/d/phobos/std_base64.html dmd-0.148/dmd/html/d/phobos/std_base64.html --- dmd-0.147/dmd/html/d/phobos/std_base64.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_base64.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -
Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_bitarray.html dmd-0.148/dmd/html/d/phobos/std_bitarray.html --- dmd-0.147/dmd/html/d/phobos/std_bitarray.html 1970-01-01 01:00:00.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_bitarray.html 2006-02-25 10:46:16.000000000 +0100 @@ -0,0 +1,304 @@ + + + + + + + +Last update Sat Feb 25 10:46:14 2006Digital Mars - The D Programming Language - std.bitarray + + + + + + ++
+ ++ + ++ + +D +Language +Phobos +Comparisons
+ +object
+
+ +std
+ std.base64
+ std.boxer
+ std.compiler
+ std.conv
+ std.cover
+ std.ctype
+ std.date
+ std.demangle
+ std.file
+ std.format
+ std.gc
+ std.intrinsic
+ std.math
+ std.md5
+ std.mmfile
+ std.openrj
+ std.outbuffer
+ std.path
+ std.process
+ std.random
+ std.recls
+ std.regexp
+ std.socket
+ std.socketstream
+ std.stdint
+ std.stdio
+ std.cstream
+ std.stream
+ std.string
+ std.system
+ std.thread
+ std.uri
+ std.utf
+ std.zip
+ std.zlib
+ std.windows.charset
+
+std.windows
+
+std.linux
+
+std.c
+ std.c.stdio
+
+std.c.windows
+
+std.c.linux
+
+ ++ + + std.bitarray
+ + + ++ + + +
- struct BitArray; +
+- An array of bits. + +
+
+ ++
- bool opIndex(uint i); +
+
bool opIndexAssign(bool b, uint i); +- Support for [index] operation for BitArray. + +
+
+ +- BitArray dup(); +
+- Support for array.dup property for BitArray. + +
+
+ +- int opApply(int delegate(inout bool) dg); +
+
int opApply(int delegate(inout uint, inout bool) dg); +- Support for foreach loops for BitArray. + +
+
+ +- BitArray reverse(); +
+- Support for array.reverse property for BitArray. + +
+
+ +- BitArray sort(); +
+- Support for array.sort property for BitArray. + +
+
+ +- int opEquals(BitArray a2); +
+- Support for operators == and != for bit arrays. + +
+
+ +- int opCmp(BitArray a2); +
+- Implement comparison operators. + +
+
+ +- void init(bool[] ba); +
+- Set BitArray to contents of ba[] + +
+
+ +- void init(void[] v, uint numbits); +
+- Map BitArray onto v[], with numbits being the number of bits + in the array. Does not copy the data. +
+
+This is the inverse of opCast. + +
+ +- void[] opCast(); +
+- Convert to void[]. + +
+
+ +- BitArray opCom(); +
+- Support for unary operator ~ for bit arrays. + +
+
+ +- BitArray opAnd(BitArray e2); +
+- Support for binary operator & for bit arrays. + +
+
+ +- BitArray opOr(BitArray e2); +
+- Support for binary operator | for bit arrays. + +
+
+ +- BitArray opXor(BitArray e2); +
+- Support for binary operator ^ for bit arrays. + +
+
+ +- BitArray opSub(BitArray e2); +
+- Support for binary operator - for bit arrays. +
+
+a - b for BitArrays means the same thing as a & ~b. + +
+ +- BitArray opAndAssign(BitArray e2); +
+- Support for operator &= bit arrays. + +
+
+ +- BitArray opOrAssign(BitArray e2); +
+- Support for operator |= for bit arrays. + +
+
+ +- BitArray opXorAssign(BitArray e2); +
+- Support for operator ^= for bit arrays. + +
+
+ +- BitArray opSubAssign(BitArray e2); +
+- Support for operator -= for bit arrays. +
+
+a -= b for BitArrays means the same thing as a &= ~b. + +
+ +- BitArray opCatAssign(bool b); +
+
BitArray opCatAssign(BitArray b); +- Support for operator ~= for bit arrays. + +
+
+ +- BitArray opCat(bool b); +
+
BitArray opCat_r(bool b); +
BitArray opCat(BitArray b); +- Support for binary operator ~ for bit arrays. + +
+
+ ++Copyright © 1999-2006 by Digital Mars, All Rights Reserved | +Page generated by Ddoc. ++ + + + + + + + + + + diff -uNr dmd-0.147/dmd/html/d/phobos/std_compiler.html dmd-0.148/dmd/html/d/phobos/std_compiler.html --- dmd-0.147/dmd/html/d/phobos/std_compiler.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_compiler.html 2006-02-25 10:46:16.000000000 +0100 @@ -28,7 +28,7 @@ Identify the compiler used and its various features." target="_top" title="Read/write comments and feedback">Comments -Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_cover.html dmd-0.148/dmd/html/d/phobos/std_cover.html --- dmd-0.147/dmd/html/d/phobos/std_cover.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_cover.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:14 2006Last update Wed Feb 15 09:47:42 2006 +@@ -127,12 +127,12 @@Last update Sat Feb 25 10:46:15 2006
- void setMerge(bit flag); +
- void setMerge(bool flag);
- Set merge mode.
Params:
-
bit flag +
diff -uNr dmd-0.147/dmd/html/d/phobos/std_date.html dmd-0.148/dmd/html/d/phobos/std_date.html --- dmd-0.147/dmd/html/d/phobos/std_date.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_date.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments - bool flag true means new data is summed with existing data in the listing file; false means a new listing file is always created. Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_demangle.html dmd-0.148/dmd/html/d/phobos/std_demangle.html --- dmd-0.147/dmd/html/d/phobos/std_demangle.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_demangle.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:42 2006 +@@ -123,7 +123,7 @@ int main() { char[] buffer; - bit inword; + bool inword; int c; while ((c = fgetc(stdin)) != EOF) diff -uNr dmd-0.147/dmd/html/d/phobos/std_file.html dmd-0.148/dmd/html/d/phobos/std_file.html --- dmd-0.147/dmd/html/d/phobos/std_file.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_file.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:42 2006 +@@ -378,13 +378,13 @@Last update Sat Feb 25 10:46:14 2006
-- void listdir(char[] pathname, bit delegate(char[] filename) callback); +
- void listdir(char[] pathname, bool delegate(char[] filename) callback);
- For each file and directory name in pathname[], pass it to the callback delegate.
Params:
-
bit delegate(char[] filename) callback +
@@ -401,7 +401,7 @@ char[] pathname = args[1]; char[][] result; - bool listing(char[] filename) + bool listing(char[] filename) { result ~= std.path.join(pathname, filename); return true; // continue @@ -417,13 +417,13 @@ bool delegate(char[] filename) callback Delegate that processes each filename in turn. Returns true to continue, false to stop.
-- void listdir(char[] pathname, bit delegate(DirEntry * de) callback); +
- void listdir(char[] pathname, bool delegate(DirEntry * de) callback);
- For each file and directory DirEntry in pathname[], pass it to the callback delegate.
Params:
-
bit delegate(DirEntry * de) callback +
@@ -436,7 +436,7 @@ void main(char[][] args) { - bool callback(DirEntry* de) + bool callback(DirEntry* de) { if (de.isdir) listdir(de.name, &callback); diff -uNr dmd-0.147/dmd/html/d/phobos/std_format.html dmd-0.148/dmd/html/d/phobos/std_format.html --- dmd-0.147/dmd/html/d/phobos/std_format.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_format.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments - bool delegate(DirEntry * de) callback Delegate that processes each DirEntry in turn. Returns true to continue, false to stop. Last update Wed Feb 15 09:47:42 2006 +@@ -287,7 +287,7 @@Last update Sat Feb 25 10:46:14 2006- The corresponding argument is formatted in a manner consistent with its type:
-
- bit +
- bool
- The result is 'true' or 'false'.
- integral types
- The %d format is used. @@ -314,7 +314,7 @@ and is formatted as an integer. If the argument is a signed type and the FormatChar is d it is converted to a signed string of characters, otherwise it is treated as - unsigned. An argument of type bit is formatted as '1' + unsigned. An argument of type bool is formatted as '1' or '0'. The base used is binary for b, octal for o, decimal for d, and hexadecimal for x or X. diff -uNr dmd-0.147/dmd/html/d/phobos/std_math.html dmd-0.148/dmd/html/d/phobos/std_math.html --- dmd-0.147/dmd/html/d/phobos/std_math.html 2006-02-15 09:47:42.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_math.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -
Last update Wed Feb 15 09:47:41 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_md5.html dmd-0.148/dmd/html/d/phobos/std_md5.html --- dmd-0.147/dmd/html/d/phobos/std_md5.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_md5.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:14 2006Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_outbuffer.html dmd-0.148/dmd/html/d/phobos/std_outbuffer.html --- dmd-0.147/dmd/html/d/phobos/std_outbuffer.html 2006-02-15 09:47:42.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_outbuffer.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:41 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_path.html dmd-0.148/dmd/html/d/phobos/std_path.html --- dmd-0.147/dmd/html/d/phobos/std_path.html 2006-02-15 09:47:42.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_path.html 2006-02-25 10:46:14.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:14 2006Last update Wed Feb 15 09:47:41 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_random.html dmd-0.148/dmd/html/d/phobos/std_random.html --- dmd-0.147/dmd/html/d/phobos/std_random.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_random.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:13 2006Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_regexp.html dmd-0.148/dmd/html/d/phobos/std_regexp.html --- dmd-0.147/dmd/html/d/phobos/std_regexp.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_regexp.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:14 2006Last update Wed Feb 15 09:47:42 2006 +@@ -268,6 +268,21 @@Last update Sat Feb 25 10:46:15 2006
Returns:
corresponding RegExp if found, null if not. +
+Example:
+import std.stdio; + import std.regexp; + + void main() + { + if (m; std.regexp.search("abcdef", "c")) + { + writefln("%s[%s]%s", m.pre, m.match(0), m.post); + } + } + // Prints: + // ab[c]def +
@@ -315,38 +330,30 @@
-- RegExp opMatch(char[] string); +
- RegExp search(char[] string); +
-
int opApply(int delegate(inout RegExp) dg);- Determine if there is an initial match with string[]. +
- Set up for start of foreach loop.
-
Returns:
-this if there is a match, null if not +search() returns instance of RegExp set up to search string[].
Example:
-This makes it possible - to use RegExp's in a MatchExpression: -if (RegExp("^abc") ~~ string) - writefln("string starts with 'abc'"); -- -
+import std.stdio; + import std.regexp; -- RegExp opNext(); -
-- Determine next match in string. -
-
-Returns:
-this if there is a match, null if not -
-Example:
-This makes it possible, along with opMatch operator overload, - to use RegExp's in a WhileStatement: -RegExp r = new RegExp("[a..c]"); - writef("'"); - while (r ~~ "abdd3cce") - writef(_match.match(0)); - writefln("'"); // writes 'abcc' + void main() + { + foreach(m; RegExp("ab").search("abcabcabab")) + { + writefln("%s[%s]%s", m.pre, m.match(0), m.post); + } + } + // Prints: + // [ab]cabcabab + // abc[ab]cabab + // abcabc[ab]ab + // abcabcab[ab]
diff -uNr dmd-0.147/dmd/html/d/phobos/std_stdio.html dmd-0.148/dmd/html/d/phobos/std_stdio.html --- dmd-0.147/dmd/html/d/phobos/std_stdio.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_stdio.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_stream.html dmd-0.148/dmd/html/d/phobos/std_stream.html --- dmd-0.147/dmd/html/d/phobos/std_stream.html 2006-02-15 09:47:42.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_stream.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:41 2006 +@@ -325,7 +325,7 @@Last update Sat Feb 25 10:46:14 2006
- bit eof(); +
- bool eof();
- Return whether the current file position is the same as the end of the file. @@ -337,7 +337,7 @@
-
- bit isOpen(); +
- bool isOpen();
- Return true if the stream is currently open.
-
@@ -484,7 +484,7 @@
- bit isOpen(); +
- bool isOpen();
- Return true if the stream is currently open.
-
@@ -522,37 +522,37 @@
-
- bit readable; +
- bool readable;
- Indicates whether this stream can be read from.
-
- bit writeable; +
- bool writeable;
- Indicates whether this stream can be written to.
-
- bit seekable; +
- bool seekable;
- Indicates whether this stream can be seeked within.
-
- protected bit isopen; +
- protected bool isopen;
- Indicates whether this stream is open.
-
- protected bit readEOF; +
- protected bool readEOF;
- Indicates whether this stream is at eof
-
- protected bit prevCr; +
- protected bool prevCr;
- For a non-seekable stream indicates that
-
@@ -683,7 +683,7 @@
-
- bit nestClose; +
- bool nestClose;
- Property indicating when this stream closes to close the source stream as
-
diff -uNr dmd-0.147/dmd/html/d/phobos/std_string.html dmd-0.148/dmd/html/d/phobos/std_string.html --- dmd-0.147/dmd/html/d/phobos/std_string.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_string.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Wed Feb 15 09:47:41 2006 +@@ -442,7 +442,7 @@Last update Sat Feb 25 10:46:14 2006
- char[] toString(bit b); +
- char[] toString(bool b);
char[] toString(char c);
char[] toString(ubyte ub);
char[] toString(ushort us); @@ -608,7 +608,7 @@
- final bit isNumeric(char[] s, bit bAllowSep = false); +
- final bool isNumeric(char[] s, bool bAllowSep = false);
- [in] char[] s can be formatted in the following ways:
-
@@ -657,13 +657,13 @@
- bit isNumeric(...); +
- bool isNumeric(...);
- Allow any object as a parameter
-
- bit isNumeric(TypeInfo[] _arguments, void* _argptr); +
- bool isNumeric(TypeInfo[] _arguments, void* _argptr);
- Check only the first parameter, all others will be ignored.
diff -uNr dmd-0.147/dmd/html/d/phobos/std_uri.html dmd-0.148/dmd/html/d/phobos/std_uri.html --- dmd-0.147/dmd/html/d/phobos/std_uri.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_uri.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_utf.html dmd-0.148/dmd/html/d/phobos/std_utf.html --- dmd-0.147/dmd/html/d/phobos/std_utf.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_utf.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:42 2006 +@@ -136,7 +136,7 @@Last update Sat Feb 25 10:46:15 2006- bit isValidDchar(dchar c); +
- bool isValidDchar(dchar c);
- Test if c is a valid UTF-32 character.
diff -uNr dmd-0.147/dmd/html/d/phobos/std_windows_charset.html dmd-0.148/dmd/html/d/phobos/std_windows_charset.html --- dmd-0.147/dmd/html/d/phobos/std_windows_charset.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_windows_charset.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Wed Feb 15 09:47:43 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_zip.html dmd-0.148/dmd/html/d/phobos/std_zip.html --- dmd-0.147/dmd/html/d/phobos/std_zip.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_zip.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/phobos/std_zlib.html dmd-0.148/dmd/html/d/phobos/std_zlib.html --- dmd-0.147/dmd/html/d/phobos/std_zlib.html 2006-02-15 09:47:44.000000000 +0100 +++ dmd-0.148/dmd/html/d/phobos/std_zlib.html 2006-02-25 10:46:16.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Sat Feb 25 10:46:15 2006Last update Wed Feb 15 09:47:42 2006 +diff -uNr dmd-0.147/dmd/html/d/portability.html dmd-0.148/dmd/html/d/portability.html --- dmd-0.147/dmd/html/d/portability.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/portability.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 10:46:15 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/pragma.html dmd-0.148/dmd/html/d/pragma.html --- dmd-0.147/dmd/html/d/pragma.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/pragma.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:35 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/pretod.html dmd-0.148/dmd/html/d/pretod.html --- dmd-0.147/dmd/html/d/pretod.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/pretod.html 2006-02-25 11:48:34.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:02 2006 +diff -uNr dmd-0.147/dmd/html/d/property.html dmd-0.148/dmd/html/d/property.html --- dmd-0.147/dmd/html/d/property.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/property.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:33 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/rationale.html dmd-0.148/dmd/html/d/rationale.html --- dmd-0.147/dmd/html/d/rationale.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/rationale.html 2006-02-25 11:48:38.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:04 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:36 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/rdmd.html dmd-0.148/dmd/html/d/rdmd.html --- dmd-0.147/dmd/html/d/rdmd.html 1970-01-01 01:00:00.000000000 +0100 +++ dmd-0.148/dmd/html/d/rdmd.html 2006-02-25 11:48:38.000000000 +0100 @@ -0,0 +1,238 @@ + + + + + + + + +D Programming Language - rdmd + + + + + + + + + + ++
+ + + + ++ + + + + + +
+ + · Overview
+ + + · D for Win32
+ + + · Win32 DLLs in D
+ + + · C .h to D Modules
+ + + · FAQ
+ + + · Style Guide
+ + + · Example: wc
+ + + · Future
+ + + · D Change Log
+ + + · Tech Tips
+ + + · Rationale
+ + + · Exception Safety
+ + + · Glossary
+ + + · Acknowledgements
+ + +
+ Tools +
+ · DMD D Compiler
+ + + · GDC D Compiler
+ + + · Linker
+ + + · Profiler
+ + + · Code Coverage
+ + + · DMD Script Shell
+ + +
+ Community +
+ + · News
+ + + · Forum
+ + + · Announcements
+ + + · Learn
+ + + · D links
+ + +
+ Archives +
+ · digitalmars.D
+ + + · digitalmars.D.dtl
+ + + · digitalmars.D.announce
+ + + · digitalmars.D.learn
+ + + · digitalmars.D.bugs
+ + + · D.gnu
+ + + · Old D
+ + +
+ ++ + rdmd
+ +rdmd is a program to compile, cache and execute D source code files or +'pseudo shell scripts' (using the she-bang syntax with dmd v0.146 or above) +on Linux and Windows systems. +
+ +It will cache the executable in the /tmp directory by default and will +re-compile the executable if any of the source file, the compiler or rdmd +itself is newer than the cached executable. It can optionally use gdmd if +specified, but uses dmd by default. +
+ +Usage:
+ +rdmd [D compiler arguments] [rdmd arguments] progfile.d [program arguments] +
+ +rdmd arguments: +
+ ++ +
- --help
+- This message
+- --force
+- Force re-compilation of source code + [default = do not force]
+- --compiler=(dmd|gdmd)
+- Specify compiler [default = dmd]
+- --tmpdir=tmp_dir_path
+- Specify directory to store cached program + and other temporaries [default = /tmp]
+Notes:
+ ++ +
- dmd or gdmd must be in the current user context $PATH
+- rdmd does not support execution of D source code via stdin
+- rdmd will only compile and execute files with a '.d' file + extension
+- rdmd's functionality will probably get folded into dmd itself
+written by Dave Fladebo and Robert Mariottini
+ ++Copyright © 1999-2006 by Digital Mars, All Rights Reserved | +Page generated by Ddoc. ++ + + + + + + + + diff -uNr dmd-0.147/dmd/html/d/statement.html dmd-0.148/dmd/html/d/statement.html --- dmd-0.147/dmd/html/d/statement.html 2006-02-13 14:53:38.000000000 +0100 +++ dmd-0.148/dmd/html/d/statement.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Mon Feb 13 14:53:37 2006 +@@ -181,6 +181,7 @@ WithStatement SynchronizeStatement TryStatement + OnScopeStatement ThrowStatement VolatileStatement AsmStatement @@ -313,8 +314,12 @@ If statements provide simple conditional execution of statements.Last update Sat Feb 25 11:48:34 2006IfStatement: - if ( Expression ) ThenStatement - if ( Expression ) ThenStatement else ElseStatement + if ( IfCondition ) ThenStatement + if ( IfCondition ) ThenStatement else ElseStatement + +IfCondition: + Expression + Identifier ; Expression ThenStatement: Statement @@ -333,44 +338,26 @@ else with the nearest if statement.- If the Expression is a MatchExpression, - then the special variable _match is declared and - assigned the result of the MatchExpression. - The scope of _match is only for the duration of the - ThenStatement. -
- - _match has the following read-only properties: -
- -
-
-- pre slice of the string preceding the match -- post slice of the string following the match -- match(0) slice of the string which matches -- match(n) nth parenthesized subexpression match -- - The value of _match itself is no longer valid after it goes out of - scope, although the values of any slices it referred to remain valid. - -
if ("b(c)d" ~~ "abcdef") -{ - writefln("[%s]", _match.pre); // prints [a] - writefln("[%s]", _match.post); // prints [ef] - writefln("[%s]", _match.match(0)); // prints [bcd] - writefln("[%s]", _match.match(1)); // prints [c] - writefln("[%s]", _match.match(2)); // prints [] + If an Identifier is provided, it is declared and initialized + to the value + and type of the Expression. Its scope extends from when it is + initialized to the end of the ThenStatement. + +import std.regexp; +... +if (m; std.regexp.search("abcdef", "b(c)d")) +{ + writefln("[%s]", m.pre); // prints [a] + writefln("[%s]", m.post); // prints [ef] + writefln("[%s]", m.match(0)); // prints [bcd] + writefln("[%s]", m.match(1)); // prints [c] + writefln("[%s]", m.match(2)); // prints [] } else { - writefln(_match.post); // error, _match undefined + writefln(m.post); // error, m undefined } -writefln(_match.pre); // error, _match undefined +writefln(m.pre); // error, m undefinedWhile Statement
@@ -391,48 +378,15 @@ A break statement will exit the loop. A continue statement will transfer directly to evaluating Expression again. -- - If the Expression is a MatchExpression, - then the WhileStatement is rewritten as: - -
{ declare _match as type returned by MatchExpression; - if ((_match = MatchExpression), _match) - { - do - Statement - while ((_match = _match.opNext), _match); - } -} -- - This means that the loop will iterate over each match of the - string to the regular expression. - The special variable _match is declared and is in scope - in Statement, and can be used analogously to the IfStatement - to access the various results of the match. - The MatchExpression is only - evaluated once, not each iteration. - -writef("'"); -while ("[a..c]" ~~ "abdd3cce") - writef(_match.match(0)); -writefln("'"); // writes 'abcc' -- - By providing the operator overloads opMatch and opNext, - a class or struct can participate in these loops.Do-While Statement
Do-While statements implement simple loops. --DoStatement: +DoStatement: do Statement while ( Expression )- Statement is executed. Then Expression is evaluated and must have a type that can be converted to a boolean. If it's true the @@ -451,7 +405,7 @@ForStatement: - for ()Initialize; Test; Increment Statement + for (Initialize; Test; Increment) Statement Initialize: empty @@ -517,9 +471,8 @@ A foreach statement loops over the contents of an aggregate. --ForeachStatement: - foreach ()ForeachTypeList; Expression Statement +ForeachStatement: + foreach (ForeachTypeList; Expression) Statement ForeachTypeList: ForeachType @@ -528,9 +481,10 @@ ForeachType: inout Type Identifier Type Identifier + inout Identifier + Identifier- Expression is evaluated. It must evaluate to an aggregate expression of type static array, dynamic array, associative array, @@ -753,7 +707,7 @@SwitchStatement: - switch () Expression BlockStatement + switch ( Expression ) BlockStatement CaseStatement: case ExpressionList : Statement @@ -996,9 +950,9 @@WithStatement: - with () Expression BlockStatement - with () Symbol BlockStatement - with () TemplateInstance BlockStatement + with ( Expression ) BlockStatement + with ( Symbol ) BlockStatement + with ( TemplateInstance ) BlockStatement@@ -1053,7 +1007,7 @@SynchronizeStatement: synchronized Statement - synchronized () Expression Statement + synchronized ( Expression ) Statement@@ -1082,8 +1036,7 @@ Exception handling is done with the try-catch-finally statement. --TryStatement: +TryStatement: try BlockStatement Catches try BlockStatement Catches FinallyStatement try BlockStatement FinallyStatement @@ -1097,14 +1050,13 @@ catch BlockStatement Catch: - catch () CatchParameter BlockStatement + catch ( CatchParameter ) BlockStatement FinallyStatement: finally BlockStatement- - Parameter declares a variable v of type T, where T is Object + CatchParameter declares a variable v of type T, where T is Object or derived from Object. v is initialized by the throw expression if T is of the same type or a base class of the throw expression. The catch clause will be executed if the exception object is of @@ -1181,6 +1133,88 @@ Expression is evaluated and must be an Object reference. The Object reference is thrown as an exception. +On Scope Statement
+ +OnScopeStatement: + on_scope_exit Statement + on_scope_success Statement + on_scope_failure Statement ++ + The OnScopeStatement executes Statement at the close + of the current scope, rather than at the point where the + OnScopeStatement appears. + on_scope_exit executes Statement when the scope + exits normally or when it exits due to exception unwinding. + on_scope_failure executes Statement when the scope + exits due to exception unwinding. + on_scope_success executes Statement when the scope + exits normally. ++ + If there are multiple OnScopeStatements in a scope, they + are executed in the reverse lexical order in which they appear. + If any auto instances are to be destructed upon the close of the + scope, they also are interleaved with the OnScopeStatements + in the reverse lexeical order in which they appear. + +
writef("1"); +{ + writef("2"); + on_scope_exit writef("3"); + on_scope_exit writef("4"); + writef("5"); +} +writefln(); ++ + writes: + +12543 ++ +{ + on_scope_exit writef("1"); + on_scope_success writef("2"); + on_scope_exit writef("3"); + on_scope_success writef("4"); +} +writefln(); ++ + writes: + +4321 ++ +class Foo +{ + this() { writef("0"); } + ~this() { writef("1"); } +} + +try +{ + on_scope_exit writef("2"); + on_scope_success writef("3"); + auto Foo f = new Foo(); + on_scope_failure writef("4"); + throw new Exception("msg"); + on_scope_exit writef("5"); + on_scope_success writef("6"); + on_scope_failure writef("7"); +} +catch (Exception e) +{ +} +writefln(); ++ + writes: + +0412 ++Volatile Statement
No code motion occurs across volatile statement boundaries. diff -uNr dmd-0.147/dmd/html/d/struct.html dmd-0.148/dmd/html/d/struct.html --- dmd-0.147/dmd/html/d/struct.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/struct.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/template.html dmd-0.148/dmd/html/d/template.html --- dmd-0.147/dmd/html/d/template.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/template.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/type.html dmd-0.148/dmd/html/d/type.html --- dmd-0.147/dmd/html/d/type.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/type.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:02 2006 +@@ -164,7 +164,7 @@Last update Sat Feb 25 11:48:34 2006Description Default Initializer (.init) void no type - - bit single bit false + bool boolean value false byte signed 8 bits 0 ubyte unsigned 8 bits 0 short signed 16 bits 0 @@ -263,7 +263,7 @@ from to - bit + bool int byte diff -uNr dmd-0.147/dmd/html/d/version.html dmd-0.148/dmd/html/d/version.html --- dmd-0.147/dmd/html/d/version.html 2006-02-10 17:17:04.000000000 +0100 +++ dmd-0.148/dmd/html/d/version.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments - Last update Fri Feb 10 17:17:03 2006 +diff -uNr dmd-0.147/dmd/html/d/wc.html dmd-0.148/dmd/html/d/wc.html --- dmd-0.147/dmd/html/d/wc.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/wc.html 2006-02-25 11:48:36.000000000 +0100 @@ -25,7 +25,7 @@ | Comments -Last update Sat Feb 25 11:48:34 2006Last update Fri Feb 10 17:17:04 2006 +@@ -88,6 +88,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -112,6 +115,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community
diff -uNr dmd-0.147/dmd/html/d/windows.html dmd-0.148/dmd/html/d/windows.html --- dmd-0.147/dmd/html/d/windows.html 2006-02-10 17:17:06.000000000 +0100 +++ dmd-0.148/dmd/html/d/windows.html 2006-02-25 11:48:36.000000000 +0100 @@ -24,7 +24,7 @@ | D | Comments -Last update Fri Feb 10 17:17:04 2006 +@@ -87,6 +87,9 @@ · RationaleLast update Sat Feb 25 11:48:35 2006
+ · Exception Safety
+ + · Glossary
@@ -111,6 +114,9 @@ · Code Coverage
+ · DMD Script Shell
+ +
Community