标签: language-design

为什么只有当您不需要返回值时,Groovy 中的括号才是可选的?

例如这个:

groovy:000> Arrays.asList 1,2,3,4,5
===> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

有效,因为不需要该值。

但是当返回值赋给变量时:

groovy:000> a = Arrays.asList 1,2,3,4,5
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected token: 1 @ line 1, column 19.
   a = Arrays.asList 1,2,3,4,5
                     ^

1 error

        at java_lang_Runnable$run.call (Unknown Source)
Run Code Online (Sandbox Code Playgroud)

失败了。

要使其运行,您需要括号。

groovy:000> a = Arrays.asList( 1,2,3,4,5)
===> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

这背后有设计原因吗?或者这只是它的实施方式?

groovy language-design

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

C# 的属性比 Java 的注释设计得更好吗?

在阅读了 Clinton Begin(iBatis 的创建者)的这篇旧文章后,我真的想知道他关于注释与属性的主张是否被广泛接受,或者是否存在分歧。

他的观点是:

  • 注释不可扩展
  • 不支持位置参数
  • 与 Java 不同的定义语法
  • annotation不是关键字(与 不同enum

这些说法有道理吗?C# 如何对此进行改进?

c# java attributes annotations language-design

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

编码语言定制

自从我开始编码以来,我一直想知道这个问题:有没有办法根据自己的喜好自定义语言的深层部分.

例如,我的代码主要是在Python中使用| 或:表示集合边界的字符.我经常使用套装,讨厌打字set(some_list)或明确set([a,b,b,c,d]).我一直在使用s()设置s = set,但如果我正在处理其他人必须阅读的代码,这将无效.

也许一个"翻译"文本编辑器附加组件可以保存2个代码副本,一个用你自己的语法,一个用标准语法就足够了.有这样的事吗?(特别是对于python)

python programming-languages language-design

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

为什么在Java中需要无符号类型?

我经常听到有人抱怨Java没有未签名的数据类型.请参阅评论.我想知道这是一个什么问题?我或多或少地用Java编程了10年,从来没有遇到过问题.偶尔在将字节转换为int时& 0xFF需要a,但我不认为这是一个问题.

由于无符号和带符号的数字用相同的位值表示,因此我能想到签名最重要的地方是:

  • 将数字转换为其他位表示时.在8,16和32位整数类型之间,您可以根据需要使用位掩码.
  • 将数字转换为十进制格式时,通常转换为字符串.
  • 通过API或协议与非Java系统互操作.再次数据只是位,所以我没有看到这里的问题.
  • 使用数字作为内存或其他偏移量.对于32位整数,这可能是非常大的偏移的问题.

相反,我发现我不需要考虑无符号和有符号数之间的操作以及它们之间的转换.我错过了什么?在编程语言中使用无符号类型有什么实际好处?如何让Java更好?

java language-design

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

Swift中变量位的移位行为

当我试图在我的RGB颜色实验上移位时,我注意到我无法移动可变数量的位.

Swift书只说你向左/右移动"一个数字"

"按位左移运算符(<<)和按位右移运算符(>>)根据下面定义的规则,将一个数字中的所有位向左或向右移动一定数量的位置."

是故意只能移动预定义数量的位吗?

// Works fine:
let shiftMe: UInt32 = 0xFF0000
let shiftedConst = shiftMe >> 16

// Doesn't work: 
let shiftMe: UInt32 = 0xFF0000
let shiftValue:Int = 16
let shiftedConst = shiftMe >> shiftValue
Run Code Online (Sandbox Code Playgroud)

第二个示例将不会编译并抛出此错误:

无法找到接受所提供参数的">>"的重载

快速设计是这样的吗?它是一个bug并修复beta3?(我还在beta2 atm.)

language-design bit-shift swift

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

为什么C#不让我像字典一样进行动态索引?

dynamicC#中的关键字可以让我这样做:

dynamic obj = ....;
var foo = obj.foo;
Run Code Online (Sandbox Code Playgroud)

obj.foo在运行时解析属性引用的位置.

由于属性是在运行时解析的,为什么不能将属性本身指定为变量?例如,

var propName = "foo";
var foo = obj[propName];
Run Code Online (Sandbox Code Playgroud)

我知道你可以通过反射或将对象转换为Dictionary来完成类似的事情.我对解决方案不感兴趣,因为它解释了为什么C#首先不支持类似Javascript的方括号查找.

c# language-design

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

为什么模块和过程名称在正文后重复?

在 Modula-2 和 Oberon 中,每个模块和过程声明都必须以模块或过程的名称结尾。在 Pascal 中不需要它。我从来没有真正理解这样做的动机。有人可以启发我吗?

language-design oberon modula-2

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

CUDA&lt;&lt;&lt;...&gt;&gt;&gt;() 内核启动语法是如何实现的

CUDA 内核使用此语法启动(至少在运行时 API 中)

mykernel<<<blocks, threads, shared_mem, stream>>>(args);
Run Code Online (Sandbox Code Playgroud)

这是作为宏实现的还是 nvcc 在将主机代码交给 gcc 之前删除的特殊语法?

cuda language-design

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

Kotlin 内在的“areEqual”方法的目的是什么?

假设我有一个

data class Eq(x: Int?)
Run Code Online (Sandbox Code Playgroud)

这将生成一个equals看起来像这样的方法

public boolean equals(Object other){
    if(this == other) return true;
    if(!(other instanceof Eq)) return false;
    Eq otherEq = (Eq) other;
    return Intrinsics.areEqual(this.x, otherEq.x);
}
Run Code Online (Sandbox Code Playgroud)

内在的

public static boolean areEqual(Object first, Object second){
    return first == null ? second == null : first.equals(second);
}
Run Code Online (Sandbox Code Playgroud)

我不太明白这背后的动机。

保持静态调用而不是内联其实现有什么好处?

compiler-construction language-design kotlin

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

Rust的ref关键字是否可以避免?

为什么Rust有ref关键字?可以

match value.try_thing() {
    &Some(ref e) => do_stuff(e),
    // ...
}
Run Code Online (Sandbox Code Playgroud)

不能由

match value.try_thing() {
    &Some(e) => do_stuff(&e),
    // ...
}
Run Code Online (Sandbox Code Playgroud)

language-design pattern-matching rust

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