由于缺乏对64位VM的访问权限,我目前无法构建hhvm,因此我无法使用他们拥有的类型检查程序.他们的文档似乎没有详细描述类型检查器(hh_server和hh_client?)的操作.
我想知道,对于任何使用过它的人来说,如果在这种情况下可以使用类型检查器:
假设某人无法将他们的PHP代码库转换为Hack,所以他们用hacklang类型注释的形式编写带有注释的PHP,并在构建时使用工具剥离注释,制作一个hh文件,运行typechecker并报告错误.
例如原始PHP:
<?php
function lar(/* int */ $x)/* : int */
{
return $x;
}
Run Code Online (Sandbox Code Playgroud)
复制上面的内容,删除注释,更改?php到?hh:
<?hh
function lar(int $x): int
{
return $x;
}
Run Code Online (Sandbox Code Playgroud)
通过类型检查器运行它,看它是否会产生错误.
这样,您就可以使用普通PHP访问合法类型检查,而无需在HHVM上运行它.typechecker是否以适合此设置的方式运行?
在几乎每个系统上,Python都可以为您提供人类可读的浮点的简短表示形式,而不是17位的机器精度:
Python 3.3.0 (default, Dec 20 2014, 13:28:01)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.1
>>> import sys; sys.float_repr_style
'short'
Run Code Online (Sandbox Code Playgroud)
在ARM926EJ-S上,您没有简短的表示形式:
Python 3.3.0 (default, Jun 3 2014, 12:11:19)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0.1
0.10000000000000001
>>> import sys; sys.float_repr_style
'legacy'
Run Code Online (Sandbox Code Playgroud)
对于大多数系统,Python 2.7显然将此简短表示形式添加到repr():
现在,在大多数平台上都可以正确舍入浮点数和字符串之间的转换。这些转换发生在许多不同的地方:str()代表浮点数和复数;浮动和复杂构造函数;数字格式;使用marshal,pickle和json模块对浮点数和复数进行序列化和反序列化;在Python代码中解析float和虚数文字;和十进制到浮点转换。
与此相关的是,浮点数x的repr()现在基于最短的十进制字符串返回一个结果,该字符串保证在正确的舍入(使用“从一半到一半到四舍五入的舍入模式”下)可以四舍五入为x。以前,它根据x舍入到17个十进制数字给出了一个字符串。
负责此改进的舍入库可在Windows和使用gcc,icc或suncc编译器的Unix平台上工作。可能在少数平台上无法保证此代码的正确操作,因此在此类系统上不使用该代码。您可以通过检查sys.float_repr_style来确定正在使用的代码,如果正在使用新代码,则将简短显示,而如果未使用,则将使用旧代码。
他们说某些平台不能保证( dtoa.c …
第一个1-Haskell-a-Day 练习让我困惑到无法回头。目标是过滤掉列表中的元素,除非它等于以下元素。例如
> filterByPair [1, 2, 2, 2, 3, 3, 4]
[2,2,3]
Run Code Online (Sandbox Code Playgroud)
(我试图制作两个偏移量列表,将它们压缩成元组并删除两次没有相同数字的元组,例如 [(2,2),(2,2),(3,3)],等)但令人兴奋的简单解决方案使用=<<
绑定运算符:
filterByPair :: Eq a => [a] -> [a]
filterByPair = (init =<<) . group
Run Code Online (Sandbox Code Playgroud)
我很难弄清楚那个运算符。当我尝试使用 ghci 时,我没有得到相同的结果:
> init =<< [2,3,4]
No instance for (Num [b0]) arising from the literal `2'
Run Code Online (Sandbox Code Playgroud)
我发现在 ghci 中我可以使用,比如说,replicate
与=<<
. 它似乎将列表的每个元素都输入到函数中:
> replicate 2 =<< [2,3,4]
[2,2,3,3,4,4]
Run Code Online (Sandbox Code Playgroud)
所以第一次复飞相当于:
> replicate 2 2
[2,2]
Run Code Online (Sandbox Code Playgroud)
它以某种方式知道将列表放在 的第二个参数中replicate
,而不是第一个参数中,并将它们全部输出到一个大列表中而不是单独的列表中,就像fmap
这样:
> fmap (replicate 2) [2,3,4] …
Run Code Online (Sandbox Code Playgroud) 假设我定期将数据插入 SQLite 数据库,然后清除前 50% 的数据,但我不清理。
我现在是否有文件前 50% 的页面清零之类的内容?如果我添加另一批数据,我是否会填写那些清零的页面?
手册提到了数据碎片:
频繁的插入、更新和删除可能会导致数据库文件变得碎片化 - 单个表或索引的数据分散在数据库文件中。
VACUUM 确保每个表和索引在很大程度上连续存储在数据库文件中。在某些情况下,VACUUM 还可以减少数据库中部分填充的页数,从而进一步减小数据库文件的大小。
但这并不表明这必然会导致性能下降。它主要暗示了可以通过吸尘来节省浪费的空间。
严格连续页面中的数据是否有明显的性能提升?我可以期望具有大量碎片数据的数据库获得“糟糕”的性能吗?