var a = new BigInteger(5); var b = new BigInteger(10); var c = a + b;
一种可能的解决方案是使用运算符重载到Javascript来转换语言.虽然可行 – 通过函数调用和类型检查替换运算符 – 但似乎共识似乎是在不破坏性能的情况下这是不可能的.由于这个原因,CoffeeScript拒绝了这个想法:
https://github.com/jashkenas/coffee-script/issues/846
但真的没有聪明的解决方案吗?
例如,可能有可能从紧密循环中提升类型检查或使用其他管道,现代JS编译器可以在类型为数字时优化远离添加的残差.
想法?
解决方法
例如,您可以编写一个安全转换的编译器
var d = a <+> b <*> c;
成
var d = (a).add((b).multiply(c));
或者,如果你想要自动转换……
var d = toBignum(a).add(toBignum(b).multiply(toBignum(c)));
我没有真正看到你能够在没有大麻烦的情况下强制重载现有的实现.虽然你可以用teoretically替换所有出现的< >等等,目前的Javascript实现并未针对此进行优化,我甚至不想开始思考如果您尝试将bignum传递给引擎盖下的本机C函数之一会发生什么. 编辑:不需要覆盖基本整数类是重要的一点(注意你给出的链接如何,覆盖是这个人想要的第一件事……).我不认为您将能够找到某种“魔术”优化,因为您无法控制客户端使用的许多JS实现中的哪一个. 如果你真的不喜欢像< >区分一个普通的运算符(你不应该干涉)和一个花哨的运算符(你想做bignum的东西)的唯一方法是在Javascript之上强制某种特殊的打字系统,也许是通过评论,定制语法或(如评论中所述)匈牙利表示法. IMO,只需要解决一个自定义的操作符名称,你就会更少讨厌.
原文地址:https://www.jb51.cc/js/156848.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。