在Erlang中由于系统限制而导致list_to_atom失败

时间:2014-05-20 11:32:30

标签: compilation erlang asn.1

我尝试使用Erlang的asn1ct:compile函数编译asn文件。我运行以下代码:

asn1ct:compile("PDU-definitions", [per, verbose]).

然后出现以下错误:

...
{error,{system_limit,[{erlang,list_to_atom,
            ["enc_InterRATHandoverInfo_v390NonCriticalExtensions_present_v3a0NonCriticalExtensions_laterNonCriticalExtensions_v3g0NonCriticalExtensions_v4b0NonCriticalExtensions_v4d0NonCriticalExtensions_v590NonCriticalExtensions_v690NonCriticalExtensions_nonCriticalExtensions"],           []},
...

我用Google搜索并发现255-character length limitation of Erlang's atom。由于ASN文件中嵌套数据结构太多,相应原子的长度超出限制。

我的问题是:如果我可以将默认长度限制修改为更大的值,或者这种情况有一些解决方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

从R17开始,在修改源代码和重新编译之外,仍有无法修改Erlang中的最大字符数限制。对asn1ct的文档进行稀疏的研究表明,没有办法改变原子编码行为。

我看到的最好的赌注是" n2n"编译选项,指示编译器生成进行名称到枚举转换的函数。我认为在这种情况下它仍将构造原子,但这将是一个没有实际意义的点。

文档中没有任何其他内容提示更改名称构造行为的方法,因此严重嵌套的数据结构会导致问题。