Language Specification /
Current Diff
From LanguageSpecification.
I'm sorry that I currently (after release 0.66, Jun 9 2003) can't provide an update to the PDF. For some people this raw diff output may be helpful to locate the differences in the documentation at least. -- HelmutLeitner
=================== acknowledgements.html ==================== =================== alpha.html ==================== 17c17 < <p><small><i>Last update Feb 20, 2003</i></small> --- > <br><small><i>Last update May 15, 2003</i></small> 22c22,47 < This is the D compiler for Win32. --- > <ul> > <li> D for <a href="#Win32">Win32</a> > <li> D for <a href="#linux">x86 Linux</a> > <li> <a href="#general">general</a> > </ul> > > <h2>Files Common to Win32 and Linux</h2> > > <dl> > > <dt><tt>\dmd\src\phobos\</tt> > <dd>D runtime library source > > <dt><tt>\dmd\src\dmd\</tt> > <dd>D compiler front end source under dual (GPL and Artistic) license > > <dt><tt>\dmd\html\d\</tt> > <dd>Documentation > > <dt><tt>\dmd\samples\d\</tt> > <dd>Sample D programs > > </dl> > > <hr> > <a name="Win32"><h1>Win32 D Compiler</h1></a> 40,51d64 < <dt><tt>\dmd\src\phobos\</tt> < <dd>D runtime library source < < <dt><tt>\dmd\src\dmd\</tt> < <dd>D compiler front end source under dual (GPL and Artistic) license < < <dt><tt>\dmd\html\d\</tt> < <dd>Documentation < < <dt><tt>\dmd\samples\d\</tt> < <dd>Sample D programs < 228a242,453 > > <hr> > <a name="linux"><h1>Linux D Compiler</h1></a> > > <h2>Files</h2> > > <dl> > > <dt><tt>/dmd/bin/dmd</tt> > <dd>D compiler executable > > <dt><tt>/dmd/bin/dumpobj</tt> > <dd>Elf file dumper > > <dt><tt>/dmd/bin/obj2asm</tt> > <dd>Elf file disassembler > > <dt><tt>/dmd/bin/dmd.conf</tt> > <dd>Global compiler settings (copy to <tt>/etc/dmd.conf</tt>) > > <dt><tt>/dmd/lib/libphobos.a</tt> > <dd>D runtime library (copy to <tt>/usr/lib/libphobos.a</tt>) > > </dl> > > <h2>Requirements</h2> > > <ul> > <li> 32 bit x86 Linux operating system > > <li> > <a HREF="ftp://ftp.digitalmars.com/dmd.zip" title="download D compiler"> > D compiler</a> for Linux > > <li> Gnu C compiler (gcc) > > </ul> > > <h2>Installation</h2> > > <ol> > > <li> Unzip the archive into your home directory. > It will create > a <tt>~/dmd</tt> directory with all the files in it. > All the tools are command line tools, which means > they are run from a console window. > > <li> Edit the file <tt>~/dmd/bin/dmd.conf</tt> to put the path in to > where the phobos source files are. > > <li> Copy <tt>dmd.conf</tt> to <tt>/etc</tt>: > > <如re> > cp dmd/bin/dmd.conf /etc > </如re> > > <li> Give execute permission to the following files: > > <如re> > chmod u+x dmd/bin/dmd dmd/bin/obj2asm dmd/bin/dumpobj > </如re> > > <li> Put <tt>dmd/bin</tt> on your <b>PATH</b>, > or copy the linux executables > to <tt>/usr/local/bin</tt> > > <li> Copy the library to <tt>/usr/lib</tt>: > > <如re> > cp dmd/lib/libphobos.a /usr/lib > </如re> > > </ol> > > <h2>Compiler Arguments and Switches</h2> > > <dl><dl> > <dt><b>dmd</b> <i>files</i>... -<i>switch</i>... > <p> > <dt><i>files</i>... > <dd> > <table border=1 cellpadding=4 cellspacing=0 summary="File Extensions"> > <tr> > <th>Extension > <th>File Type > <tr> > <td><i>none</i> > <td>D source files > <tr> > <td><b>.d</b> > <td>D source files > <tr> > <td><b>.o</b> > <td>Object files to link in > <tr> > <td><b>.a</b> > <td>Library files to link in > <tr> > </table> > <dt><b>-c</b></dt> > <dd>compile only, do not link > <dt><b>-d</b></dt> > <dd>allow deprecated features > <dt><b>-debug</b></dt> > <dd>compile in debug code > <dt><b>-debug=</b><i>level</i></dt> > <dd>compile in debug code <= <i>level</i> > <dt><b>-debug=</b><i>ident</i></dt> > <dd>compile in debug code identified by <i>ident</i> > <dt><b>-g</b></dt> > <dd>add symbolic debug info > <dt><b>-gt</b></dt> > <dd>add trace profiling hooks (not supported under linux) > <dt><b>-inline</b> > <dd>inline expand functions > <dt><b>-I</b><i>path</i> > <dd>where to look for imports. <i>path</i> is a ; separated > list of paths. Multiple <b>-I</b>'s can be used, and the paths > are searched in the same order. > <dt><b>-L</b><i>linkerflag</i> > <dd>pass <i>linkerflag</i> to the linker, for example, > <tt>-M</tt> > <dt><b>-O</b></dt> > <dd>optimize > <dt><b>-o</b><i>objdir</i></dt> > <dd>write object files to directory <i>objdir</i> instead > of to the current directory > <dt><b>-o</b> <i>filename</i></dt> > <dd>name object file (<b>-c</b>) or executable > file (no <b>-c</b>) <i>filename</i> > <dt><b>-release</b></dt> > <dd>compile release version > <dt><b>-unittest</b></dt> > <dd>compile in unittest code > <dt><b>-v</b></dt> > <dd>verbose > <dt><b>-version=</b><i>level</i></dt> > <dd>compile in version code >= <i>level</i> > <dt><b>-version=</b><i>ident</i></dt> > <dd>compile in version code identified by <i>ident</i> > </dl></dl> > > <h2>Linking</h2> > > Linking is done directly by the <b>dmd</b> compiler after a successful > compile. To prevent <b>dmd</b> from running the linker, use the > <b>-c</b> switch. > <p> > > The actual linking is done by running <b>gcc</b>. > This ensures compatibility with modules compiled with <b>gcc</b>. > > <h2>Environment Variables</h2> > > The D compiler dmd uses the following environment variables: > > <dl> > > <dt><b>DFLAGS</b> > <dd>The value of <b>DFLAGS</b> is treated as if it were appended to the > command line to <b>dmd</b>. > > </dl> > > <h2>dmd.conf Initialization File</h2> > > <b>dmd</b> will look for the initialization file <b>dmd.conf</b> > in the directory <tt>/etc</tt>. If found, environment variable > settings in the file will override any existing settings. > This is handy to make <b>dmd</b> independent of programs with > conflicting use of environment variables. > <p> > > Environment variables follow the <tt>[Environment]</tt> section > heading, in name=value pairs. Comments are lines that start with ;. > For example: > <如re> > ; dmd.conf file for dmd > ; Names enclosed by %% are searched for in the existing environemnt > ; and inserted. The special name %@P% is replaced with the path > ; to this file. > [Environment] > DFLAGS="-I%@P%\..\src\phobos" > </如re> > > <h2>Differences from Win32 version</h2> > > <ul> > <li> String literals are read-only. Attempting to write to them > will cause a segment violation. > > <li> The configuration file is <tt>/etc/dmd.conf</tt> > </ul> > > <h2>Linux Bugs</h2> > > <ul> > <li> <b>-g</b> is not implemented, because I haven't figured out how to > do it yet. <b>gdb</b> still works, though, at the global symbol level. > > <li> The code generator output has not been tuned yet, so it > can be bloated. > > <li> Shared libraries cannot be generated. > > <li> The exception handling is not compatible with the way <b>g++</b> > does it. I don't know if this is an issue or not. > </ul> > > <hr> > <a name="general"><h1>General</h1></a> =================== arrays.html ==================== =================== attribute.html ==================== =================== changelog.html ==================== 26a27,30 > <li> What's new for <a href="#new066">D 0.66</a> > <li> What's new for <a href="#new065">D 0.65</a> > <li> What's new for <a href="#new064">D 0.64</a> > <li> What's new for <a href="#new063">D 0.63</a> 46c50 < D compiler</a> for Win32 --- > D compiler</a> for Win32 and x86 linux 47a52,110 > </ul> > > <hr><!-- ======================================================= --> > <a name="new066"><h3>What's New for D 0.66</h3></a> > > <small><i>Jun 8, 2003</i></small> > > <ul> > <li> Added <a href="phobos.html#uri">uri</a> module. > <li> Added <a href="phobos.html#utf">utf</a> module. > <li> Added constant folding for ?: operator. > <li> Zero initialized structs no longer need to link to > the module the struct was defined in. > <li> Private imports now supported. > <li> Class names common to multiple modules no longer collide, > but this required a change to how class names are mangled. > Hence, existing libraries will need to be recompiled. > <li> templates of the form: > <如re> > template foo(T:T[]) > </如re> > now correctly resolve T in foo(int[]) to int rather than int[]. > </ul> > > <hr><!-- ======================================================= --> > <a name="new065"><h3>What's New for D 0.65</h3></a> > > <small><i>May 13, 2003</i></small> > > <h4>linux version</h4> > > <ul> > <li> Another bad section name bug is hopefully fixed. > </ul> > > <hr><!-- ======================================================= --> > <a name="new064"><h3>What's New for D 0.64</h3></a> > > <small><i>May 12, 2003</i></small> > > <h4>linux version</h4> > > <ul> > <li> <tt>dmd.conf</tt> now needs to be installed as > <tt>/etc/dmd.conf</tt>. > <li> <tt>phobos.a</tt> has been renamed as <tt>libphobos.a</tt> > and been placed in the <tt>/usr/lib</tt> directory. > <li> <b>dmd</b> will now do the link step automatically. > <li> The bad section name bug is hopefully fixed. > </ul> > > <hr><!-- ======================================================= --> > <a name="new063"><h3>What's New for D 0.63</h3></a> > > <small><i>May 10, 2003</i></small> > > <ul> > <li> Added linux version. Thanks to Burton Radons and > Pat Nelson for the help. =================== class.html ==================== =================== comparison.html ==================== 21c21 < <br><small><i>Last modified Mar 30, 2003.</i></small> --- > <br><small><i>Last modified May 30, 2003.</i></small> 112,119d111 < <td>Covariant return types < <td align="center" bgcolor="#00FF00"><a href="function.html#covariant">Yes</a> < <td align="center" bgcolor="red">No < <td align="center" bgcolor="#00FF00">Yes < <td align="center" bgcolor="red">No < <td align="center" bgcolor="red">No < < <tr> 248c240 < <td>Modules --- > <td><a href="#Modules">Modules</a> 440c432 < <td>Support all C types --- > <td><a href="#Ctypes">Support all C types</a> 482,483c474,475 < <td align="center" bgcolor="#00FF00">Yes < <td align="center" bgcolor="#00FF00">Yes --- > <td align="center" bgcolor="red">No > <td align="center" bgcolor="red">No 542a535,540 > <dt><a name="Modules">Modules</a> > <dd> Many correctly argue that C++ doesn't really have modules. > But C++ namespaces coupled with header files share many features > with modules. > <p> > 562a561,564 > <p> > > <dt><a name="Ctypes">Support all C types</a> > <dd>C99 adds many new types not supported by C++. =================== cpptod.html ==================== =================== ctod.html ==================== =================== dbc.html ==================== =================== declaration.html ==================== =================== dlinks.html ==================== 22c22 < <br><small><i>Last update Apr 3, 2003</i></small> --- > <br><small><i>Last update May 4, 2003</i></small> 129a130,133 > > <li> <a href="http://www.geocities.com/jccalvarese/d/tutor">Simple D Tutorial</a> > > <li> <a href="http://www.dprogramming.com/">Dprogramming.com</a> 158a163 > <img src="d001.jpg" border=1 alt="by Christopher Sauls"> =================== dstyle.html ==================== 19c19 < <p><small><i>Last update Aug 16, 2002</i></small> --- > <p><small><i>Last update May 25, 2002</i></small> 93c93,94 < <dd>Module names are all lower case. --- > <dd>Module names are all lower case. This avoids problems dealing > with case insensitive file systems. =================== errors.html ==================== =================== expression.html ==================== =================== faq.html ==================== =================== float.html ==================== =================== function.html ==================== 21c21 < <br><small><i>Last update Feb 28, 2003</i></small> --- > <br><small><i>Last update May 30, 2003</i></small> 324a325,354 > Nested functions always have the D function linkage type. > <p> > > Unlike module level declarations, declarations within function > scope are processed in order. This means that two nested functions > cannot mutually call each other: > > <如re> > void test() > { > void foo() { bar(); } // error, bar not defined > void bar() { foo(); } // ok > } > </如re> > > The solution is to use a delegate: > > <如re> > void test() > { > void delegate() fp; > void foo() { fp(); } > void bar() { foo(); } > fp = &bar; > } > </如re> > > <b>Future directions:</b> This restriction may be removed. > > 406a437,440 > <p> > > <b>Future directions:</b> Function pointerss and delegates may merge > into a common syntax and be interchangable with each other. =================== future.html ==================== =================== garbage.html ==================== =================== html.html ==================== =================== iasm.html ==================== =================== interface.html ==================== =================== intro.html ==================== 17c17 < <br><small><i>Last update Mar 13, 2003</i></small> --- > <br><small><i>Last update May 25, 2003</i></small> 60,66c60,68 < Download the <a href="alpha.html">current</a> < version of the compiler for Win32 and try it out! < Burton Radons has also prepared a < <a href="http://www.opend.org/dli/DLinux.html">linux port</a>. < < <p> < --- > Download the <a href="alpha.html">current version</a> > of the compiler for Win32 and x86 Linux and try it out! > Burton Radons has also prepared a > <a href="http://www.opend.org/dli/DLinux.html">linux version</a>. > <p> > > Alternatively, this document also exists as a > <a href="http://www.prowiki.org/wiki4d/wiki.cgi?LanguageSpecification">pdf file</a> > suitable for printing. =================== lex.html ==================== =================== memory.html ==================== =================== model.html ==================== =================== module.html ==================== 19c19 < <p><small><i>Last update Mar 19, 2002</i></small> --- > <br><small><i>Last update May 28, 2003</i></small> 141c141 < into another module, all its top level declarations are --- > into another module, by default all its top level declarations are 189a190,198 > > If the import is private, such as: > > <如re> > module <i>abc</i>; > private import <i>def</i>; > </如re> > > then <i>def</i> is not searched when another module imports <i>abc</i>. =================== operatoroverloading.html ==================== =================== overview.html ==================== =================== phobos.html ==================== 21c21 < <p><small><i>Last update Feb 15, 2003</i></small> --- > <br><small><i>Last update May 24, 2003</i></small> 169a170,175 > <dt><a href="#uri"><b>uri</b></a> > <dd>Encode and decode Uniform Resource Identifiers (URIs). > > <dt><a href="#utf"><b>utf</b></a> > <dd>Encode and decode utf character encodings. > 2237a2244,2356 > > </dl></dl> > > <hr><!-- ===================================== --> > <a name="uri"><h2>uri</h2></a> > > Encode and decode Uniform Resource Identifiers (URIs). > URIs are used in internet transfer protocols. > Valid URI characters consist of letters, digits, and > the characters ;/?:@&=+$,-_.!~*'(). Escape sequences > consist of '%' followed by two hex digits. > > <dl><dl> > <dt> char[] <b>decode</b>(char[] encodedURI) > <dd> Decodes the URI string <i>encodedURI</i> into a UTF-8 string > and returns it. Escape sequences that resolve to valid URI > characters are not replaced. Escape sequences that resolve > to the '#' character are not replaced. > <p> > > <dt> char[] <b>decodeComponent</b>(char[] encodedURIComponent) > <dd> Decodes the URI string <i>encodedURI</i> into a UTF-8 string > and returns it. All escape sequences are decoded. > <p> > > <dt> char[] <b>encode</b>(char[] uri) > <dd> Encodes the UTF-8 string <i>uri</i> into a URI and returns > that URI. Any character not a valid URI character is escaped. > The '#' character is not escaped. > <p> > > <dt> char[] <b>encodeComponent</b>(char[] uriComponent) > <dd> Encodes the UTF-8 string <i>uri</i> into a URI and returns > that URI. Any character not a letter, digit, or one of > -_.!~*'() is escaped. > > </dl></dl> > > <hr><!-- ===================================== --> > <a name="utf"><h2>utf</h2></a> > > Encode and decode UTF-8, UTF-16 and UTF-32 strings. > For more information on UTF-8, see > <a href="http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8">http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8</a>. > <p> > > <b>Note:</b> For Win32 systems, the C <b>wchar_t</b> type > is UTF-16 and corresponds to the D <b>wchar</b> type. > For linux systems, the C <b>wchar_t</b> type > is UTF-32 and corresponds to the D <b>utf.dchar</b> type. > <p> > > UTF character support is restricted to (0 <= character <= 0x10FFFF). > > <dl><dl> > <dt> class <b>UtfError</b> > <dd> Exception class that is thrown upon any errors. > The members are: > <dl> > <dt><b>idx</b> > <dd>Set to the index of the start of the offending UTF sequence. > </dl> > <p> > > <dt> alias ... <b>dchar</b> > <dd> An alias for a single UTF-32 character. This may > become a D basic type in the future. > <p> > > <dt> bit <b>isValidDchar</b>(dchar c) > <dd> Test if <i>c</i> is a valid UTF-32 character. > Returns <b>true</b> if it is, <b>false</b> if not. > <p> > > <dt> dchar <b>decode</b>(char[] s, inout uint idx) > <dt> dchar <b>decode</b>(wchar[] s, inout uint idx) > <dt> dchar <b>decode</b>(dchar[] s, inout uint idx) > <dd> Decodes and returns character starting at <i>s[idx]</i>. > <i>idx</i> is advanced past the decoded character. > If the character is not well formed, a <b>UriError</b> > is thrown and <i>idx</i> remains unchanged. > <p> > > <dt> void <b>encode</b>(inout char[] s, dchar c) > <dt> void <b>encode</b>(inout wchar[] s, dchar c) > <dt> void <b>encode</b>(inout dchar[] s, dchar c) > <dd> Encodes character <i>c</i> and appends it to array <i>s</i>. > <p> > > <dt> void <b>validate</b>(char[] s) > <dt> void <b>validate</b>(wchar[] s) > <dt> void <b>validate</b>(dchar[] s) > <dd> Checks to see if string is well formed or not. > Throws a <b>UtfError</b> if it is not. > Use to check all untrusted input for correctness. > <p> > > <dt> char[] <b>toUTF8</b>(char[] s) > <dt> char[] <b>toUTF8</b>(wchar[] s) > <dt> char[] <b>toUTF8</b>(dchar[] s) > <dd> Encodes string <i>s</i> into UTF-8 and returns the encoded string. > <p> > > <dt> wchar[] <b>toUTF16</b>(char[] s) > <dt> wchar[] <b>toUTF16</b>(wchar[] s) > <dt> wchar[] <b>toUTF16</b>(dchar[] s) > <dd> Encodes string <i>s</i> into UTF-16 and returns the encoded string. > <p> > > <dt> dchar[] <b>toUTF32</b>(char[] s) > <dt> dchar[] <b>toUTF32</b>(wchar[] s) > <dt> dchar[] <b>toUTF32</b>(dchar[] s) > <dd> Encodes string <i>s</i> into UTF-32 and returns the encoded string. =================== portability.html ==================== =================== pretod.html ==================== =================== property.html ==================== =================== statement.html ==================== =================== struct.html ==================== =================== template.html ==================== =================== toc.html ==================== =================== type.html ==================== =================== version.html ==================== =================== wc.html ==================== =================== windows.html ====================