Performance dmd vs ldc2
Chris
wendlec at tcd.ie
Tue Jul 30 02:21:36 PDT 2013
On Tuesday, 30 July 2013 at 09:10:24 UTC, Temtaime wrote:
> I have a little question..
> Why Digital Mars doesn't uses LLVM for backend and develops
> their own performance killer ?
> Is someone contact with them to drop out their backend ?
I checked it once more to make sure my code is not the problem. I
used the xml parsing example on this page
http://dlang.org/phobos/std_xml.html (the second example). I
created a dummy "books.xml" file with one entry (see below for
source). The result:
Loop: 0..100
DMD 2.063
dmd -release -noboundscheck -O -inline
Average time: 41.88 msecs
LDC2 (latest version, no flags)
ldc2 [files]
Average time: 0.01 msecs
------ D Code -------
import std.xml;
import std.stdio;
import std.string;
import std.datetime;
void main() {
StopWatch sw;
enum n = 100;
TickDuration[n] times;
TickDuration last = TickDuration.from!"seconds"(0);
foreach (i; 0..n) {
sw.start();
parse();
//writeln("Time ", sw.peek().msecs, " [ms]");
sw.stop();
times[i] = sw.peek() - last;
last = sw.peek();
}
real sum = 0;
// To know the number of seconds,
// use properties of TickDuration.
// (seconds, msecs, usecs, hnsecs)
foreach(t; times) {
sum += t.msecs;
}
writeln("Average time: ", sum/n, " msecs");
}
struct Book
{
string id;
string author;
string title;
string genre;
string price;
string pubDate;
string description;
}
void parse() {
string s = cast(string)std.file.read("books.xml");
// Check for well-formedness
check(s);
// Take it apart
Book[] books;
auto xml = new DocumentParser(s);
xml.onStartTag["book"] = (ElementParser xml)
{
Book book;
book.id = xml.tag.attr["id"];
xml.onEndTag["author"] = (in Element e) {
book.author = e.text(); };
xml.onEndTag["title"] = (in Element e) {
book.title = e.text(); };
xml.onEndTag["genre"] = (in Element e) {
book.genre = e.text(); };
xml.onEndTag["price"] = (in Element e) {
book.price = e.text(); };
xml.onEndTag["publish-date"] = (in Element e) {
book.pubDate = e.text(); };
xml.onEndTag["description"] = (in Element e) {
book.description = e.text(); };
xml.parse();
books ~= book;
};
xml.parse();
// Put it back together again;
auto doc = new Document(new Tag("catalog"));
foreach(book;books)
{
auto element = new Element("book");
element.tag.attr["id"] = book.id;
element ~= new Element("author", book.author);
element ~= new Element("title", book.title);
element ~= new Element("genre", book.genre);
element ~= new Element("price", book.price);
element ~= new Element("publish-date",book.pubDate);
element ~= new Element("description", book.description);
doc ~= element;
}
// Pretty-print it
//writefln(join(doc.pretty(3),"\n"));
}
------ XML FILE ------
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1-23456789">
<author>Count Dracula</author>
<title>D for Vampires</title>
<genre>Programming</genre>
<price>66.6</price>
<publish-date>1897</publish-date>
<description>Tomb programming with D</description>
</book>
</books>
More information about the digitalmars-d-ldc
mailing list