问题标签 [static-typing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
347 浏览

delphi - 为什么这段代码声明了一个 DISTINCT 类型?

ShlObj.pas 第 9922 行(如在 Delphi XE 中):


在这里回答大卫赫弗南的评论,因为我认为这概述了可能的相关背景,你为什么要问这个?问题。Windows API 来源的回调例程的过程类型被声明为类型别名(你知道,规范 API 名称 +“Pascalized”别名,有时反之亦然)。例如Windows.PIMAGE_TLS_CALLBACKShlObj.LPFNDFMCALLBACK等等。上面显示的类型声明是一个例外。这就是我问的原因:-)

0 投票
1 回答
413 浏览

python - 可选的静态类型对 Python API 设计有利还是不利?(包括类型检查装饰器示例)

我是一名长期的 Python 开发人员,我真的很喜欢这种语言的动态特性,但我想知道 Python 是否会从可选的静态类型中受益。 能够将静态类型应用于库的 API 是否有益,这样做的缺点是什么?

我很快勾勒出了一个在 pastebin 上实现运行时静态类型检查的装饰器,它的工作方式如下:

在库的 API 函数上使用这样的装饰器是否实用?在我看来,在库的特定领域模块的内部工作中不需要类型检查,但是在库与其客户端之间的连接点上,通过应用类型检查的合同设计的简单版本可能是有用的。特别是作为一种强制文档,它清楚地向图书馆的客户说明它的期望和回报。

像这个示例一样,其中addObjectToQueue()isObjectProcessed()被公开以供客户端使用,并且processTheQueueAndDoAdvancedStuff()是内部库函数。我认为类型检查在面向外部的函数上可能很有用,但如果在内部函数上使用,只会膨胀并限制 python 的动态性和有用性。

使用这种技术有什么缺点?我在 pastebin上的幼稚实现的缺点是什么?

我不想要讨论将 Python 转换为静态类型语言的答案,而是关于 API 设计特定的优缺点的想法。(如果您认为这不是问题,请将其移至programmers.stackexchange.com)

0 投票
2 回答
2422 浏览

lisp - Common Lisp 类型声明未按预期工作

当我像这样在 Common Lisp 中定义一个函数时:

我预计一个电话(foo "a")会立即失败,但它却在调用+. declare表单不能保证静态类型检查吗?

0 投票
2 回答
307 浏览

programming-languages - 是否有适用于 JVM 和 CLR 的静态类型语言?

我正在编写我希望最终在 PC、Xbox 和 Android 平台上执行的代码,如果可能的话,还有 Mac 和 Linux。我不想为每个平台重写它,而是想用一种可以在所有这些平台上工作的语言编写一次。我考虑过 Fantom,但显然它不适用于 Android,并且对静态类型和泛型的支持有限,而且我听说 Scala 将在 CLR 上工作,但它目前不支持 CLR泛型,这会阻止它与 XNA 一起使用。我不想使用动态类型语言,因为动态类型运行速度较慢(在智能手机上尤其重要)并且更难调试。

0 投票
7 回答
450 浏览

python - 满足此标准的语言?

我也做过一些 Java 编程和很少的 C 和 PHP 编程。最近我开始学习 Python,因为这门语言看起来很有趣。

但是关于 SO 的几篇文章似乎指出 Python 不适合并发编程。并且与那些具有编译器的语言相比也更慢。我也喜欢静态类型语言的优点,但 Python 是动态类型的。所以我的问题是,是否有一种语言满足以下标准。

1)有口译员(为了更快的开发)

2)有一个编译器(因为编译后的代码会运行得更快)

3)具有OO能力

4) 静态类型

我遇到了满足上述标准的 OCaml。但是 SO 上的帖子让我相信 OCaml 不适合并发编程。所以第五个标准是

5) 适合并发编程。

PS :- 我不是编程语言方面的专家,所以如果我的上述任何观察结果有误,请多多包涵。

0 投票
2 回答
140 浏览

python - 用于静态类型类属性的 Python 模块

我希望我的 Python 类在将值分配给属性时自动检查值的类型。

有 enthought 的traits模块,IPython 有一个纯 python 版本作为其子模块IPython.utils.traitlets。有没有类似的模块?如果该模块具有自动命令行参数解析器来设置这些属性,那就更好了。

编辑:感谢您的片段。但我想要 Python。如果有库可以做到这一点,我不想自己重新实现。

0 投票
1 回答
14612 浏览

haskell - 具有多个类约束的 Haskell 类型签名

我怎么能有多个类约束,所以 if Ais an Eqand Bis a Num,我可以说要么

或者

那么,我怎样才能同时拥有Eq a =>Num b =>呢?

  • f :: Eq a => Num b => a -> b,
  • f :: Eq a -> Num b => a -> b, 和
  • f :: Eq a, Num b => a -> b

没有做我想做的事。

0 投票
2 回答
285 浏览

java - 在 Java 中静态键入脚本语言

我正在为游戏构建 Java 脚本语言,目前正在研究解析器。玩家/模组制作者/我自己将使用该语言来创建自定义咒语和效果。但是,我很难想象如何在当前系统中顺利实现静态类型(性能需求驱动的痛苦必要性)。我不太在乎编译是否很快,但实际执行需要尽可能快(至少在合理范围内。我希望很快完成。)

因此,解析器具有 迭代令牌流的方法next()peek()它目前由层次结构方法构建,这些方法以保留类型优先级的方式相互调用(“最底层”方法返回常量、变量等)。每个方法都返回一个IResolve具有<T>它“解析”到的泛型类型。例如,这是一个处理“或”表达式的方法,其中“和”的耦合更紧密:

问题是当我需要实现一个依赖于类型的函数时。您可能已经注意到,解析器没有指定泛型类型,而是设计问题的一部分。在这个函数中,我希望执行以下操作(尽管由于泛型类型的擦除,这不起作用......)

我希望可以建立连接的问题点在 switch 语句中。我已经确定我需要将 IResolve 设为非泛型并给它一个“getType()”方法来返回一个int或其他东西,特别是如果我想在将来支持用户定义的类。

问题是:

鉴于我当前的结构和对混合继承的渴望(用户定义的类和接口,如 Java 和 C#),实现静态类型的最佳方法是什么?如果没有好的方法,我该如何改变甚至重建我的结构来实现它?

注意:我不声称自己知道自己陷入了什么,建设性的批评非常受欢迎。如果我需要澄清任何事情,请告诉我!

另一个注意事项:我知道你在想“为什么要使用静态类型?”,通常我会同意你的看法——但是,游戏世界是由体素组成的(准确地说是 Minecraft 模组),并且与它们一起工作需要快点。_ 想象一个脚本,它是一个 O(n^2) 算法,每秒 20 次迭代超过 100 个块,为 30 多个玩家在一个已经几乎没有吱吱声的廉价服务器上......或者,不可避免地影响数千个块的单个大规模爆炸导致可怕的滞后峰值。因此,后端类型检查或任何形式的鸭式打字都不会削减它(尽管我非常渴望它atm。)在这种特殊情况下,低级别的好处是必要的,尽管它是痛苦的。

0 投票
3 回答
1330 浏览

language-agnostic - 不需要声明变量类型的语言的质量是否是弱类型或动态类型的示例

不需要声明变量类型(例如 PHP 和 Perl)的语言的质量是弱类型还是动态类型?我很难理解这两个术语。

动态/静态类型与类型转换有关,而弱/强类型与变量减速有关,我对吗?

0 投票
1 回答
638 浏览

scala - 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++ 的基础),因为我想并排比较静态编译的功能。一个简单的优点/缺点(即权衡)列表基本上就是我所寻求的,而无需进行数十到数百小时的研究和实验。

提前感谢您为这种对比和比较查询做出任何贡献。