English 中文(简体)
究竟是哪一种完全属于哪一种类型的有色语言? 这类语言的局限性?
原标题:what is a fully type-inferred language? and limitations of such language?

我知道,任何方案拟定语言,凡在撰写职能或模块时不需要在源头上写上说明类型,如果守则的哪部分是“类型校正”,则汇编者将照搬这些类型并汇编成册。 还有更多东西?

is(are) there a such language(s)? if yes are there any limitations on it s type system?

Update 1: Just to be really clear , I am asking about a statically typed,fully type-inferred programming language not a dynamically typed programming language.

最佳回答

完全类型的推论的局限性是,它没有从事许多先进类型的系统特征的工作。 As an example consider Haskell and OCaml. 这两种语言都完全被推断为a 几乎<>>>,但有一些特征可以干扰类型的推论。


在Haskell, 它的类型与多形态返回类型相结合:

readAndPrint str = print (read "asd")

Here read is a function of type Read a => String -> a, which means "for any type a that supports the type class Read the function read can take a String and return an a. So if f is a method that takes an int, I can write f (read "123") and it will convert "123" to the Int 123 and call f with it. It knows that it should convert the string to an Int because f takes an Int. If f took a list of ints, it would try to convert the string to a list of Ints instead. No problem.

但对于<代码>AndPrint的功能,这种办法并不可行。 这里的问题是<代码> 印有/编码>。 可以提出可以打印的任何类型的论据(即支持<代码>的任何类型)。 显示类型。 因此,汇编者没有办法知道你是否希望将脚石改成暗中,还是要改写插图,或者可以印制的任何东西。 因此,在这种情况下,你需要增加说明类型。


在OCaml,有问题的特征是: 如果你将一个带有标语的职能定为其理由,并用某种方法对待该目标,则汇编者将采用一种单一吗? 例如:

let f obj = obj#meth 23 + obj#meth 42

在此,汇编者将引用<代码>obj。 必须是一种类别,其方法名称为meth> 类型:int -> int,即采用Int和回归因茨的方法。 现在,你可以确定一组有这种方法的班级,并将这几类实例作为理由列入<代码>f。 无问题。

如果你界定一个类别,即<代码>a-> int,即可以提出任何类型论点和恢复原状的方法,则会出现问题。 您不能将这一类的标语作为理由通过<条码>f,因为它与所推断的类型不符。 如果您希望<代码>f就象其论点一样提出反对,唯一的办法是在<代码>f上添加一个字句。


因此,这些是几乎完全假设的语文的例子,也是没有说明的语文的例子。 如果你从这些语言中删除有问题的特征,就算出这些特征。

因此,没有这种先进特征的刚果解放运动的基本方言完全被推定为类型。 例如,我假定,Caml Light完全是假设的,因为它基本上没有课堂(无论我实际上不懂语言,因此只是假设)。

问题回答

www.un.org/spanish/ecosoc 什么是推论?

从历史上看,类型(或类型重建)意味着all 一项方案中的类型可以产生,而无需主要要求<>任何><>>> > 明确类型说明。 然而,近年来,它已成为方案拟定语言中的不法分子,主流是甚至最卑鄙的自下而上的扣除形式,即“类推”(例如,C++11的新auto宣言)。 因此,人们开始增加“完整”以提及“真实”的东西。

What is full type inference?

There is a broad spectrum to what degree a language can infer types, and in practice, almost no language supports "full" type inference in the strictest sense (core ML is about the only example). But the main distinguishing factor is whether types can be derived for bindings that do not have a "definition" attached to them — in particular, parameters of functions. If you can write, say,

f(x) = x + 1

和类型系统显示,例如,有Int---Int类型,因此说这种推论是有意义的。 此外,我们谈到poly吗? e. 假设情况

g(x) = x

is assigned the generic type ∀(t) t → t automatically.

在简单型的Mlambda calculus和多形态的推论(在1970年代发明的Aka Hindley/Milner型推论)的背景下,便发明了各种类型的推论,即要求与多种语言的家庭(StandardML、OCaml和可以论证的Haskell)相呼应。

www.un.org/spanish/ecosoc 什么是完全的推论?

核心ML具有“完整”的多变型推论。 但这取决于其类型系统中多变性的某些限制。 尤其是,只有定义是通用的,而不是功能上的论据。 也就是说,

id(x) = x;
id(5);
id(True)

页: 1 在知道定义时,可以提供多种形态。 但

f(id) = (id(5); id(True))

由于<代码>id不能作为功能理由的多变性,因此在《电子商务示范法》中不作检查。 换言之,此类系统的确允许多种形态类型,如∀(t) t------,但不包括所谓的高等级多形态类型(∀(t) t---t)--- Bool,在那里,多形态的数值是以一流方式使用的(这简言之明,甚至很少明确分类的语文)。

混合体(也称为“System F”)允许后者。 但是,这是在类型理论中得出的一个标准结果,即整个系统F的重建类型是无法确定的。 Hindley/Milner击中了一种不太清晰的类型系统的血清点,这种类型的重建仍可计量。

更先进的类型系统特征也使得完全类型的重建无法预测。 还有一些人认为,这种做法是可恶的,但仍然无法做到,例如,存在临时超负荷或排他性的情况,因为这会导致交火的爆炸。

Another limitation are higher ranked types. For example, the following program does not typecheck in languages with ML style type inference:

foo = let bar f = (f [ a ,  b ,  c ], f [1,2,3]) in bar reverse

The type checker can assign to f the type [Char] -> [Char] or [Int] -> [Int], but not forall a.[a]->[a]. In ML, Ocaml and F# there is no way to fix this, as you cannot even write higher rank types.

但是,Haskell(通过GHC的延伸)和Ferge支持较高的级别。 但是,由于只有较高等级级级的检查(而不是较高等级的字体)是可能的,因此,方案管理员必须提供一种类型的说明,例如:

foo = let bar (f :: forall a.[a]->[a]) = (f [ a ,  b ,  c ], f [1,2,3]) in bar reverse




相关问题
Having many stacks with different types

I m making a C program that needs to use two stacks. One needs to hold chars, the other needs to hold doubles. I have two structs, node and stack: struct node { double value; struct node *...

Creating (boxed) primitive instance when the class is known

I need a method that returns an instance of the supplied class type. Let s assume that the supplied types are limited to such that an "empty" instance of them can be created. For instance, supplying ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

How to generate an instance of an unknown type at runtime?

i ve got the following in C#: string typename = "System.Int32"; string value = "4"; theses two strings should be taken to generate an object of the specified type with the specified value... result ...

Type reference scope

I m studying databases and am currently working on a object-relational DB project and I ve encountered a small problem with the number of possible constraints in an object table. I m using "Database ...