Language Specification /
Current Diff
Difference (last change) (Author, normal page display)
Added: 0a1,2
|
From LanguageSpecification. |
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 ====================