标签: language-design

为什么void关键字不用作方法参数?

void关键字仅用作返回类型,以指示方法不返回值.但是为什么不能void在方法定义中用作形式参数来表明它不接受任何参数,例如:

void fun(void){
    ...
}
Run Code Online (Sandbox Code Playgroud)

java language-design

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

多维数组中的括号顺序

整数数据[3][5];

是 5 元素数组的 3 元素数组。

为什么?对我来说,直觉上 ifint[3]是一个 3 元素数组,而int[3][5]应该是3 元素数组的 5 元素数组。

c language-design

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

宽松的后期绑定与严格的后期绑定

在阅读 Python\xe2\x80\x99s执行模型文档时,我意识到 Python\xe2\x80\x99s 自由变量似乎没有严格的后期绑定属性,其中任何代码块中发生的名称绑定都可以用于名称解析。事实上,执行:

\n
def f():\n    return x\n\ndef g():\n    x = 0\n    return f()\n\nprint(g())\n
Run Code Online (Sandbox Code Playgroud)\n

提高:

\n
NameError: name \'x\' is not defined\n
Run Code Online (Sandbox Code Playgroud)\n

它们具有相当松散的后期绑定属性,其中只有在引入自由变量的代码块的外部代码块中发生的名称绑定才能用于名称解析。确实执行

\n
NameError: name \'x\' is not defined\n
Run Code Online (Sandbox Code Playgroud)\n

印刷:

\n
0\n
Run Code Online (Sandbox Code Playgroud)\n

与严格的后期绑定属性相比,松散的后期绑定属性有哪些优点和缺点?

\n

python language-design late-binding free-variable

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

Ruby 中的符号和 JavaScript 中的符号有相同的用途吗?

Symbol从编程语言设计的角度来看,Ruby 和 JavaScript(也许其他一些也具有等效类型的编程语言)是否具有相同的目的?(问题#1)

我知道这两种语言都有Symbol类型。

Symbol在这两种语言中都可以用来从对象中检索方法:

const a = [];
a[Symbol.iterator] // [Function: values]
Run Code Online (Sandbox Code Playgroud)
a = []
a.method(:at) => #<Method: Array#at(_)>
Run Code Online (Sandbox Code Playgroud)

Ruby 中的符号是独一无二的:

:a.object_id => 776028
:a.object_id => 776028
Run Code Online (Sandbox Code Playgroud)

在 JavaScript 中,使用创建的符号Symbol.for保存在内部字典中,这使得它类似于unique

Symbol.for('a') === Symbol.for('a') // true
Run Code Online (Sandbox Code Playgroud)

Symbol(..)无论参数是什么,总是返回一个新符号:

// Why this is designed this way? Question #2
Symbol('a') === Symbol('a') // false
Run Code Online (Sandbox Code Playgroud)

javascript ruby language-design typescript

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

Python:布尔运算符(和、或)不返回布尔值的理由

[编辑:这个问题不是这个问题的重复;我问的是语言设计的问题,即为什么它首先是这样的。我对它的行为方式并不感到困惑,我对为什么首先决定这种行为感到困惑。]

在Python(以及其他一些语言,例如Lua)中,布尔运算符andor并不像人们所期望的那样返回布尔值TrueFalse而是:

  • x or y:如果x为假,则y,否则x
  • x and y如果x为 false,则x,否则y

很容易看出,在xy是布尔值的特殊情况下,其行为符合预期。

我的问题是,以这种方式进行概括的实际理由是什么?我知道你可以用它来实现以下技巧:

foo = x or None
Run Code Online (Sandbox Code Playgroud)

或者 DIY 三元运算符,例如:

foo = x and y or z
Run Code Online (Sandbox Code Playgroud)

但我觉得这些都不足以为这种令人惊讶的行为提供充分的理由。每当我看到非布尔返回值被依赖于其实际值(而不是在 if 语句或其他东西中,无论哪种方式都无关紧要),我总是必须仔细检查我对它的理解,因为我总是忘记它是如何工作的,我需要再次查找它。我通常更喜欢以更详细的方式编写。是否有一个根本原因为什么它应该以这种方式工作,或者它真的只是为了技巧?

python boolean language-design comparison-operators

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

如果您被迫简化C#循环关键字,请只选择一个要保留的关键字

如果您被迫简化可用于循环的C#关键字,请只选择一个要保留的关键字.

  • 对于
  • 这样做,而
  • 转到标签,如果
  • 的foreach

您的决定是否有任何绩效考虑?

其实我不知道他们的内在机制,所以在这里我想要采访你们中的人知道细节.但是,某人已经关闭了它.好难过!

c# compiler-construction programming-languages language-design lexical-analysis

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

C#中的开关是空的情况还是下一个非空的?

使用以下代码:

case "GETSITES":
case "SITESETUP":
    MessageBox.Show("Help! I am suffering from the Air-Conditioned Nightmare!!!");
    // ...
Run Code Online (Sandbox Code Playgroud)

MessageBox.Show被执行或者开关值为"GETSITES"还是"SITESETUP"

或者当开关值是"SITESETUP"

既然"GETSITES"没有休息,我想是的,但我不确定.


UPDATE

我想我应该把我的问题写成:

这两个代码片段在语义上是等价的吗?

c# language-design switch-statement

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

Rust的设计者选择符号的原因是什么!/ &&/|| 而不是单词not /和/或?

什么是用于选择运营商的理由!/ &&/ ||not/ and/ or?背后有一些历史,还是只是偏好?

我有一些想法:

  • Rust遵循C/C++.但是,在for-each循环的情况下,使用的是更像英语的版本for x in X而不是C++ for (x: X),所以Rust不仅盲目地遵循C/C++的所有内容.

  • 符号更短.两者之间的字符数似乎相似.

  • 由于与类型规范的冲突,语法必须不同.也有区别a as u8而不是(u8)a.

由于Rust是一种新语言,我认为他们可以选择符号或单词而不会出问题.Rust选择符号而非文字的原因是什么?为什么不同时选择?

language-design rust

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

为什么析构函数的语法是~classname?

析构函数的语法是~classname. 这导致需要在析构函数调用中显式写入对象的类型。为了避免这种情况,C++17 引入了std::destroy_at.

那么,Bjarne Stroustrup 选择~classname析构函数语法的最初理由是什么?如果语法不依赖于类型,std::destroy_at则不需要。

c++ destructor language-design explicit-destructor-call

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

这种编程语言是什么?

mob/verb/test(N as num)

这段代码来自哪种语言?

programming-languages language-design

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

使用 LLVM IR 实现动态类型语言

我正在尝试使用 LLVM C API 为动态语言构建 JIT 编译器,但我坚持实现动态类型,例如在函数定义中,LLVM 需要每个参数的类型,但类型在运行时之前是未知的,基于什么用户通行证,我用谷歌搜索了一段时间,但没有任何关于它的好资源,我也尝试查看 Julia 的源代码,看看他们是如何做到的,不幸的是代码又大又复杂,我不得不到处寻找这样的一个小细节,从我目前看到的情况来看,它们将它们的类型表示为一个空的 LLVM 结构指针和一个保存一些额外数据的 func sig 类型,但我非常不确定它是如何工作的,或者即使我是解释正确,任何资源都可能有帮助,最感谢示例代码,示例不必使用 C API,C++ 也很好,我会以一种或另一种方式自己转换它。

提前致谢。

c c++ compiler-construction language-design llvm

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

为什么Python`**`用于取幂而不是`^`运算符?

为什么^不在Python中进行平方?我知道取幂是**相反的,但究竟是什么^以及为什么不使用该算子呢?

例如2^2=0,3^2=1.

python language-design bitwise-operators exponentiation

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