typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案
typed.js
CircleCI最近发表了一篇非常有用的文章“ 为什么我们不再使用Core.typed ”,引发了有关Type Clojure的一些重要问题,在特定情况下会导致成本加重收益。 CircleCI与core.typed的主要作者Ambrose Bonnaire-Sergeant有着长期而积极的关系,后者在他最近的Strange Loop演讲“ Typed Clojure:从可选到渐进式打字 ”中解决了他们的担忧(渐进式打字也在他的著作中得到了解释6/2015博客文章“ Clojure的逐步键入 ”)。 为了便于搜索,以及我们中的一些人喜欢文本而不是视频,我想总结一下答复中的要点(提出了一些我自己的想法)。
顾虑
(应该注意,CircleCI具有相当大的代码库,带有〜90个类型化的名称空间。)
- 缓慢的检查-如果您处理多个文件,则需要重新扫描它们,这在大型项目上需要很长时间
- 类型化和非类型化代码的混合,以及类型与:no-check的使用导致保证减弱; 既可以在自己的代码库中进行,也可以在与无类型库进行交互时使用(请参阅#4)。
- 某些表达式无法按类型输入(获取,…),并且很难区分错误是由core.typed的限制还是所检查代码的实际缺陷引起的
- 维护未类型化的第三方库的类型的成本很高
- 很难为某些表达式找到正确的类型签名
解决方案
简介:这种情况已经更好,并且在逐步键入完全完成后会更好。
#1慢速检查 –类型化REPL和内置在require / load中的缓存已解决了这一问题。
Ambrose Bonnaire-Sergeant(ABS):但Typed REPL仍在开发中,“特别是,它与许多使用当前名称空间评估特定于工具的东西(例如,自动完成)的工具不能很好地配合。 […]它没有记录和未经验证”,尽管可以将需求/负载缓存分开并单独使用,因为它不会遭受这些问题的困扰。
#2类型化和非类型化代码的混合,因此缺乏编译时保证–这将通过在完成时逐步键入来解决,方法是向这些类型添加运行时检查(并添加运行时检查以确保未类型化的代码不能将非法值传递给类型化的代码) )
#3不可能/难以键入的表达式 –尽管我在Google网上论坛中看到社区一直在思考能够键入更多Clojure习语的方法,但我认为对话中并未解决这个问题。 我的想法: 这里应该是对这些内容的一流支持,即一种众所周知的,得到良好支持且易于使用的方法来解决这些问题。 类似于外部无类型代码的解决方案,我们提供了自己的类型签名并将其标记为“:no-check”。 (尽管我显然不知道针对类型无法检查的表达式的特定问题的解决方案。)而且,应该不应该修改错误报告以清楚地区分由core.typed的限制和缺陷引起的错误。代码正在检查中。
ABS:“自2013年以来,在这方面最重要的工作(即在编译时支持更多习语)一直在增加。需要进行大修才能将CircleCI用作示例的挑战。”
#4维护第三方库类型签名的成本 –这仍然是昂贵的,但由于这些类型将变成运行时保证,因此更加有价值和可靠。 我的想法:这与使用Prismatic Schema没什么不同,您还需要检查外部代码是否符合您的合同。
ABS:一个有趣的想法是将现有的Schema注释转换为具有它们的libs的core.typed。
#5难以找到更复杂功能的正确类型签名 -尚未解决。 我的想法:尽管现在可能不在主要关注范围之内,但是探索类型的签名变得更容易无疑是一个有趣的探索。 最好通过一些魔术盒运行一个函数,并提供一些用法示例,然后为其返回类型签名:-)
ABS:“我个人目前最感兴趣的是使用编译时数据来推断类型,如果可能的话,这将再次需要大修。 您的建议已在实践中成功使用,请参见DRuby 。 我想知道这种方法是否适用于典型的Clojure代码。 在跨越函数边界时,许多Clojure程序中的IME类型并不是特别多态或高阶,函数通常带有映射或其他简单值,因此可能值得研究。
结论
在许多情况下,Core.typed是相关且有用的。 随着渐进式打字的发展,它将在基于混合类型-非类型代码的基础上变得更加强大和有用。
有用的其他资源
- 核心类型的电子邮件组 - 例如 从7/2015 开始 “ core.typed的未来方向 ”
- Wiki:core.typed的局限性
- 核心类型的吉拉
翻译自: https://www.javacodegeeks.com/2015/10/an-answer-to-circlecis-why-were-no-longer-using-core-typed.html
typed.js
typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案相关推荐
- 初尝 core.typed
美丽的远景 core.typed 是一个有趣的项目:它试图给 duck type 的 clojure 语言加上一个可选的类型系统.这个类型系统与 Haskell 语言的类型有些相似,比 Java/C+ ...
- 认识并测量Typed DataSet
认识并测量Typed DataSet Truly 2005-08-05 下载本文的源码(C#) - 17k 下载本文的源码(VB) - 15k 简介 强类型DataSet 强类型DataSet是从Da ...
- cdn加载插件和npm安装的差别_web开发:打字机效果插件Typed.js
本文同步发表在我的个人博客中: 沧沧凉凉www.cclliang.com 打字机效果是非常酷的文字显示效果,视觉表现极佳,而通过Typed.js可以很简单的在web开发中实现打字机效果. 1. 官网 ...
- js打印html5,控制台打印文字效果js插件-typed.js
typed.js是一款模拟控制台打印文字效果的js插件.typed.js可以自由的控制要打印的文字,以及打印的速度等,可以制作出逼真的打印文字效果. 安装 可以通过bower来安装typed.js插件 ...
- typed.js_Typed.js集成可轻松创建打字动画
typed.js Vue类型的js (vue-typed-js) A Vue.js integration for Typed.js. 用于Typed.js的Vue.js集成. Typed.js is ...
- [JavaScript]为JS处理二进制数据提供可能性的WEB API
写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那 ...
- github上可供新手阅读和玩耍的java项目有哪些??
扫垃圾 ,Java 爱好者, 前沿技术思考者 刘巍然-学酥 等 217 人赞同 一个聊天程序范例: tinystruct2.0/smalltalk.java at master · m0ver/tin ...
- angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案
angular面试题及答案 by Shlomi Levi 通过Shlomi Levi 关于最流行的Angular问题的StackOverflow上的48个答案 (48 answers on Stack ...
- JavaScrpit 犀牛书第七版笔记
JavaScrpit 犀牛书第七版笔记 挖个坑吧,JavaScript 犀牛书英文的第七版(JavaScript: The Definitive Guide, 7th Edition)其实在去年(20 ...
最新文章
- 搭建云mysql,基于ECS搭建云上博客
- linux系统运行flash3d,真正的3D操作系统,太强了
- VS里的新建模板(自动添加版本注释)
- usb连接不上 艾德克斯电源_工程师,USB与SPI之间如何通信?什么芯片方案可以实现...
- ajax 清洗剂,Choice浴室清洁剂大测评!最好用的只要$3.5!这些产品最好别买...
- Anbox之Ubuntu18.04安装(二)
- java使用elasticsearch进行模糊查询-已在项目中实际应用
- 淘宝按图搜索商品(拍立淘)、图片上传API接口、图片识别商品接口img2text标题栏、链接及图片相关参数字段API数据获取调用示例
- iOS App Store Connect 内购详解
- 磁珠 符号_史上最全面的磁珠知识大全
- 第十章 项目沟通管理和干系人管理
- 1317: PIPI的生日礼物
- 数据沼泽_数据湖:只是一片沼泽,没有数据治理和目录
- 搜狐狐友搅局社交;小米手环4发布;2019互联网趋势报告发布;Python火爆依旧...
- 怎么寻找微信撤回的图片
- C语言中itoa和atoi函数的用法
- 【linux】之系统安全
- msec php,关于QThread::wait(msec)函数的讨论
- UltralSO制作启动盘显示报错:磁盘/映像容量太小
- 海康 布防 java