首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GHCJS文本数据结构

GHCJS文本数据结构
EN

Stack Overflow用户
提问于 2016-12-02 02:51:37
回答 1查看 544关注 0票数 3

我正在使用nix与反射平台编译haskell到javascript与GHCJS 8.0.1。我编写了一些函数,这些函数依赖于text库中的一个内部模块:Data.Text.Internal。我唯一需要的就是Text的数据构造函数。

代码语言:javascript
复制
data Text = Text
  {-# UNPACK #-} !A.Array -- payload (Word16 elements)
  {-# UNPACK #-} !Int     -- offset (units of Word16, not Char)
  {-# UNPACK #-} !Int     -- length (units of Word16, not Char)

但是,当我尝试用GHCJS编译使用此数据构造函数的代码时,它会失败。错误消息清楚地表明,在某种程度上,Text的数据构造函数已被以下内容所取代:

代码语言:javascript
复制
newtype Text = Text JSString

我知道我可以在代码块周围放置#ifdef来解决这个问题。但是,我不知道这个数据构造函数替换是如何完成的。在ghcjs-shims中任何地方都没有提到这一点。也没有提到是ghcjs。更奇怪的是,ghcjs-base的函数使用了Text的正常数据构造函数。如果有人能告诉我这个替换的来源,我将不胜感激。

编辑:这与问题无关,但我需要使用Text内部的原因是为了高效地编码IPv4地址和MAC地址。在我的我在前一个问题中包括的基准中,我发现使用text的公共API进行最快的IPv4编码花费了大约450 my。使用内部(并直接写入可变数组),我可以在35 is左右完成这一任务,这至少可以提高10倍的性能。

编辑2:我刚刚想起的另一件事(可能与问题相关)是,在我的代码中的另一个地方,我使用了来自Data.Text.Lazy.Builder.IntData.Text.Lazy.Builder.Int。但是,对于ghcjs,这个函数不是由这个模块导出的。我很乐意把它贡献到上游的某个地方,但是由于我不知道text中的所有模块是如何被抛出的,所以我不知道哪里是合适的上游。如果有人能向我指出完成这一任务的特定文件,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-05 19:16:05

看起来您可能在使用反射平台。我们最近集成了一个更改,它使用JSString作为文本,而不是通常的实现;这是因为与纯Haskell文本实现相比,JSString的速度快得多,内存也少了很多。

如果这是您遇到的情况,我会鼓励您坚持使用JSString,除非您对性能非常漠不关心。但是,如果您想禁用此优化,我认为它应该只需注释掉这块,然后重新输入您的try-反射/ work /nix-shell。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40923946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档