Perl 6可以在线工作吗?

时间:2018-09-23 19:15:58

标签: perl6 rakudo

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

我已经制作了一个 Perl 6程序(并希望创建另外几个程序),该程序考虑了一些用户定义的参数来分析本地数据。我的几个同事/同事需要定期输出程序,因此他们向我发送了参数,然后运行程序并将它们发回输出。
由于整个过程不是很方便,我正在考虑可以采取什么措施使每个人都更轻松。这里是选项,但都不是理想选择。

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

所以,我的问题是:是否可以使 Perl 6 在线工作?可以在浏览器中使用吗?还是有其他解决方案?

3 个答案:

答案 0 :(得分:11)

  

在同事的计算机上安装Perl 6 ...可能会使情况变得更糟,而不是更好。

给出您同意的...的详细信息。

  

制作程序的[a]变体(使用JS等),以便我的同事可以在浏览器窗口中输入参数并获得结果。

这是imo的自然选择。

(请注意,我在引用语中省略了“在线”。如果您的同事能够通过内部网络查看您的计算机,那么您仍然可以使用JS / Web解决方案,但可以使用非公开的解决方案-不在线。基本上可以使用相同的解决方案,但使用的服务器管道略有不同。)

另一种选择是接受结构化电子邮件。在适当的地方有更多内容。

  

我更喜欢使用Perl 6 ...

在Web解决方案中使用除JS之外的其他语言的代码的最常见方式是在解决方案的“前端”中仍然使用html等(通常包括JS),然后包含正在运行的代码调用在服务器上作为“后端”。

(另一种方法是转换为JS。理论上,您可以通过an experimental nqp backend将Perl 6转换为JS。我认为这是一个令人兴奋的进展,但我怀疑它在不久的将来会很慢而且很有限。 )

(本节的最后一点。如果相反,由于您不想学习或处理混合服务器而最终将Perl 6转换为JS解决方案,那么您将使用Perl 6作为一种原型语言。这可能是使用一种语言的合法方法,但本答案的其余部分假定您将引入服务器。)

服务器的介绍和管理

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

这听起来很简单,在某些方面听起来很简单,但在其他方面却并非如此。如果有人关闭电源怎么办?还是没有支付互联网账单?还是软件泄漏内存导致系统定期出现故障?还是黑客攻击并进入?

除非使用该服务的用户已经可以通过本地网络查看服务器计算机,而且即使这样,服务器引入解决方案的一种现代方法是购买在线服务器程序包(通常是一个基于virtualization的代码)。 (考虑到一个月能赚到几美元)。假设一个好的服务提供商,这可以有效地保证它是一台运行良好的服务器,除非它被黑客入侵或以其他方式损坏,否则通常可以保持运行,连接和服务。如果后者发生,将会及时通知您。 “零成本”替代方案是使您的桌面也成为服务器。这意味着您有责任保持桌面正常运行,保持连接状态。

管理服务器的现代方法是在服务器顶部使用Docker或类似名称。这有效地保证了如果运行良好的服务器被黑或以其他方式损坏,您几乎可以立即解决问题。它还使您可以轻松地开发和测试本地服务器,从而确保与部署的生产服务器相同。最棒的也许是,在桌面上安装Docker或在购买的服务器上使用Docker,然后放入已经准备好的Docker文件,这意味着您可以从从未使用过的服务器转变为在单击时可以使用的服务器一些按钮。

那里提供了一系列使用操作系统虚拟化和docker或类似docker的技术来创建按使用付费组合的产品,您只需为服务器使用的时间付费,而不是为服务器可用24 / 7。有很多里里外外。有些人不支持Perl6。据我所知,Amazon AWSGoogle Cloud都支持按使用付费,并允许使用任何编程语言。

构建Web应用程序

此答案的最后几节介绍了从一台最复杂的服务器开始安装服务器后如何使用Perl 6。如果您想直接进入解决方案,请跳至最后一节,关于Cro,如果您要使用网络路线,我建议您这样做。

电子邮件客户端响应者

特别是,如果您不想将钱花在单独的服务器上,为了简化操作,您可以让同事将结构化的电子邮件发送到一个电子邮件地址,该电子邮件地址到达您在台式机上运行的电子邮件客户端,它的响应方式是在桌面上运行Perl 6程序,然后在结果输入时通过电子邮件将其发送回。如果您对此解决方案感兴趣,请发布另一个SO询问。

其余部分将采用网络解决方案。

CGI和手动输入的代码

从网页上调用服务器上运行的代码很简单。

您只需编写一个合适的链接,以单击指向动态程序而非静态html页面的链接。

如果您想收集参数,则只需编写一个表单和一个合适的“提交”按钮,然后这样做即可。

如果已有的网页已经写好表格,那么如果您阅读了诸如How to generate webpages using CGI scripts之类的适当文章,则可以在几分钟内学会如何传递参数,调用Perl 6代码并显示结果。

模块和Bailador

Imo不值得像手工CGI这样低的级别进行操作。这样做有危险,并且有一些模块可以使事情更容易创建和维护,而危险也较小。

这些将显示在"web" at modules.perl6.org下。

Bailador是基本解决方案的明显选择,该解决方案使用“路由”(映射URL到代码)和模板做得不错。

Cro和SPA

如果您有兴趣使用最根本的自然方法来构建现代网站,建议您使用Cro。 Cro利用SPA方法构建简单的Web解决方案变得微不足道。但是,它旨在使用Perl 6内置的功能将其很好地扩展到可以想象到的最复杂的网站,这些网站涉及异步,并发,并行或分布式处理以及您想引入的任何middleware的任何混合。

对于您在OP中建议的如此微不足道的应用程序,Cro SPA可能是过大的,但是它仍然非常简单,选择它的好处不计其数,而且对于您的应用程序而言,imo没有明显的缺点。 (即使它作为Beta产品的正式身份也适用于您的情况imo。它已经是非常可靠的产品,开发人员可以对提出的任何问题迅速做出响应,并且对于那些开发人员以及Perl 6而言,保持整洁,快速对于战略开发都具有战略重要性。 ,值得生产,并且维护良好。)

进行整个设置以便开始使用Cro的最快方法是,如果服务器上尚未安装Docker(或将其用作服务器,则为台式机)可能要安装Docker,然后安装the croservices/cro-http Docker container

学习如何使用Cro交付单个网页的最快方法是遵循Building a Single Page Application with Cro教程。

答案 1 :(得分:6)

一个不错的解决方案是您可以运行Jupyter Notebook服务器,让他们使用https://github.com/bduggan/p6-jupyter-kernel

或者另一个将代码托管在glot.io上,以便他们可以在浏览器https://glot.io/new/perl6中运行它

这些将是我的快速解决方案。如果该程序非常简单并且可以在命令行上运行,那么JVM版本的Rajudo可能会使用--target = jar将其打包,以打包所有内容以在其他装有Java的计算机上运行。

答案 2 :(得分:2)

由于已经实现了一个您似乎很满意的程序,并且该程序已经用Perl 6编写,因此值得尝试Perlito(作为参考,它列在{{ 3}})。

目标是使用Perlito将您的Perl 6源代码一次性转换为JavaScript,该JavaScript当然可以在浏览器中运行。程序的维护工作如下:(1)更新Perl 6源代码; (2)运行Perlito获取JavaScript源代码; (3)将旧的JavaScript源代码替换为新呈现的源代码。

这整个建议是实验性的,我自己还没有做,所以请带一点盐。

最后,还有一个perl6.org compilers page(提到JavaScript到Perl-6)。