我最初问这个问题,但在寻找答案时,发现我原来的问题是 C# 缺乏对继承方法返回类型协变的支持。发现这一点后,我很好奇哪些语言支持此功能。
我会接受谁能说出最多名字的答案。
编辑:约翰·米利金正确地指出,许多动态语言都支持这一点。澄清:
我只寻找静态/强类型语言。
请向我解释在此代码中“x”是堆栈动态变量还是堆动态变量?如果是堆动态变量,那么为什么它不是堆栈动态变量?谢谢
function foo(){ MyClass x = new MyClass();}
Run Code Online (Sandbox Code Playgroud) 循环左进位和循环右进位指令有哪些实际用途?
在我的汇编课上,我们无法想出一个有用的好例子。
我试图更好地理解客户端和服务器端级别的计算机语言。据我了解,客户端代码(HTML、CSS 和 Javascript)都内置在浏览器中,无需互联网连接即可理解。
但是,假设我用 Python 或 Ruby 构建了一个简单的博客应用程序。在将 Python 和 Ruby 代码发送回客户端之前,我的服务器是否只知道如何分解 Python 和 Ruby 代码?如果是这样,在将代码发送回客户端/浏览器以供其理解之前,服务器如何编译/解释代码?
请帮助我理解这一点。
我正在编写一种基于堆栈操作的笑话语言。我试图找到使其图灵完备所需的最少指令量,但不知道基于一个堆栈的语言是否可以图灵完备。这些说明足够吗?
IF (top of stack is non-zero)
WHILE (top of stack is non-zero)
PUSH [n-bit integer (where n is a natural number)]
POP
SWAP (top two values)
DUPLICATE (top value)
PLUS (adds top two values, pops them, and pushes result)
Run Code Online (Sandbox Code Playgroud)
我已经查看了几个问题和答案(例如这个和这个),并相信上述说明已经足够了。我对么?或者我是否需要其他东西,例如函数调用、变量或另一个堆栈?
如果这些说明足够了,其中有哪些是多余的吗?
ROTATE
命令(将堆栈的前三个值从 更改A B C
为B C A
)并消除DUPLICATE
、PLUS
和SWAP
命令,可以实现规则 110 元胞自动机的 3 个字符版本。这足以证明图灵完整性吗?
如果有一个没有变量或函数的图灵完整单栈语言的例子那就太好了。
我正在查看Kotlin Github页面,我注意到Kotlin语言本身大多是用Kotlin编写的:
我只是想知道,一种语言怎么可能主要用它自己的语言编写?在您甚至可以使用正在创建的语言之前,编译器是否需要编写(使用不同的语言)?
我想学习D,但是我不太了解重要的事情。C ++和D之间的当前互操作性状态如何?
我确定不可能链接到C ++编译的二进制文件,因为它甚至不能与C ++编译器一起使用。但是,如果我有C ++库的源代码和一些D源代码,该怎么办?可以让他们说话吗?(希望以一种有效的方式)。
不同的C ++版本(C ++ 98、11、14、17和将来的版本)如何?
在 Haskell 编程语言中,根据https://en.wikibooks.org/wiki/Haskell/Category_theory#Translated_categorical_concepts_into_Haskell
\n\n\n\n\n59.2.2 将分类概念翻译成 Haskell
\n\n\n
\n- \n
我们从事该类别的工作
Hask
我们在该类别及其子类别- \n
对象是类型。
- \n
态射是函数。
- \n
接受一种类型并返回另一种类型的东西是 type\n 构造函数。
- \n
接受一个函数并返回另一个函数的东西是高阶函数。
- \n
类型类及其提供的多态性提供了一种很好的方式来捕获这样一个事实:在范畴论中,事物通常同时在多个对象上定义。
类型类表示范畴论中的什么概念?作为一个子类别Hask
作为?
computer-science haskell programming-languages category-theory adhoc-polymorphism
多态性的等级和(非)预测性之间有什么关系?
1 级多态性可以是谓词还是非谓词?
rank-k 多态性k > 1
可以是谓语还是非谓语?
我的困惑来自:
为什么https://en.wikipedia.org/wiki/Parametric_polymorphism提到等级 1 多态性下的预测性?(在我看来,rank-1 意味着可预测性)
Rank-1 (prenex) 多态性
在 prenex 多态系统中,类型变量可能无法用多态类型实例化。 [4] 这与所谓的“ML 风格”或“ Let-多态性”非常相似(从技术上讲,ML 的 Let-多态性还有一些其他语法限制)。这种限制使得多态和非多态类型之间的区别变得非常重要;因此,在谓词系统中,多态类型有时被称为类型模式,以区别于普通(单态)类型,后者有时被称为单类型。结果是所有类型都可以写成将所有量词放在最外面(前缀)位置的形式。例如,考虑上面描述的 append 函数,它具有类型
Run Code Online (Sandbox Code Playgroud)forall a. [a] × [a] -> [a]
为了将此函数应用于一对列表,必须用类型替换
a
函数类型中的变量,以便参数的类型与结果函数类型相匹配。在非谓语系统中,被替换的类型可以是任何类型,包括本身是多态的类型;因此 append 可以应用于具有任何类型元素的列表对——甚至可以应用于多态函数列表,例如 append 本身。ML 语言中的多态性是预测性的。[需要引用]这是因为预测性以及其他限制使类型系统足够简单,因此始终可以进行完整的类型推断。
作为一个实际示例,OCaml(ML 的后代或方言)执行类型推断并支持不可预测的多态性,但在某些情况下,当使用不可预测的多态性时,系统的类型推断是不完整的,除非程序员提供了一些显式的类型注释。
...
谓词多态性
在谓词参数多态系统中,不能以实例化为多态类型的方式使用
?
包含 类型变量的类型?
?
。谓语类型理论包括 Martin-Löf 类型理论和 NuPRL。
https://wiki.haskell.org/Impredicative_types:
谓词类型是多态性的一种高级形式,与 rank-N 类型形成对比。
标准 Haskell 通过使用类型变量允许多态类型,类型变量被理解为普遍量化:
id :: a …
polymorphism haskell programming-languages impredicativetypes parametric-polymorphism
haskell ×2
abi ×1
assembly ×1
c# ×1
c++ ×1
callstack ×1
client-side ×1
covariance ×1
d ×1
heap ×1
java ×1
kotlin ×1
oop ×1
polymorphism ×1
selflanguage ×1
server-side ×1
smalltalk ×1
stack ×1