【问题标题】:What do I need to know to create a server script interpreter? [closed]创建服务器脚本解释器需要了解什么? [关闭]
【发布时间】:2013-07-04 14:16:41
【问题描述】:

我有兴趣为网站脚本开发一个新的对象 pascal 解释器建模。 我们有 PHP、Pearl、Java、Javabeans……但没有 Pascal 作为 Web 开发人员的选择。

由于 Delphi 仅适用于基于 Windows 的服务器...

我想做这样的事情:

<input name="ClientName" value="<?pas write(ClintObj.Name); ?>">

<input name="ClientName" value="<?pas @ClintObj.GetName; ?>">

不只是作为模板,而且就像 PHP,我可以将其与 MVC 框架一起使用,甚至可以创建一个:

<?pas
    System.Writeln('<html><head>...');
?>

我应该从哪里开始?

或者它已经完成但我找不到它? (适用于 Linux)

【问题讨论】:

标签: delphi compiler-construction pascal server-side-scripting


【解决方案1】:

两种现有产品:

氧气

您可以查看Oxygene,以前称为 Delphi Prism,以前称为 RemObjects Chrome。

他们找到了一种将 Pascal 风格的语言编译为 Java 的方法。不是将 Pascal 代码转换为 Java 代码,而是实际将其编译为在 Java 运行时引擎中运行的字节码。除此之外,它们还可以编译到 .NET 运行时。

我不知道您是否可以将 Oxygene 用于您的目的,但至少他们的产品可能会给您一些灵感和一些关于自己构建类似东西的可能性和困难的见解。

PascalScript

也许您可以使用PascalScript,也可以使用 RemObjects。它是一个脚本解释器。因此,您可以将其嵌入到服务器应用程序中。例如,如果您创建一个嵌入 PascalScript 的 ISAPI 应用程序,您需要做的就是向脚本公开一些“写入”方法以允许其写入输出。应用程序需要做的就是将该输出输出到 ISS,然后您的基础服务器端 Pascal 脚本就完成了。之后,您可以向脚本公开更多便利功能,使其更有用。

PascalScript 可以在 Delphi 和 FreePascal 中使用,所以也许你也可以让它在 Linux 中运行。

【讨论】:

  • 如何帮助生成网站脚本? Java 不是 JavaScript。
  • 这是关于服务器端脚本的。不必是Javascript。只是说你可以使用这样的技术。您还可以从头开始构建脚本引擎。或者你也可以通过 RemObjects 使用PascalScript。不,我不隶属。 :D
  • 对网站脚本的要求非常具体,因为一个 HTML 页面可能有几十个小脚本部分,用于所有不同的页面元素,并且使用 Pascal 快速地通过逻辑和表示的混合来完成这一切变得脆弱。现实世界的 Web 框架 OTOH 专为解决这个问题而设计,并支持灵活且易于理解的网页组合。
  • 如果您决定允许混合 HTML 和脚本,就是这样,但当然这是一个设计决定。当然,您可以选择特定的开始和结束标记来区分 HTML 和语言,就像 ASP 和 PHP 一样。我看不出使用 Pascal 会变得更加脆弱。我在自己编写此代码时确实看到了一些障碍,因为构建解析器和词法分析器非常复杂,但这更多是关于编写一般的编程语言而不是网站脚本的特定障碍。
  • Goleztrol:Oxygene 是如何编写脚本的?是的,它是服务器端的,但运行的是字节码而不是源代码。
【解决方案2】:

您将在模板中嵌入一种语言的脚本版本与使用该语言进行一般 Web 开发。

虽然 Pascal 并没有真正用作模板语言,但进行 Web 开发是完全可能的,例如http://brookframework.org/ 和几个 Delphi 组件套件。

一些 Delphi 选项也支持 Apache,过去也支持 Kylix。我用过http://www.href.com的webhub一段时间。

【讨论】:

  • 我会试试这个布鲁克 :)
【解决方案3】:

写出这样的解释器可不是小菜一碟:

  • 您的脚本文件需要被解析,包含的 Pascal 代码编译/检查语法错误
  • 由于此编译阶段将是一项消耗 CPU 的任务,因此必须缓存生成的目标代码以获得更好的性能
  • 也许你不想在服务器上使用/安装 FPC 或 Delphi 编译器,那么你的语言将被限制在你的编译器可以支持的范围内
  • 如果不同的脚本部分需要交换信息或访问全局数据(如数据库),则生成的代码需要访问“共享数据”

除非您的应用程序是无状态的,否则这也是一个关键的功能要求:

  • 网站的不同用户需要各自的数据(状态),因此您的代码需要能够感知会话(有状态)

哦,一个小问题:

  • 应用程序不应为恶意客户端暴露任何漏洞,请参阅 OWASP

所以我想这将是一个长周末 ;-)

【讨论】:

  • 婴儿步。您可以从仅支持单个文件开始,PHP 0.1 可能也不支持 APC 缓存。第一个版本不必很快,也不必有很多功能。数据很少共享,在 PHP 中也是如此。两个单独的脚本无权访问彼此的数据库连接。 HTTP 根据定义是无状态的,会话只是 PHP 中的一个技巧。此外,一旦您的解释器启动并运行,使用会话 cookie 构建状态支持将是微不足道的。 :D 如果你可以在服务器上保存一个 pas 文件并运行它,那就太酷了。 :)
  • 还有一个很酷的。我希望你会成功,尽管道路会很长很滑。 ;)
【解决方案4】:

不要忘记免费的DelphiWebScript (DWS)。

虽然started as a Delphi-like WebScript language,它是一种通用的类似Delphi的语言,可以用作脚本,而also has a JIT compiler(虽然没有它,性能已经很好了)。

主项目在 Delphi 中编译(因此它仅适用于 Windows),但有一个 FreePascal DelphiWebScript initiative 使其也可以在 Linux 上运行。

有多个演示 Web 服务器项目可供选择,因此您可以托管自己的 DWS 脚本,例如 WebServer projectbased on http.sys version 2,然后有 Indy basedSynopse based 的。

开发工具Smart Mobile Studiousing DWS,用于将表单和基于 Pascal 的源代码编译成 HTML5 和 JavaScript,然后从 Web 服务器提供它以在任何与 HTML5/JavaScript 兼容的浏览器(包括移动浏览器)中运行。

所以 DWS、演示和围绕它的生态系统有很大的力量(:

【讨论】:

  • 我会试试这条短信并回复你!
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多