view wiki/main.wiki @ 710:c89ffd930727

Updated main.wiki.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 29 Jan 2008 22:51:44 +0100
parents d13502b6fa5f
children a3fab8b74a7d
line wrap: on
line source

Note: the Subversion repository is out of date. The code was migrated to [http://hg.sharesource.org/dil/ Mercurial].
=Purpose=
dil is a hand-crafted compiler implementation for the D programming language written in D 1.0 using the [http://dsource.org/projects/tango Tango] standard library. The lexer and the parser are fully implemented. Semantic analysis is being worked on. The backend will most probably be gcc or [http://llvm.org LLVM].

What dil can do at the moment:
  * dil is fully internationalized and can output compiler messages in English, German, Turkish and Finnish. You can determine which language to use with a setting in config.d.
  * Generate XML or HTML documents. You can choose to generate tags for tokens only or you can also have the whole parse tree unparsed. The whitespace of the original source file is preserved. You can view the HTML documents in any browser you like. The XML documents can only be viewed in W3C-standards compatible browsers(`*`) in combination with an XML formatting CSS document. dil provides two ordinary CSS documents (for XML/HTML) which can be customized to one's heart's content. Example: dil's source code in [http://dil.googlecode.com/files/xml_rev709.zip XML] or [http://dil.googlecode.com/files/html_rev709.zip HTML]. (`*`Note: Internet Explorer is the only browser that spectacularly fails at this job.)
  * Produce module dependency graphs using the graphviz dot format. For example, see the [http://dil.googlecode.com/files/main.2.dot dot file] of dil: rendered in [http://dil.googlecode.com/files/main.2.svg SVG], [http://dil.googlecode.com/files/main.2.png PNG] (2.7MB) or [http://dil.googlecode.com/files/main.2.gif GIF]. Cyclic edges (import statements) and nodes (modules) are highlighted in red. The edges of public imports are bold.
  * Output code statistics (lines of code, count syntax tree nodes and tokens, number of whitespace characters etc.) When dil has advanced enough [http://www.aivosto.com/project/help/pm-oo-ck.html OO-metrics] will be supported. Example: [http://dil.googlecode.com/files/stats_dstress_r1835_2.txt dstress] (1.5MB text; totals are at the bottom)

  * dil can parse D 2.0 additions:
    * Delimited and token [http://www.digitalmars.com/d/lex.html#StringLiteral string literals].
    * [http://www.digitalmars.com/d/statement.html#ForeachRangeStatement ForeachRangeStatement].
    * Optional [http://www.digitalmars.com/d/expression.html#IsExpression TemplateParameterList in IsExpression].
    * const and invariant in !IsExpressions.
    * [http://www.digitalmars.com/d/template.html#TemplateThisParameter TemplateThisParameter].
    * Cast expressions: `cast(const)` and `cast(invariant)`.
    * Type constructors: `const(Type)` and `invariant(Type)`.
    * const and invariant attributes after the parameter list of a function (C++ style.)
    * `typeof(return)`.
    * Traits expressions: `__traits(Identifier)` and `__traits(Identifier, TemplateArguments)`.
    * const/invariant/final/scope/static as storage classes in parameter lists (e.g. `void func(ref const Foo f);`).
    * invariant as a storage class for declarations (e.g. `invariant Foo f;`).
    * The identifier `__EOF__` is interpreted as the end of file.

Features you will or might see in dil:
  * Documentation generation ala doxygen (keeping ddoc in mind.)
  * Refactoring (renaming symbols, modules; changing the type of a symbol etc.)
  * Coding rules enforcement.
  * Code search.
  * Code analysis (lint-like).
  * Code formatting.
  * Translate D code to other languages.
  * Port D 1.0 code to D 2.0.

*Meaning:*

The word dil comes from the Turkish language and means among other things a) tongue or b) language. It is a very fitting name for this project because of its meaning and because it starts with the letter d and for the reason that the project owner has Turkish origins.

==Download==
There are no binaries to download yet.
If you want to get the sources you can either check it out via SVN (`svn co http://dil.googlecode.com/svn/trunk/ dil`) or you can use the fetch command of [http://dsource.org/projects/dsss DSSS] (dsss net fetch dil).

Note: For practical and technical reasons I've decided to change the source code management system from Subversion (SVN) to Mercurial (hg).
I managed converting the old svn repository to an hg repository with the help of two fine persons at irc.freenode.net/#mercurial.
Since the Google Code services don't support Mercurial repositories yet (please see [http://code.google.com/p/support/issues/detail?id=415 bug report]), I have decided to register at [http://sharesource.org sharesource.org] and have my hg repository hosted there for the time being. From now on development will continue in the [http://hg.sharesource.org/dil/ new Mercurial repository].