[八卦] D语言太难了!

wzjin 2007-04-03
留意D语言好久了,觉得作者设计的目标功能很强大,但是觉得目标市场定位不大好,本人觉得应该定位到嵌入式得编程语言比较有前途,而且不要设计的太难了不适合初学者,试了以下hello world!,感觉D语言还是比较难的。要是开发语言的公司能够被IBM或google这样的公司收购那将前途无量了,这样既有了开发资金,又有了统一的类库开发。没有测试过到底性能怎样,开发效率怎样?以下是用JAVA写的中文排序方式,用时间125000微秒。那位用D实现一下做个对比测试,将代码切出来大家看看。

package math;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;

public class SortTest
{
public static void main(String[] args)
{
// SortTest sortTest=new SortTest();
long starttotal = System.currentTimeMillis();
SortTest.testChinaLocale();
long endtotal = System.currentTimeMillis();
System.out.println("用时间"+((endtotal-starttotal)*1000)+"微秒");
SortTest.testDefaultLocale();
}
public static void testChinaLocale()
{
Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
String[] arr =
{ "张三", "李四", "王五", "刘六" };
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
public static void testDefaultLocale()
{
Comparator cmp = Collator.getInstance();
String[] arr =
{ "张三", "李四", "王五", "刘六" };
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
}
让我们拭目以待!
tomqyp 2007-04-03
像C/c++/d这样要在本地编译的语言,影响性能的因素,我感觉更多的是在于编译器的好坏,现在D还不完善,这样去比是不公平的。

何况  我以前自己做了个测试,在一个大循环里做一些赋值、计算、函数调用,分别用java、C++和.net测试没想到java最快。

然而到现在,在那些对性能要求高过于对开发速度要求的项目中,java出现的次数还是比较少的。

oldrev 2007-04-03
搂住多虑了,D要替换的是C/C++,根本没把 Java/C# 这类放在眼里
jinheking 2007-04-03
java的Sort排序确实很牛我曾经用java按照数据结构上的方法做过比较
还是java自己的方法比较牛
但是,这只是一个个例,java整体的运算速度还是慢
jinheking 2007-04-03
wzjin 写道
留意D语言好久了,觉得作者设计的目标功能很强大,但是觉得目标市场定位不大好,本人觉得应该定位到嵌入式得编程语言比较有前途,而且不要设计的太难了不适合初学者,试了以下hello world!,感觉D语言还是比较难的。要是开发语言的公司能够被IBM或google这样的公司收购那将前途无量了,这样既有了开发资金,又有了统一的类库开发。没有测试过到底性能怎样,开发效率怎样?以下是用JAVA写的中文排序方式,用时间125000微秒。那位用D实现一下做个对比测试,将代码切出来大家看看。

package math;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;

public class SortTest
{
public static void main(String[] args)
{
// SortTest sortTest=new SortTest();
long starttotal = System.currentTimeMillis();
SortTest.testChinaLocale();
long endtotal = System.currentTimeMillis();
System.out.println("用时间"+((endtotal-starttotal)*1000)+"微秒");
SortTest.testDefaultLocale();
}
public static void testChinaLocale()
{
Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
String[] arr =
{ "张三", "李四", "王五", "刘六" };
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
public static void testDefaultLocale()
{
Comparator cmp = Collator.getInstance();
String[] arr =
{ "张三", "李四", "王五", "刘六" };
Arrays.sort(arr, cmp);
for (int i = 0; i < arr.length; i++)
{
System.out.println(arr[i]);
}
}
}
让我们拭目以待!




你的程序我编译不了,我使用的是jdk6.0
avac SortTest.java -Xlint
SortTest.java:22: 警告:[unchecked] 未经检查的转换
找到: java.util.Comparator
需要: java.util.Comparator<? super java.lang.String>
Arrays.sort(arr, cmp);
                 ^
SortTest.java:22: 警告:[unchecked] 方法调用未经检查:java.util.Arrays 中的 <T>sort(T[],java.util.Comparator<? super T>) 被应用于 (java.lang.String[],java.util.Comparator)
Arrays.sort(arr, cmp);
           ^
SortTest.java:33: 警告:[unchecked] 未经检查的转换
找到: java.util.Comparator
需要: java.util.Comparator<? super java.lang.String>
Arrays.sort(arr, cmp);
                 ^
SortTest.java:33: 警告:[unchecked] 方法调用未经检查:java.util.Arrays 中的 <T>sort(T[],java.util.Comparator<? super T>) 被应用于 (java.lang.String[],java.util.Comparator)
Arrays.sort(arr, cmp);
           ^
4 警告
smithfox 2007-04-03
OS: windows2000
Memory: 1G
CPU: AMD2800+
JRE: 1.5.0_10

李四
刘六
王五
张三
用时间156000微秒
李四
刘六
王五
张三
qiezi 2007-04-04
这个例子中涉及到一个拼音排序库,D里面目前并没有这个东东,所以无法比较。

从这里你也可以看到D内置库的简陋,当然如果仅作为一个基础库,它已经够用了。我没有花时间来实现这个按拼音排序的算法,实际上做起来很简单,导入一个已经排序好的文本文件,它包含完整的按拼音顺序排列的所有汉字,把它读入并用关联数组存储起来,在比较函数里取出它们的索引位置即可。这个部分是比较高效的,文本文件也可以用一个import来编译到可执行文件里,省去每次执行的加载时间。

当然上面所说的前提是你愿意去写代码,实际上代码量并不多。

下面我写了一个反转顺序的,它把一个数组顺序完全反向。暂时以此代替按拼音排序,当然它在效率上会高一些,为了公平起见,我把它执行100万次。当然实际上还是不公平,如果你有兴趣,不妨把下面那个方法实现出来,我想它的执行效率绝对高过100万次方法调用。

注:D库里面竟然没有好用的sort方法,目前这个qsort是个C接口形式的。我这里简单写了一下,实际上也可以写一个类来处理,但数组内置的sort属性只认opCmp,忒有点不爽,有时间再琢磨下。

module math;

import std.stdio;
import std.date;
import std.c.locale;
import std.c.stdlib;


void main(char[][] args)
{
	// 设置中文输出,参考:http://dlang.group.iteye.com/group/topic/444
	fwide(stdout, 1); 
	setlocale(0, "china");

	long starttotal = getUTCtime();
	for(int i=0; i<1000000; ++i)
	testChinaLocale();
	long endtotal = getUTCtime();
	
	writefln("用时间"w, (endtotal - starttotal) * 1000, "微秒"w);
	testDefaultLocale();
}

extern(C)
int compareChinaLocale(void* a, void* b)
{
	wchar[] sa = *cast(wchar[]*)a;
	wchar[] sb = *cast(wchar[]*)b;
	// 没有实现
	return 1;
}


void testChinaLocale()
{
	wchar[][] arr = [ "张三"w, "李四"w, "王五"w, "刘六"w ];
	qsort(arr.ptr, arr.length, (char[]).sizeof, &compareChinaLocale);
	//foreach(name; arr)
	//	writefln(name);
}

void testDefaultLocale()
{
	wchar[][] arr = [ "张三"w, "李四"w, "王五"w, "刘六"w ];
	arr.sort;
	foreach(name; arr)
		writefln(name);
}
tomqyp 2007-04-04
找到两篇比较系统的测试
http://www.blogjava.net/qq13367612/articles/16243.html
http://www.blogjava.net/qq13367612/articles/16242.html
时间比较早是2005年的
wzjin 2007-04-04
谢谢各位的关注,其实代码我是从网上随便拷贝过来然后稍微进行排错,绝对没有做任何的优化。另外jinheking兄弟说代码不能编译,其实我用的也是JDK6,代码是在eclipse3.2中编译过的,今天我又在记事本中重新编译,是有一处uncheck警告,但是还是可以编译和运行。另外oldrev兄弟,其实一味的狂热是不能保证该语言能够成功流行的,当然一门编程语言,用的人越多就越有用的理由。其实我们要是真的有心的话,可以将我们的自己的观点提出来,然后通过一个代表与Digital Mars公司联系,提出我们自己的想法,帮忙改善该语言,我看qiezi当这个代表应该当之无愧。qiezi兄弟觉得怎样?
oldrev 2007-04-04
D的发展方向是 template 和 MP,跟 Java 完全没有可比性

现在D最大的问题是标准库,STL的缺乏,phobos 里太多的bug,太弱的功能,造成它完全不堪使用。

火星新闻组里的人都很友善,包括作者 Walter,楼主有任何问题都可以直接去火星新闻组提问。
Global site tag (gtag.js) - Google Analytics