标签: d

D是Java和C++的可靠替代品吗?

d语言一个可靠的替代Java和C++?如何成为一个可靠的替代方案?我应该学习它吗?它值得传福音吗?

我问的主要原因是,几乎在这里使用新的C++标准(c ++ 0x),我很清楚,对于任何理解它的人来说,语言已经远远超过了不归路.我知道C/C++永远不会死,但在某些时候我们需要继续前进.即使是COBOL也有它的一天,Java在很多方面都取消了C++.下一个是什么?D填写账单吗?

c c++ java d

161
推荐指数
8
解决办法
4万
查看次数

D编程语言在现实世界中?

是否有人使用D进行实际应用?如果是这样,你用它做什么?我似乎无法在用D写的网上找到任何大的东西.

尽管缺乏已知的大用户,D对我来说似乎是一种非常有用的语言,据TIOBE称,它相当受欢迎.

d popularity

138
推荐指数
17
解决办法
4万
查看次数

D与C++相比有多快?

我喜欢D的一些功能,但如果它们带来运行时惩罚会有兴趣吗?

为了比较,我实现了一个简单的程序,用C++和D计算许多短向量的标量积.结果令人惊讶:

  • D:18.9秒[最终运行时见下文]
  • C++:3.8秒

C++真的几乎快了五倍,还是我在D程序中犯了错误?

我在一个温和的最近的Linux桌面上用g ++ -O3(gcc-snapshot 2011-02-19)和D和dmd -O(dmd 2.052)编译了C++.结果可在多次运行中重现,标准偏差可忽略不计.

这里的C++程序:

#include <iostream>
#include <random>
#include <chrono>
#include <string>

#include <vector>
#include <array>

typedef std::chrono::duration<long, std::ratio<1, 1000>> millisecs;
template <typename _T>
long time_since(std::chrono::time_point<_T>& time) {
      long tm = std::chrono::duration_cast<millisecs>( std::chrono::system_clock::now() - time).count();
  time = std::chrono::system_clock::now();
  return tm;
}

const long N = 20000;
const int size = 10;

typedef int value_type;
typedef long long result_type;
typedef std::vector<value_type> vector_t;
typedef typename vector_t::size_type size_type;

inline value_type scalar_product(const vector_t& x, const vector_t& …
Run Code Online (Sandbox Code Playgroud)

c++ performance d runtime

130
推荐指数
7
解决办法
3万
查看次数

概念和模板约束之间有什么区别?

我想知道C++完整概念提议和模板约束之间的语义差异(例如,Dlang中出现的约束或C++ 1y的新概念 - 精简提议).

什么是能够比模板约束做的完整概念不能做到的?

c++ d c++11 c++-concepts

95
推荐指数
2
解决办法
2万
查看次数

为什么D + 0.1 + 0.2 == 0.3?

assert(0.1 + 0.2 != 0.3); // shall be true
Run Code Online (Sandbox Code Playgroud)

是我最喜欢的检查,语言使用本机浮点运算.

C++

#include <cstdio>

int main()
{
   printf("%d\n", (0.1 + 0.2 != 0.3));
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

1
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/ErBMd

蟒蛇

print(0.1 + 0.2 != 0.3)
Run Code Online (Sandbox Code Playgroud)

输出:

True
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/TuKsd

其他例子

为什么D不适用?理解D使用本机浮点数.这是一个错误吗?他们是否使用某些特定的数字代表?别的什么?很混乱.

d

import std.stdio;

void main()
{
   writeln(0.1 + 0.2 != 0.3);
}
Run Code Online (Sandbox Code Playgroud)

输出:

false
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/mX6zF


UPDATE

感谢LukeH.这是在那里描述的浮点常数折叠的效果.

码:

import std.stdio;

void main()
{
   writeln(0.1 + 0.2 != 0.3); // …
Run Code Online (Sandbox Code Playgroud)

floating-point d floating-accuracy constantfolding

75
推荐指数
3
解决办法
2万
查看次数

GC或不GC

我最近看到两个非常好的和教育性的语言谈话:

Herb Sutter的第一部,介绍了C++ 0x的所有优秀和酷炫功能,为什么C++的未来比以往任何时候都更加明亮,以及M $如何在这场游戏中成为一个好人.该演讲围绕效率展开,如何最大限度地减少堆活动可以提高性能.

这个另一种,安德烈Alexandrescu的,激励一个过渡从C/C++,以他的新的游戏改变d.D的大部分内容似乎都非常有动力和设计.然而,有一件事让我感到惊讶,即D推动垃圾收集,并且所有类都是通过引用创建.更令人困惑的是,"D编程语言参考手册 "一书特别在关于资源管理的部分中 陈述如下,引用:

垃圾收集消除了C和C++中必需的繁琐,容易出错的内存分配跟踪代码.这不仅意味着更快的开发时间和更低的维护成本,而且最终的程序经常运行得更快!

这与Sutter关于最小化堆活动的不断讨论相冲突.我非常尊重Sutter和Alexandrescou的见解,所以我对这两个关键问题感到有些困惑

  1. 不通过引用单独创建类实例会导致很多不必要的堆活动吗?

  2. 在哪些情况下我们可以使用垃圾收集而不牺牲运行时性能?

c++ performance garbage-collection d heap-memory

70
推荐指数
3
解决办法
3455
查看次数

C++和D中的元编程

C++中的模板机制只是偶然地对模板元编程有用.另一方面,D's专门设计用于促进这一点.而且显然它更容易理解(或者我听说过).

我没有D的经验,但是我很好奇,你能用D做什么,而你在模板元编程方面不能用C++做什么?

c++ d metaprogramming

65
推荐指数
8
解决办法
1万
查看次数

D的语法真的没有语境吗?

我几个月前在D新闻组上发布了这个,但由于某种原因,答案从未真正说服过我,所以我想我会在这里问.


D的语法显然没有上下文.

但是,C++的语法不是(即使没有宏).(请仔细阅读!)

现在被授予,对编译器,词法分析器和解析器一无所知(正式).我所知道的只是我在网上学到的东西.
以下是(我相信)我对上下文的理解,在非技术术语中:

语言的语法是无上下文的,当且仅当你能够总是理解给定代码片段的含义(尽管不一定是确切的行为)而不需要在任何其他地方"看".

或者,严格:

如果我需要,语法不能无上下文我只是通过查看它就无法告诉表达式的类型.

因此,例如,C++失败上下文测试,因为意义confusing<sizeof(x)>::q < 3 > (2) 依赖于q.

到现在为止还挺好.

现在我的问题是:可以对D说同样的话吗?

例如,在D中,可以通过Value[Key]声明创建哈希表

int[string] peoplesAges;   // Maps names to ages
Run Code Online (Sandbox Code Playgroud)

静态数组可以用类似的语法定义:

int[3] ages;   // Array of 3 elements
Run Code Online (Sandbox Code Playgroud)

模板可以用来使它们混淆:

template Test1(T...)
{
    alias int[T[0]] Test;
}

template Test2(U...)
{
    alias int[U] Test2;  // LGTM
}

Test1!(5) foo;
Test1!(int) bar;
Test2!(int) baz;  // Guess what? It's …
Run Code Online (Sandbox Code Playgroud)

c++ grammar d context-free-grammar

59
推荐指数
6
解决办法
5801
查看次数

DMD与GDC与LDC的比较

不同D编译器的优缺点是什么?性能和标准合规性/ D2如何支持?调试器的支持程度如何?错误消息有多好,IDE集成是什么?64位支持有多好?到目前为止我的想法:

DMD

  • 成熟且维护良好
  • 只有一个平台,64位支持并不好
  • 不是FOSS

GDC

  • 支持各种平台
  • 有非常成熟的优化,所以它很快?
  • 过时的运行时间?
  • GCC这么好的调试器支持?

LDC

  • 支持各种平台
  • LLVM,所以它支持JITing?
  • 有非常成熟的优化,所以它很快?
  • 保养得不是很好?
  • 过时的运行时间?

死了/不工作

  • SDC
  • MiniD - 非常,非常好,但不是D(但从未声称是)

我正在考虑针对ARM,我认为GDC是首选工具,但我不确定.

compiler-construction d dmd gdc

55
推荐指数
2
解决办法
1万
查看次数

游戏开发的D编程语言

最近我一直很烦,因为我达到了C++(甚至0x)感觉非常有限的程度,所以我开始寻找替代方案.

忘记Java,C#,Python或Ruby.我仍然喜欢C++的低级特性,我不喜欢虚拟机.此外,我是一个游戏引擎开发,所以我必须要发展核心程序必须是非常快,而且最近我已经饿了码表现.C++ 对我来说几乎是一种语言,但是关于如何使用模板有很多例外,而GCC并没有像我希望的那样优化内容.

所以我正在考虑开始学习D.

你认为它足以满足我作为游戏开发者的需求吗?我很谨慎,因为我从来没有听说过D被用于那个.

谢谢!

d

54
推荐指数
7
解决办法
2万
查看次数