d的符浮.
显式源和目标
类型的强制转换
来解决
auto cast_from(From,To,Real)(Real a)
{
static if (is (From==Real))
return cast(To) a;
else
pragma(msg, "错误类型");
}
void main()
{
import std.range, std.stdio;
short a=1;
int b=cast_from!(short,int)(a);
bool c=1;
// int d=cast_from!(short,int)(a);
// 编译时错误
writeln("测试: ", b);
}
D规则
给C的规则
加了些约束
,来防止隐式转换
导致精度丢失
.
表明,为了性能,你肯定希望按单独代码单元
对待UTF-8
.
我痛苦发现,Unicode
联盟使得无兆字节库
就不可能做"正确"的Unicode
.
D字符
唯一问题是自动解码
,讽刺的是,它符合你的建议
,按Unicode
代码点而不是代码单元对待一切
.
这是个好主意,但它根本
行不通.
gcc和ldc2
编译器可转换?:
至后者,而不是手写.
在D中,char
是UTF-8
,而ASCII
是UTF-8
的子集.
你不愿意写:
a += (b < c);
我愿意.而且,正如我之前所说,GPU
喜欢该编码风格,SIMD
代码也如此,加密
代码也如此.
判断发生
什么的唯一方法
是转储生成
的汇编程序
.编写可在各种SIMD
指令集间移植
的矢量代码
时尤其麻烦.它根本无法扩展.
manu
编写矢量代码.
因此,D
方法是不同的.可在D
中编写向量
代码.如果不编译
到目标
指令集,不会用仿真
代替它.它发出
错误信号.使用户可轻松
地使用版本控制
来调整表达式
,来匹配目标平台
向量能力.
总之,如果想要输出流
中的特定指令
插件,系统编程语言必须
可表达所需插件
.而不能依赖未记录
和不一致
的编译器转换
.
import std.stdio;
import std.string;
import std.utf;
char char_tolower_bright (char c)
{
if ('A' <= c && c <= 'Z')
c = c | 0x20;
return c;
}
string tolower_bright (string s)
{
string t;
foreach (c; s.byCodeUnit)
t ~= c.char_tolower_bright;
return t;
}
void process_strings (string s)
{
writefln!"input : %s" (s);
auto t = s.tolower_bright;
writefln!"bright : %s" (t);
auto u = s.toLower;
writefln!"toLower (std.utf): %s" (u);
}
void main ()
{
process_strings ("A a");
process_strings ("A a");
}
除非使用配置文件
引导优化编译
,否则编译器
一切都是盲目的.如分配
寄存器和溢出
位置.
如,现在和过去的AMD
处理器已经在更多更小
的执行单元方面模拟了更广泛的SIMD
.
我同意,尽管即使在X86
上,D
也与有趣
的指令严重不同步.除非使用内联asm
(或Guillaume
的内在函数库),否则不能用它们.
对非x86
世界,ARM
有NEON
,但未来是SVE2
,这些是变宽矢量
指令.这可适合D_SIMD
范式,但需要大小
只有下限
的类型.
RISC-V
向量ISA
类似发展.
如果优化器
无法看穿具2个常量
的三元表达式
,则它可能需要
更新.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现