[八卦] 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,楼主有任何问题都可以直接去火星新闻组提问。 |