我已经读过Scala的类型系统被Java互操作性削弱了,因此无法执行与Haskell类型系统相同的功能.这是真的?因为类型擦除是弱点,还是我在各方面都错了?这是不同的Scala没有类型类的原因吗?
haskell type-systems scala language-comparisons static-typing
我想知道是否有任何静态类型,可嵌入的脚本语言.Python,JavaScript等是很好的语言,但它们是动态类型的(即,在运行时检查类型).我只是想知道是否有人知道可以嵌入C++应用程序的任何静态类型的脚本语言?
假设我有以下数据模型,用于跟踪棒球运动员,球队和教练的统计数据:
data BBTeam = BBTeam { teamname :: String,
manager :: Coach,
players :: [BBPlayer] }
deriving (Show)
data Coach = Coach { coachname :: String,
favcussword :: String,
diet :: Diet }
deriving (Show)
data Diet = Diet { dietname :: String,
steaks :: Integer,
eggs :: Integer }
deriving (Show)
data BBPlayer = BBPlayer { playername :: String,
hits :: Integer,
era :: Double }
deriving (Show)
Run Code Online (Sandbox Code Playgroud)
现在让我们说经常是牛排狂热分子的经理想要吃更多的牛排 - 所以我们需要能够增加经理人饮食中的牛排含量.以下是此功能的两种可能实现:
1)这使用了大量的模式匹配,我必须得到所有构造函数的所有参数排序正确...两次.它似乎不会很好地扩展或者非常易于维护/读取.
addManagerSteak :: BBTeam -> BBTeam
addManagerSteak (BBTeam …Run Code Online (Sandbox Code Playgroud) 简单的问题:我在编译语言(如C++/Java)和Python/Javascript等解释语言中进行了大量编程(专业和个人).我个人发现,当我使用静态类型语言编程时,我的代码几乎总是更强大.但是,我遇到的几乎所有解释语言都使用动态类型(PHP,Perl,Python等).我知道为什么编译语言使用静态类型(大多数时候),但我无法弄清楚解释语言设计中对静态类型的厌恶.
为什么陡峭断开?它是解释语言性质的一部分吗?OOP?
type-systems language-design static-typing typing dynamic-typing
我正在使用大量现有的Python代码库,并希望开始添加类型注释,以便我可以进行一定程度的静态检查.我想象的是Erlang,Strongtalk或Typed Scheme/Racket.
我见过快速和脏的装饰器,它们根据函数参数和返回类型注释插入动态检查,但我正在寻找更强大的东西并在编译时执行检查.
现在有哪些工具可用于此类事情?我熟悉编译器和类型检查,如果它具有良好的基础,我绝对愿意改进一个不完整的工具.
(注意:我对讨论静态类型的优缺点不感兴趣.)
编辑:一个例子:
def put(d, k, v):
d[k] = v
Run Code Online (Sandbox Code Playgroud)
我希望能够将put函数注释为具有类型put<K,V>(dict<K,V>, K, V) -> None.
更新:新的PEP 484(2014年9月)定义了Python 3.5+中静态类型和类型注释的标准.有一个名为mypy的类型检查工具,它与PEP 484兼容.
有人能告诉我什么是强打字和弱打字意味着什么更好?
prototyping static-typing weak-typing strong-typing dynamic-typing
在我对动态和静态类型的阅读中,我不断反对编译静态类型语言的假设,同时解释动态类型语言.我知道一般来说这是真的,但我对异常感兴趣.
我真的希望有人不仅可以提供这些例外的一些例子,而是试图解释为什么决定这些语言应该以这种方式工作.
type-systems programming-languages static-typing dynamic-typing
我想知道是否有一种编程语言可编译为机器代码/二进制文件(不是字节码然后由VM执行,在考虑打字时完全不同),它具有动态和/或弱类型,例如:
想一下编译语言,其中:
问题:
我认为一种动态但强大的类型化编译语言真的能感觉到,但它有可能吗?
我是一名试图学习C#的PHP网络程序员.
我想知道为什么C#要求我在创建变量时指定数据类型.
Class classInstance = new Class();
Run Code Online (Sandbox Code Playgroud)
为什么我们需要在类实例之前知道数据类型?
最近我一直在使用Typescript,它允许表达如下内容:
interface Address {
street: string;
housenumber: number;
housenumberPostfix?: string;
}
interface Person {
name: string;
adresses: Address[]
}
const person: Person = {
name: 'Joe',
adresses: [
{ street: 'Sesame', housenumber: 1 },
{ street: 'Baker', housenumber: 221, housenumberPostfix: 'b' }
]
}
Run Code Online (Sandbox Code Playgroud)
非常简洁,并在使用人员编码时将所有奢侈品作为类型检查和代码完成.
这是如何在Python中完成的?
我一直在看Mypy和ABC但是还没有成功找到pythonic方式做类似上面的事情(我的尝试导致了太多的样板符合我的口味).
static-typing ×10
type-systems ×3
haskell ×2
python ×2
typing ×2
c# ×1
clojure ×1
mypy ×1
prototyping ×1
scala ×1
typescript ×1
weak-typing ×1