Last update June 9, 2003

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  ====================


FrontPage | News | TestPage | MessageBoard | Search | Contributors | Folders | Index | Help | Preferences | Edit

Edit text of this page (date of last change: June 9, 2003 16:02 (diff))