Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Alex:basic bytestring lexer泄漏内存_Haskell_Alex - Fatal编程技术网

Haskell Alex:basic bytestring lexer泄漏内存

Haskell Alex:basic bytestring lexer泄漏内存,haskell,alex,Haskell,Alex,我正在尝试编写一个简单的lexer,它将打印输入中的所有单词,其中一个单词是字母的最大序列a-zA-Z。必须忽略所有其他字符 我的Alex程序使用了basic bytestring包装器,它使用了与输入大小相同的内存。我希望它能在恒定的内存中运行 使用-hc的堆配置文件仅显示一个固定内存块,该内存块快速上升到输入大小,然后缓慢下降到0 有趣的是,当使用basic包装器和普通字符串时,只使用常量内存 Alex输入文件是 { module Main where import Data.ByteStr

我正在尝试编写一个简单的lexer,它将打印输入中的所有单词,其中一个单词是字母的最大序列
a-zA-Z
。必须忽略所有其他字符

我的Alex程序使用了
basic bytestring
包装器,它使用了与输入大小相同的内存。我希望它能在恒定的内存中运行

使用
-hc
的堆配置文件仅显示一个固定内存块,该内存块快速上升到输入大小,然后缓慢下降到0

有趣的是,当使用
basic
包装器和普通字符串时,只使用常量内存

Alex输入文件是

{
module Main where
import Data.ByteString.Lazy as B
}

%wrapper "basic-bytestring"

$letters = [a-zA-Z]
$nonletters = [~$letters\n]

tokens :-
  $nonletters+  ;
  $letters+     {B.copy}

{
main = do
  buf <- B.getContents
  let toks = alexScanTokens buf
  mapM_ B.putStrLn toks
}

我将非常感谢您对我的错误所在或如何进一步调查此问题的帮助。

我还在项目存储库中创建了一个问题,因为我认为这是由于alex本身的一个缺陷造成的:
   2,924,029,784 bytes allocated in the heap
       7,869,696 bytes copied during GC
       9,958,560 bytes maximum residency (5 sample(s))
       1,423,704 bytes maximum slop
              22 MB total memory in use (0 MB lost due to fragmentation)

                                    Tot time (elapsed)  Avg pause  Max pause
  Gen  0      5634 colls,     0 par    0.06s    0.05s     0.0000s    0.0002s
  Gen  1         5 colls,     0 par    0.00s    0.00s     0.0004s    0.0011s

  INIT    time    0.00s  (  0.00s elapsed)
  MUT     time    2.79s  (  2.81s elapsed)
  GC      time    0.06s  (  0.06s elapsed)
  EXIT    time    0.00s  (  0.00s elapsed)
  Total   time    2.85s  (  2.86s elapsed)

  %GC     time       2.0%  (1.9% elapsed)

  Alloc rate    1,047,072,808 bytes per MUT second

  Productivity  98.0% of total user, 97.6% of total elapsed