标签: static-typing

有没有静态的鸭型语言?

我申报会员时可以指定接口吗?

在思考了这个问题一段时间之后,我发现静态鸭式语言可能确实有效.为什么在编译时不能将预定义的类绑定到接口?例:

public interface IMyInterface
{
  public void MyMethod();
}

public class MyClass  //Does not explicitly implement IMyInterface
{
  public void MyMethod()  //But contains a compatible method definition
  {
    Console.WriteLine("Hello, world!");
  }
}

...

public void CallMyMethod(IMyInterface m)
{
  m.MyMethod();
}

...

MyClass obj = new MyClass();
CallMyMethod(obj);     // Automatically recognize that MyClass "fits" 
                       // MyInterface, and force a type-cast.
Run Code Online (Sandbox Code Playgroud)

你知道支持这种功能的任何语言吗?它会在Java或C#中有用吗?它在某种程度上存在根本缺陷吗?我知道你可以继承MyClass并实现接口或使用Adapter设计模式来完成同样的事情,但这些方法看似不必要的样板代码.

duck-typing language-design static-typing interface class

18
推荐指数
6
解决办法
3500
查看次数

Python缺乏静态类型如何影响大型项目的可维护性和可扩展性?

在阅读了这个非常有用的信息(尽管有点争论性)之后,我想了解您使用Python编写大型项目的经验.随着项目变得更大,事情变得无法管理吗?这种担忧是让我依赖Java的一件事.因此,我会特别感兴趣的知情对于大型项目的可维护性和Java和Python的可扩展性的比较.

python java project-management static-typing

18
推荐指数
4
解决办法
2967
查看次数

在 Julia 中要求类型声明

有什么方法可以在 Julia 中明确要求(例如在模块或包中)必须声明类型 ?例如或是否支持此类检查?更广泛地说,Julia 标准发行版本身是否提供任何可以帮助检查此要求的静态代码分析器或等效物? PackageCompilerLint.jl

作为一个激励示例,假设我们希望确保不断增长的生产代码库只接受始终声明类型的代码,前提是具有类型声明的大型代码库往往更易于维护。

如果我们想强制执行该条件,Julia 在其标准发行版中是否提供任何机制来要求类型声明或帮助推进该目标?(例如,任何可以通过短绒、提交钩子或等价物检查的东西?)

lint compilation static-typing dynamic-typing julia

18
推荐指数
2
解决办法
607
查看次数

静态打字的Lua

我正在寻找一个在编译时进行类型检查的Lua前端编译器,但输出标准的Lua 5.1字节代码(只有运行时类型).我想要的是一定量的静态,编译时语法分析和可选类型,以便比运行时更快地检测到琐碎的错误.生成的字节代码必须与使用标准LoadString()编译的现有Lua字节代码很好地配合.

要清楚 - 任何差异只会发生在字节编译时.在运行时,字节代码不知道在编译阶段发生了任何不同/异常的事情.

我的想法听起来很像ActionScript; 我甚至不介意输出Lua字节代码的ActionScript编译器!

有没有人听说过这样的努力?我已经看到了一些使用MetaLua来做这件事的引用,但老实说,我不够聪明,无法做出文档的尾巴.

compiler-construction lua static-typing

17
推荐指数
4
解决办法
7683
查看次数

您是否知道使用静态类型检查语言,其中Code是Data?

你能用静态类型检查(如Java)命名语言,代码是数据(如LISP)吗?我的意思是两种语言.

lisp programming-languages static-typing s-expression

17
推荐指数
3
解决办法
1827
查看次数

Python 输入 TypeVar(A, B, covariant=True) 是什么意思?

今天我深入研究了 Liskov 的替换原则和协方差/逆变。

我被困在以下之间的区别上:

  1. T = TypeVar("T", bound=Union[A, B])
  2. T = TypeVar("T", A, B, covariant=True)

我对#1 的理解

TypeVar('T', A, B) 和 TypeVar('T', bound=Union[A, B]) 的区别

这个答案明确指出T可以是:

  1. Union[A, B](或任何亚型的联合ABUnion[A, BChild]
  2. A(或 的任何子类型A
  3. B(或 的任何子类型B

这对我来说很有意义。


有缺陷的理解#2

MyPy 不允许受约束的 TypeVar 是协变的?定义具有约束但协变的键值类型的通用字典

重新提及bound=Union[A, B]案例,但没有理解选项#2 的含义,A, B, covariant=True

我试过玩弄mypy,但似乎无法弄清楚。 谁能指出这是什么意思?

认为这意味着:

  1. A(或 的任何子类型A
  2. B(或 …

python oop static-typing covariance mypy

17
推荐指数
1
解决办法
2939
查看次数

什么时候sqlite的清单输入有用吗?

sqlite使用作者称之为" Manifest Typing "的东西,这基本上意味着sqlite是动态类型的:如果你愿意,你可以在一个"int"列中存储一个varchar值.

这是一个有趣的设计决定,但每当我使用sqlite时,我就像标准的RDMS一样使用它,并将类型视为静态.实际上,在其他系统中设计数据库时,我甚至从未希望使用动态类型列.

那么,这个功能何时有用?有没有人在实践中找到了一个很好用的东西,用静态类型的列不能轻易完成?

sql sqlite static-typing dynamic-typing

16
推荐指数
1
解决办法
1056
查看次数

Scala(最新的2.10)与Groovy ++(最新的0.9.1?)的比较

我刚看了一段Groovy发明家 James Strachan 的视频,他继续热爱Scala.这让我想要了解更多关于Groovy的信息,这些信息引导我使用Groovy ++.Groovy ++Groovy的静态类型和编译版本(显然是完全动态的).

我试图弄清楚什么是Groovy ++(0.9.1的最新版本?)与Scala(2.10的最新版本)形成鲜明对比.在活动的Groovy ++论坛没有任何关于最新版本的这是能够吸引多少信息非常最近的活动.

那么,Scala与Groovy ++有一个很好的简单比较/对比吗?我对Groovy本身不感兴趣(除了作为Groovy ++设计的基础),因为我想并排比较静态编译的功能.一个简单的优点/缺点(即权衡)列表基本上是我所寻求的,而不必进行数十到数百小时的研究和实验.

提前感谢您提供有关此对比度和比较查询的任何信息.

jvm scala static-typing groovy++

16
推荐指数
1
解决办法
631
查看次数

实现Monads的语言必须是静态类型吗?

我正在学习函数式编程风格.在" 不要害怕Monads"中,Brian Beckman对Monad进行了精彩的介绍.他提到Monad是关于功能的组合,以解决复杂性.

Monad包括unit将类型T转换为放大类型M(T)的函数; 和一个Bind函数,给定从T到M(U)的函数,将类型M(T)转换为另一种类型M(U).(U可以是T,但不一定是).

根据我的理解,实现monad的语言应该静态地进行类型检查.否则,在编译期间无法找到类型错误,并且不控制"复杂性".我的理解是否正确?

monads functional-programming static-typing

15
推荐指数
1
解决办法
2329
查看次数

键入的元编程语言

我想用静态类型语言做一些元编程,我的程序和我的元程序都将被输入.我的意思是强烈的意义:如果我的程序生成器编译,我希望类型系统足够强大,只能生成类型正确的程序.

据我所知,只有metaocaml才能做到这一点.(不,模板Haskell和C++模板都不符合要求 - 参见本文).问题:其他语言/系统允许哪些内容?

编辑:据我所知,metaocaml已经死了.奥列格试图恢复它,但这仍然是OCaml本身背后的几个版本.如果一个人想要使用实验语言(即甚至比metaocaml更多),看起来Ur和很可能是Idris符合这个要求.还有其他新的参赛作品吗?

static-typing metaprogramming

15
推荐指数
3
解决办法
1262
查看次数