标签: language-design

为什么 scala 允许对字符串中的单引号进行转义?

我刚刚读了一个scala教程,似乎在编写字符串时,scala将其视为\''但也将'其视为'

val a = "\'" // evaluates to '
val b = "'"  // evaluates to '
a == b //true
Run Code Online (Sandbox Code Playgroud)

这似乎不是该语言的理想属性* - 为什么会这样?

scala language-design

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

引导其编译器所需的语言功能的最小子集是什么?

作为一种可用于为整个语言编写编译器的子语言,一种语言(受 C 启发)绝对必要的核心特征是什么?

compiler-construction bootstrapping language-design

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

为什么PHP函数in_array和strpos中haystack和needle的顺序不一致?

haystack这两个非常核心的 PHP 函数中的参数顺序needle并不一致:

为什么会这样呢?

php api-design language-design

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

不同架构的汇编语言语法是否相同

我知道我无法编写在所有机器上运行/编译的汇编语言,因为它们有不同的指令集、操作码、寄存器等。我的问题是,即使指令集不同,汇编语法(或语言)它本身)对于任何架构都一样吗?

syntax assembly language-design

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

COBOL 是否强制一行的前 6 个字符为数字,因为它更容易编译为二进制可执行文件?

我正在观看Ben Eater 视频,注意到 bin 文件行的前 8 个字符都有某种形式的地址并记住了 COBOL。这些是相关的还是只是巧合?这只是一个使编译更容易的约定吗?

assembly cobol language-design binaryfiles

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

为什么 C++ 语言禁止使用某些可打印字符的 ALT 代码作为标识符?

考虑以下代码片段:

\n
struct vec2 {\n    int x;\n    int y;\n};\n\nconstexpr vec2 Up{0,1};\nconstexpr vec2 Down{0,-1};\nconstexpr vec2 Left{-1,0};\nconstexpr vec2 Right{1,0};\n
Run Code Online (Sandbox Code Playgroud)\n

上面的代码片段编译没有问题,并且被认为是有效且正确的语法。

\n

现在考虑以下被视为非法或无效语法的演示:

\n
struct vec2 {\n    int x;\n    int y;\n};\n\nconstexpr vec2 \xe2\x86\x91{0,1};   // Windows Alt Code: Alt+24 \nconstexpr vec2 \xe2\x86\x93{0,-1};  // Windows Alt Code: Alt+25\nconstexpr vec2 \xe2\x86\x90{-1,0};  // Windows Alt Code: Alt+27\nconstexpr vec2 \xe2\x86\x92{1,0};   // Windows Alt Code: Alt+26\n
Run Code Online (Sandbox Code Playgroud)\n

编译器资源管理器给出以下编译器错误:

\n
    \n
  • 对于 x64 msvc v19.latest 它会给出编译器错误:C3872
  • \n
  • 对于 x86-64 gcc(trunk) 状态:扩展字符不是有效标识符
  • \n
  • 对于 x86-64(主干)状态:意外字符 - 不合格的 id
  • \n …

c++ unicode language-design identifier alt-codes

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

为什么特征默认没有调整大小?

我定义了一个特征ReadTag,其中包含一个返回的函数Self,但这样会产生错误:

trait ReadTag {
    fn read_out(buf: &mut &[u8]) -> Option<Self>;
}
Run Code Online (Sandbox Code Playgroud)
error[E0277]: the size for values of type `Self` cannot be known at compilation time
 --> src/lib.rs:2:37
  |
2 |     fn read_out(buf: &mut &[u8]) -> Option<Self>;
  |                                     ^^^^^^^^^^^^ doesn't have a size known at compile-time
Run Code Online (Sandbox Code Playgroud)

Sized通过添加为超级特征来修复错误,这是有道理的,但为什么Sized不像函数那样默认呢?

fn my_sized<T>(t: T) { } // all good, Sized is opt-out :)

fn my_unsized<T: ?Sized>(t: T) { } // not allowed
Run Code Online (Sandbox Code Playgroud)

language-design traits rust

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

没有Ambuguity的命名空间规范

为什么某些语言(如C++和Python)需要指定对象的命名空间,即使不存在歧义?我知道有这样的后门,比如using namespace x在C++或from x import *Python中.但是,当只有一个可访问的命名空间包含给定的标识符且不存在歧义时,我无法理解不希望语言只是"做正确的事"的理由.对我来说,这只是不必要的冗长和违反DRY,因为你被迫指定编译器已经知道的东西.

例如:

import foo  # Contains someFunction().

someFunction()  # imported from foo.  No ambiguity.  Works.
Run Code Online (Sandbox Code Playgroud)

比.

import foo  # Contains someFunction()
import bar  # Contains someFunction() also.

# foo.someFunction or bar.someFunction?  Should be an error only because
# ambiguity exists.
someFunction() 
Run Code Online (Sandbox Code Playgroud)

c++ python namespaces language-design

1
推荐指数
3
解决办法
575
查看次数

为什么is关键字需要非空表达式?

is关键字的MSDN文档说:

expression is not null
Run Code Online (Sandbox Code Playgroud)

为什么?如果调用了MethodThatReturnsNull()类型,则不应返回false,因为null肯定不是那种类型?

c# language-design keyword

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

建议添加对C++的状态机支持 - 就像语言一样

最近作为我日常工作的一部分,我一直在学习IBM Rhapsody并使用它从UML生成C++代码.

昨天让我感到震惊的是,考虑将状态机支持添加到我的C++编译器可能会很酷,所以我在这里写了一些注释:http://ellcc.org/wiki/index.php/State_machines_and_Active_Classes

我这样做的动机是:

  1. 这似乎是一个很酷的主意.
  2. 编译器可以比当前的Rhapsody /普通C++编译器做更好的语义检查(具有更好的错误检查).
  3. 当编译器本身理解状态机结构时,有许多可用的优化可能性.

我可能会尝试扩展我的语法,除了提议看看它的工作情况.

您对该提案有何看法?它看起来可读吗?看起来值得吗?


编辑:

感谢建议特定库来执行状态机的答案,但这不是我的问题.我已经使用我编写的库和代码实现了许多状态机.

我真的在寻找关于设计类似C++的语言的状态机扩展的想法,批评等,而不是这种改变是否适合添加到标准C++.可以将其视为特定于域的扩展,我的域名是实时控制应用程序.

我已经开始在我的编译器中实现扩展,如下所述:http://ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses

到目前为止,这个概念不需要从提议到实现有太大的变化,但细节上有一些变化,我正在完善我对问题语义的理解.

然而,时间将证明整个概念是否具有任何价值.;-)

c++ compiler-construction uml language-design state-machine

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