你自己的(我假设是完美的)编程语言会是什么样子?给一个小例子并解释你的新颖想法!
我对语法非常感兴趣。
你自己的(我假设是完美的)编程语言会是什么样子?给一个小例子并解释你的新颖想法!
我对语法非常感兴趣。
有点神秘,但这就是我想要的:
Jon指出“不同的任务适合不同的语言和范式”,这是正确的。然而,有一些考虑因素与领域无关。这些主要涉及语法,但由于代码更多被阅读而非编写,我认为语法很重要。
首先,有一些事情是许多语言做错了的,那就是毫无根据地以C语言作为语法基础。实际上,C语言的语法相当糟糕,我就举两个例子。
第一个例子容易引起争议:分号是不必要的。看看下面的代码,语法完全明确、易于编译器解析,既不需要分号,也不需要显式的换行符。
answer = 42
fraction = answer * 2 /
(answer + 1)
Console.WriteLine(
"Some funny number: {0}",
fraction
)
这实际上与Python非常相似,但更加宽松:定义fraction
跨越多行。这是合理的,因为第一行尚未完成。
我对类似C的语法还有一个问题,那就是它们通常会隐式地声明变量。它们只是轻声地说“Foo var
”,而不是清晰地宣布“我正在声明一个类型为Foo
的变量”。由于在大多数情况下,Foo
甚至不是保留字,程序员在这里没有提供任何视觉提示。我更喜欢VB的显式Dim var As Foo
,即使这里使用的关键字有点模糊。
(C ++通过引入许多几乎相同且经常模棱两可的语法(从变量初始化到函数声明)使情况变得更加糟糕)。
我编写的语言另一个需要具备的特性是静态类型。虽然动态类型确实有用,但使用它们的情况却很少。即使是大多数“脚本语言”也不需要它们。我认为这经常与隐式类型混淆,后者则更具有一定的用途。再次以Python的例子为例,为什么它不提供静态类型?它已经具有强类型,静态类型检查只会是一种必然选择,并且可以大大减少调试工作。同样适用于显式变量声明。我无法看到暗示性变量声明提供了什么优势。
因此,我们已经有了一种语言的概要:
此外,我非常喜欢某些C ++概念,例如通用模板,RAII(即避免收集垃圾而不是收集它),不可变性以及通过迭代器定义值范围的概念。我曾在其他地方说过,我相信迭代器是最基本的创新之一。给它们一个小口红,你甚至都看不出来C++这只丑陋的野兽:
for i in MyVector:
print(i)
与其
for (typename vector<T>::const_iterator i = MyVector.begin();
i != MyVector.end();
++i)
cout << *i << endl;
当然,我知道上面的语法被许多编程语言所使用。但它们都只提供了 C++ 强大迭代器概念的简化版本(按照 C++ 的术语来说,大多数编程语言只支持最基本的输入迭代器类型,也就是最不强大的迭代器)。
此时我应该说明一下,所有这些思想的版权都属于我,有专利正在申请中(特别是针对 MayOrMayNotBe
操作符,它实际上并不比较对象引用)。
所有这些想法的版权都属于我
谁会在 Stack Overflow 上寻找他们不能使用的想法呢?说真的,如果你的想法受版权保护,为什么要在 CC 许可下发布它们呢? - Nateowami我没有"完美"编程语言的概念,因为并不是只有一个任务需要执行。
不同的任务适合不同的语言和范式。
它看起来像C#。我会很喜欢拥有微软!
完美的编程语言往往只存在于科幻小说中。例如:
所有这些仍然归结为同样的基本难题。任何不强迫人类学习技能的编程语言都会限制思维自由。自然语言也不好,因为它有许多歧义性。
我希望找到一种既能自由发挥又具备强大功能和最小语法的编程语言。最近我开始学习Lisp,目前看来非常不错。
通过亚马逊机械众包实现的大规模并行计算。
job = "Upvote this answer"
@price = "$0.01"
fork(10000, job, @price)
我很喜欢C宏,但我认为如果您可以使用相同的语言编写宏或“元代码”会更好。 (C是一个糟糕的例子; 在脚本语言中可能会很好。)
在这些示例中,我使用大括号来标识元代码。您将能够通过“预处理器”运行源代码以展开元代码。否则,它只会在运行时扩展一次。
print "Your product ID is: ", { print '"', generateGUID(), '"' }
或者
lookupTable[] = {
/* insert code to generate table here
*
* This lets you modify the algorithm easily
* but speeds up the final program.
*
* This would be especially appropriate in
* cases where you would otherwise type out
* the table as a literal (yuck)
*/
}
有时候我们不得不写几行非常重复的代码;我现在想不出一个好的例子,但这种情况下也会非常有帮助。
这并不会与借鉴 Eiffel 和 C# 的最佳理念有太大的区别(因为,明显地,我没有足够的知识来想出更好的东西——首先我没有学过计算机科学)。
然而,我的主要实际关注点是要 在经典的“源代码文本”方法之外再进一步。我知道这似乎是一个 IDE 的事情,但为什么我不能有一个可配置的代码视图,其中包含了前置条件/主体/后置条件等列,而不是“线性”的形式(i):
function f
// f's preconditions
// f's body
// f's postconditions
end
function g
// g's preconditions
// g's body
// g's postconditions
end
为什么不 (ii) - 想象一下这是一个带边框的表格:
f f's parameters f's prec f's body f's postc f's comments
g g's parameters g's prec g's body g's postc g's comments
对我来说,Python非常接近理想状态... 我只是希望能够摆脱一些烦人的问题,比如self关键字... 但是如果使用一个好的编辑器,Python可以非常快速地完成惊人的事情...