小编Cal*_*pau的帖子

混合PHP/Hacklang:在带有注释类型注释的常规PHP上使用typechecker

由于缺乏对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是否以适合此设置的方式运行?

php hacklang

5
推荐指数
1
解决办法
1655
查看次数

是什么导致Python的float_repr_style使用旧版?

在几乎每个系统上,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来确定正在使用的代码,如果正在使用新代码,则将简短显示,而如果未使用,则将使用旧代码。

由Eric Smith和Mark Dickinson使用David Gay的dtoa.c库实现;问题7117

他们说某些平台不能保证( dtoa.c …

python floating-point

5
推荐指数
1
解决办法
313
查看次数

在这个函数中与 =&lt;&lt; 一起使用的 monad 是什么?

一个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)

monads haskell

4
推荐指数
1
解决办法
165
查看次数

SQLite 清理/碎片和性能下降

假设我定期将数据插入 SQLite 数据库,然后清除前 50% 的数据,但我不清理。

我现在是否有文件前 50% 的页面清零之类的内容?如果我添加另一批数据,我是否会填写那些清零的页面?

手册提到了数据碎片:

频繁的插入、更新和删除可能会导致数据库文件变得碎片化 - 单个表或索引的数据分散在数据库文件中。

VACUUM 确保每个表和索引在很大程度上连续存储在数据库文件中。在某些情况下,VACUUM 还可以减少数据库中部分填充的页数,从而进一步减小数据库文件的大小。

但这并不表明这必然会导致性能下降。它主要暗示了可以通过吸尘来节省浪费的空间。

严格连续页面中的数据是否有明显的性能提升?我可以期望具有大量碎片数据的数据库获得“糟糕”的性能吗?

sqlite premature-optimization vacuum

3
推荐指数
1
解决办法
3287
查看次数