Perl 6能够在线工作吗?

11

这可能是一个天真的、甚至不是一个有效的问题...

我编写了一个Perl 6程序(希望再编写几个),它分析本地数据并考虑一些用户定义的参数。我的几个同事/合作伙伴需要定期获取程序的输出,因此他们发送给我参数,我运行程序并将输出发送回他们。

由于整个过程不太方便,所以我正在考虑可以为每个人做些什么来简化事情。以下是选项,但没有一种看起来理想。

  • 在我的同事电脑上安装Perl 6并教他们如何使用。他们中的大多数人都没有任何编程经验,数据和程序本身应该在所有计算机上保持最新,程序应该在不同系统上工作相同等等,所以这可能会使情况更糟而不是更好。
  • 制作一个在线版本的程序(使用JS等),这样我的同事就可以在浏览器窗口中输入参数并获得结果。这对用户来说要容易得多(我已经为一个更简单的程序做了这样的事情),但我更愿意使用Perl 6...

那么,我的问题是:有可能让Perl 6在线工作吗?它能在浏览器中工作吗?或者还有其他解决方案吗?


1
大约20年前,Perl是编写(服务器端)CGI脚本的事实标准语言。它失去了一些流行度,被PHP和其他Web应用程序框架所取代。但是,如果您搜索“Perl CGI教程”,您会发现有大量关于如何使用它的信息。 - datenwolf
3
你可能希望看一下Cro,尽管这是一个相当复杂的问题。 - Scimon Proctor
1
如果你想让整个过程在浏览器中进行,JS可以完成这项工作。如果你想要一个浏览器部分与执行实际工作的服务器进行通信,考虑使用JS来处理浏览器部分,Cro/Perl6来处理服务器部分。 - Curt Tilmes
1
@EugeneBarsky 你看到了 https://cro.services/docs/intro/spa-with-cro 吗? - raiph
1
尤金,我已经更新了我的答案,主要是为了解决你对服务器不熟悉的问题。 - raiph
显示剩余3条评论
3个回答

12
在我同事的计算机上安装Perl 6,根据你提供的细节,我认为这可能会让情况变得更糟,而不是更好。对于使用JS等语言制作程序的变种,使得同事可以在浏览器窗口中输入参数并获得结果,这是一个自然的选择。请注意,如果同事能够通过内部网络看到您的计算机,则仍然可以进行JS / Web解决方案,但不要公开在线。另一种选择是接受结构化电子邮件。至于使用Perl 6的问题,除了JS外,在Web解决方案中使用其他语言的代码最常见的方法是在“前端”仍然使用HTML等内容(通常包括JS),然后将运行在服务器上的代码调用为“后端”。 (另一种方法是将其转换为JS。理论上,您可以通过实验性nqp后端将Perl 6转换为JS。我认为这是一个令人兴奋的发展,但我怀疑它在短期内会很慢且有限。)

在这一部分中,最后一个要点是,如果你最终选择将Perl 6翻译为JS解决方案,因为你不想学习或处理混合服务器的问题,那么你将使用Perl 6作为原型语言。这可能是一种合法的语言使用方式,但本答案的其余部分假定你会引入一个服务器。

介绍和管理服务器

服务器是一台计算机或软件,由于来自“客户端”(通常是其他计算机)的请求而可靠地保持可用并按需运行软件。

听起来很简单,在某些方面确实如此,但在其他方面则不然。如果有人关闭电源怎么办?或者没有支付互联网账单怎么办?或者软件泄漏内存导致系统定期崩溃怎么办?或者黑客攻击并进入怎么办?

除非那些使用服务的人已经可以通过本地网络看到服务器计算机,通常甚至都不是这样,现代方法介绍服务器到解决方案中的方法是购买在线服务器包(通常基于虚拟化)。 (考虑每月几美元及以上。)假设有一个不错的服务提供商,这有效地保证它将成为一个良好运行的服务器,通常保持开机状态,工作,连接和提供服务,除非被黑客攻击或其他原因破坏,并且如果发生后者,你将及时得到通知。 “零成本”替代方案是让你的台式机也成为服务器。这意味着你需要负责保持你的台式机处于运行状态并保持连接。

一种现代化的管理服务器的方法是使用Docker或类似技术。这有效地保证了如果服务器被黑客攻击或出现其他问题,您可以几乎立即解决问题。它还使得在本地拥有一个服务器变得容易,您可以在上面开发和测试,并且可以保证与部署到生产服务器上的服务器完全相同。最重要的是,安装Docker在您的桌面上或在购买的服务器上使用,并放入已经准备好的docker文件意味着您只需点击几个按钮就可以从没有使用服务器到拥有可工作的服务器。
市场上有许多提供操作系统虚拟化和docker或类似技术的组合的服务,您只需为服务器实际运行时间付费,而不必为其24/7在线支付费用。有很多细节需要注意,例如有些服务不支持Perl 6。据我所知,Amazon AWSGoogle Cloud都支持按使用时间付费,并允许使用任何编程语言。
构建Web应用程序
本答案的最后几个部分将介绍如何在部署服务器之后使用Perl 6,从最简单的开始。如果您想直接跳转到我推荐的Web路线解决方案,请跳转到最后一节Cro。
电子邮件客户端自动回复器
特别是如果您不想花钱购买单独的服务器,为了简化事情,您可以让同事向发送到您桌面上运行的电子邮件客户端的电子邮件地址发送结构化电子邮件,该电子邮件客户端在运行Perl 6程序并在结果出现时通过电子邮件回复他们。如果您对此解决方案感兴趣,请发布另一个 SO 询问。

其余部分假定使用Web解决方案。

CGI和手写代码

从网页调用在服务器上运行的代码很容易。

您只需编写一个适当的链接,指向动态程序而不是静态html页面。

如果要收集参数,则只需编写表单和适当的提交按钮,并以这种方式执行。

如果您已经编写了一个带有表单的现有网页,那么如果您阅读了一篇适当的文章,例如使用CGI脚本生成网页的方法,您可以在几分钟内学习如何传递参数、调用Perl 6代码并显示结果。

模块和Bailador

在我看来,使用手写CGI等低级别的东西是不值得的。这样做存在危险,并且有一些模块使创建和维护变得更加容易和安全。

这些将出现在modules.perl6.org下的{"web"}中。

Bailador是一种明显的选择,可提供基本解决方案,并具有“路由”(将URL映射到代码)和模板的良好功能。

Cro和SPA

如果您对使用最自然的方法构建现代网站感兴趣,我建议使用Cro。 Cro使得使用SPA方法构建简单的Web解决方案变得轻而易举。但它是设计用Perl 6内置的功能来扩展到最复杂的网站,包括任何混合异步,并发,并行或分布式处理以及任何中间件

Cro SPA可能对于您在OP中建议的非常琐碎的应用程序而言过于复杂,但它仍然非常简单,并且选择它有无数的优点,对于您的应用程序来说没有明显的缺点。 (即使它作为beta产品的官方状态对于您的情况来说也很好。它已经是一个非常坚实的产品,开发人员迅速响应任何问题,并且对于这些开发人员以及Perl 6来说,它的清洁,快速,生产值得和维护良好的重要性。)

启动整个设置的最快方法,以便您可以开始使用Cro进行测试,可能是在服务器上(或者如果您将其用作服务器,则在桌面上)安装Docker,然后安装croservices/cro-http Docker容器

学习如何使用Cro传递单个Web页面的最快方法是遵循使用Cro构建单页应用程序教程。


1
非常感谢您展示所有可用的选项!现在我看到了视角并知道该学什么了。 :) 我们没有任何本地网络,我的一些同事住在其他国家。 - Eugene Barsky
3
@EugeneBarsky,我已经进行了更多编辑,包括在服务器部分添加定价和“零成本”选项,强调从Docker开始到该部分和Cro部分,并添加了一个简短的部分关于一种可能更简单和更便宜的电子邮件方法。 - raiph
1
这只是一些可能性,但它们反映了我以一种老式和缺乏创造力的方式思考。我喜欢马特的答案。在尝试我的建议之前,我建议您深入研究他的建议。如果马特的建议适用于您当前的用例,那么请将我的答案视为指南,如果您想创建一个更通用的Perl 6网站。 - raiph
1
@EugeneBarsky 请查看http://blogs.perl.org/users/pawel_murias/2018/10/rakudojs-update---it-has-been-merged-into-master-plus-6pad-unveiling.html(尽管要记住现在还处于早期阶段 - 没有人能知道需要多长时间来塑造它)。 - raiph
1
@EugeneBarsky「无论...它是否能够工作。」我猜想,一旦解决了一些错误,决定特定简单用例是否足够好地工作的主要问题将主要是速度,对于更复杂的用例,成熟度。pmurias非常有能力和决心。他已经从事这项工作多年了。他考虑了正确性和速度。P6即将登陆浏览器,并且它会工作。很难预测它需要成熟的时间。但是一个简单的应用程序要么工作,要么不工作。而且我相信pmurias会指导人们处理任何错误或解决任何问题。 - raiph
显示剩余10条评论

7
一种好的解决方案是为他们运行一个Jupyter Notebook服务器,让他们使用 https://github.com/bduggan/p6-jupyter-kernel
另一个解决方案是将您的代码托管在glot.io上,这样他们就可以在浏览器中运行它 https://glot.io/new/perl6
这些都是我快速的解决方案。如果程序非常简单并且在命令行上运行,则有机会使用Rajudo的JVM版本通过--target = jar打包所有内容以在安装了Java的其他计算机上运行。

谢谢!您能否多讲一些Jupyter的相关内容?我感觉自己还不太理解它是如何工作的。 - Eugene Barsky
2
尤金,你真的应该开始学习Jupyter。它像是一个功能强大的REPL——而且远不止于此。如果在Jupyter上使用Perl 6有帮助,请告诉我们。你还应该点击Matt的答案中的glot.io链接,并试玩几分钟,这样你就可以了解更多相关信息。(我知道glot.io唯一的限制是程序执行时间不能超过60秒。) - raiph
@raiph 您能否将数据文件上传到 glot.io,以便程序可以使用它们? - Eugene Barsky
寻找“在此输入的文本将被发送到stdin”以获取stdin。 (如果您显示了stdout,则需要单击“输入”按钮。)您还可以通过单击main.pl6旁边的“+”按钮添加命名文件。这些可以是您粘贴的模块或仅为数据。它们存储在同一个目录中。如果您在这些其他选项卡中编写模块,则需要向main.pl6添加use lib'.';。您还可以通过单击蝴蝶图标添加命令行参数。我怀疑glot.io可能会限制您的文件空间或RAM使用情况,因此可能不适合您。但请尝试并告诉我们。 - raiph
刚刚又遇到这个问题了,“是否可以上传数据文件到glot.io?”......(是的,就像我之前的评论中解释的那样。)对于其他在线评估器,答案也是肯定的,超时是使用在线评估器作为在线Raku解决方案的实用性的一个关键区别特征(以及其他关键方面,例如服务免费和/或持续多年)。请参见我大约一年前的在线评估器表,其中包括超时列、链接等。 - raiph

2
由于您已经有一个实现的程序,而且它已经用Perl 6编写,因此尝试使用Perlito进行一次翻译可能是值得的(参考:perl6.org编译器页面)。
目标是使用Perlito将您的Perl 6源代码一次性翻译成JavaScript,当然可以在浏览器中运行。维护程序的方法是:(1)更新Perl 6源代码;(2)运行Perlito获取JavaScript源代码;(3)用新渲染的源代码替换旧的JavaScript源代码。
整个建议都是实验性的,我自己也没有做过,请谨慎对待。
最后,还有一个更详细的自述文件(提到了JavaScript到Perl 6)。

我正在尝试在我编写的相对复杂的Perl 6上使用Perlito。从演示页面(https://fglock.github.io/Perlito/perlito/perlito6.html)来看,它在Google Chrome中表现非常糟糕,经常卡住。 - Tommy Stanton
这就是说,我也是 Cro 的忠实粉丝,你可以使用它将你的 Perl 6 程序转换成一个 Web 服务。我有相应的示例源代码相关幻灯片 - Tommy Stanton
谢谢!我已经制作了一个 say "Hello world!" 的perl6程序,用Perlito转换它,结果在js中不起作用。:( - Eugene Barsky
关于Cro,我已经安装了它,但是cro run hello在输出中产生了很多错误和警告,然后就卡住了。也许我需要一个针对初学者的教程,如果有这样的东西的话... - Eugene Barsky
6
Perlito6 是一个旧的项目。根据其提交历史,自2012年以来,它没有更新以匹配 roast,该套测试正式定义了 Perl 6 语言。在 perl6.org 上对它的引用将它列在“历史编译器”下,试图(失败?)地暗示其中的项目主要是出于历史兴趣而列出的。http://fglock.github.io/Perlito/perlito/perlito6.html 对于 say "hello world"; 起作用,但我认为 perlito 目前对于普通的 Perl 6 用户来说已不相关。 - raiph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接