可以在栅格数据上使用Perl6语法吗? (使用案例:云优化的GeoTIFF验证)

有几个问题在perl6语法和栅格(一般二进制)数据周围搔痒.根据我的理解,文本方法是在字形级别的trhough语法中工作,我们可以用这种方式处理栅格数据吗?我们可以使用自定义字形定义来处理栅格数据或二进制数据的基本单位,以使用语法对它们进行解析吗?

看到perl6是由perl6语法定义的,我们可以将类似的语法定义为一种“验证”测试,基本情况是语法是否可以解析数据,数据格式正确且结构验证?使用这种方法处理文本数据,对于语法来说很明显,因为基本单元是面向文本的,但是我们可以自定义那些后端定义(例如,可以覆盖:sigspace来制作规则和标记解析另一个字形分隔符)来启用二进制数据区域中语法的强大功能?

谢谢!

对于背景部分:

在过去的几周里,我开始以个人兴趣学习Perl6.在seeing this talk at FOSDEM 2019之后,我开始问自己(以及我周围的人)关于使用语法来检查/解析二进制数据.我的用例将是例如在没有GDAL绑定支持的情况下复制Cloud Optimized Geotiff validator(我在perl6中没有看到一个).这对我来说显然是一个学习项目.

The Spec for Cloud Optimized Geotiff

目前,基本思想是在perl6语法的帮助下解析二进制结构,如果可能作为第一个基本步骤,希望能够检查数据和元数据作为主要目标.

注意:不是母语,如果某些部分需要重写/精确,请随时指出.

最佳答案 由于只发布评论,我将总结我从这里的评论,我的进一步研究和#perl6 IRC聊天室得到的所有答案.

关于对X库的绑定的支持(在测试用例中,它是GDAL),perl6社区内的策略是要么:

>使用Inline :: Foo模块,旨在启动和访问Foo语言的生态系统(例如:Inline :: Perl5,Inline :: Python等). List of Inline::X modules from the Perl6 Module Directory;
>使用或编写使用NativeCall的绑定绑定到遵循C Calling Covention的动态库;
>使用或编写本机perl6模块.

关于二进制数据的解析,我将分为两部分:

>一般来说;
>利用语法;

一般来说

利用P5pack模块或使用Inline::Perl5来使用unpack/pack实际上(使用perl6.c)是最好的解析二进制数据结构(前者似乎有利于它的本机模块).
转到@raiph的第一条评论,向SO anwser展示基本用例.

2.利用语法

使用perl6.c,语法只能解析文本.
然而,关于解析二进制数据的问题似乎是温和的(基于#perl6 irc频道上看到的反馈)和一些文档,但没有实现,似乎铺平了道路,希望看到它发生在未来(近或远吗?)

the @raiph’s anwser的最后一部分列出了许多针对该方向的资源.而且,在Synopses 05 – Regexes and Rules : line 432 中,引发了a:bytes修饰符.我们将不得不看到这些修饰符将在何时实现,以及将它们带到语言中的缺失.
在#perl6 irc频道,MasterDuke said « also, i think the nqp binary reading/writing ops that jnthn recently specced and nine implemented were a prerequisite for anything further ».我仍然需要调查他究竟在谈论什么,但它似乎走向了良好的方向.

其中一个主要观点IMO与基于UTF-8的字形定义有关.如果我们能够将字形定义覆盖为专用语法的自定义定义,我们现在可以覆盖:sigspace修饰符来影响规则和标记的分隔符,我们将访问一种新的方式来操作数据结构和语法.目前,字形数据在字符串级别而不是语法级别或元素中定义.请参阅链接到描述Grapheme Cluster Boundary Rules的UTF-8文档的@timotimo注释.

弯曲规则的方法由@jjmererlo:Parsing GFX3 format with perl6 grammars链接.

点赞