我刚刚读了一个scala教程,似乎在编写字符串时,scala将其视为\','但也将'其视为'
val a = "\'" // evaluates to '
val b = "'" // evaluates to '
a == b //true
Run Code Online (Sandbox Code Playgroud)
这似乎不是该语言的理想属性* - 为什么会这样?
作为一种可用于为整个语言编写编译器的子语言,一种语言(受 C 启发)绝对必要的核心特征是什么?
haystack这两个非常核心的 PHP 函数中的参数顺序needle并不一致:
为什么会这样呢?
我知道我无法编写在所有机器上运行/编译的汇编语言,因为它们有不同的指令集、操作码、寄存器等。我的问题是,即使指令集不同,汇编语法(或语言)它本身)对于任何架构都一样吗?
我正在观看Ben Eater 视频,注意到 bin 文件行的前 8 个字符都有某种形式的地址并记住了 COBOL。这些是相关的还是只是巧合?这只是一个使编译更容易的约定吗?
考虑以下代码片段:
\nstruct 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};\nRun Code Online (Sandbox Code Playgroud)\n上面的代码片段编译没有问题,并且被认为是有效且正确的语法。
\n现在考虑以下被视为非法或无效语法的演示:
\nstruct 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\nRun Code Online (Sandbox Code Playgroud)\n编译器资源管理器给出以下编译器错误:
\nC3872我定义了一个特征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) 为什么某些语言(如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) is关键字的MSDN文档说:
expression is not null
Run Code Online (Sandbox Code Playgroud)
为什么?如果调用了MethodThatReturnsNull()类型,则不应返回false,因为null肯定不是那种类型?
最近作为我日常工作的一部分,我一直在学习IBM Rhapsody并使用它从UML生成C++代码.
昨天让我感到震惊的是,考虑将状态机支持添加到我的C++编译器可能会很酷,所以我在这里写了一些注释:http://ellcc.org/wiki/index.php/State_machines_and_Active_Classes
我这样做的动机是:
我可能会尝试扩展我的语法,除了提议看看它的工作情况.
您对该提案有何看法?它看起来可读吗?看起来值得吗?
感谢建议特定库来执行状态机的答案,但这不是我的问题.我已经使用我编写的库和代码实现了许多状态机.
我真的在寻找关于设计类似C++的语言的状态机扩展的想法,批评等,而不是这种改变是否适合添加到标准C++.可以将其视为特定于域的扩展,我的域名是实时控制应用程序.
我已经开始在我的编译器中实现扩展,如下所述:http://ellcc.org/wiki/index.php/State%5Fmachines%5Fand%5FActive%5FClasses
到目前为止,这个概念不需要从提议到实现有太大的变化,但细节上有一些变化,我正在完善我对问题语义的理解.
然而,时间将证明整个概念是否具有任何价值.;-)
language-design ×10
c++ ×3
assembly ×2
alt-codes ×1
api-design ×1
binaryfiles ×1
c# ×1
cobol ×1
identifier ×1
keyword ×1
namespaces ×1
php ×1
python ×1
rust ×1
scala ×1
syntax ×1
traits ×1
uml ×1
unicode ×1