Ada中的Web编程?

26

有人在Ada语言上进行严肃的Web开发吗?是否有可用于此类任务的库或框架?我特别感兴趣的是那些免费且开放源代码的。

如果有相关的指引,将不胜感激。

8个回答

16

我非常满意AWS/Templates_Parser、XML/Ada和GNATColl。这三个实用的软件包能够帮助您在Ada语言下完成令人兴奋的事情。

我正在逐步转向Ada(我的业务中有很多使用PHP构建的内部工具),到目前为止,Ada已经成为了一个非常可靠的伙伴。现在,我真的很不喜欢回到PHP。我真正期待的是那一天,所有我的工具都由Ada驱动。

只要做好比“普通”Web语言更多的工作准备,就会获得比PHP更少漏洞、性能更好的最终产品(至少这是我的经验)。

已经有人发布了AWS的链接。以下是GNATColl和XML/Ada的链接: http://libre.adacore.com/libre/tools/gnat-component-collection/ http://libre.adacore.com/libre/tools/xmlada/


我看到了你在c.l.ada上的帖子,很高兴听到有一位企业家在“选择更好的工具”这个论点上付诸实践。不幸的是,目前我还无法获得一个良好的AWS构建:MinGW等等。 - Shark8

15

尝试使用AWS,这是我能找到的唯一合适的解决方案...

http://libre.adacore.com/libre/tools/aws/

但是 -

我仍然建议您学习一种更专门用于Web开发的语言,例如:PHP、asp.net、JSP ...


11

AWS是您如果想要在Ada程序中使用Web服务器或客户端的最佳选择之一,它也可能是目前维护最活跃的开源Ada项目之一,所以我相信有很多人正在使用它。

我自己曾经使用它为基于Windows的服务提供基于Web的配置和监视界面。它非常好用,并且使用起来很容易。

如果您只是想编写cgi脚本,其他人说的没错,有其他专门为此设计的语言。但是,我之前也用Ada编写过,效果非常好。许多脚本语言鼓励编写随着程序扩展而不会很好扩展的程序。 Ada程序通常没有这个问题。

不过,像C和C++这样的语言不会对数组边界进行自动检测,并且非常依赖指针。当暴露在互联网上时,使用它们编写的cgi会成为主要威胁。有些脚本语言也有这个问题。通常,您无法轻松地看到或修复它,因为它隐藏在语言运行时中。特别是当它们本身就是用C或C++编写的时候。因此,除非是非常简单的情况,我实际上鼓励在Web服务器脚本中使用Ada。

如果您正在使用Ada进行脚本编写,但想念脚本语言通常提供的更强大的字符串处理功能,请考虑查看Gnat's Spitbol包。它在Ada中实现了大多数SNOBOL字符串处理功能。如果您想做更复杂的字符串解析,则另一个选择是OpenToken,它允许您在Ada中构建自己的完整词法分析器和解析器。

然而,如果你想要开发一个流畅的复杂网站,最好使用某种内容管理系统(例如:Drupal)。我不知道是否有基于Ada构建的CMS,但大多数CMS用户也不会深入实现语言。理想情况下,你只需将组件连接在一起。


7

之前已为您介绍了AWS,现在您只需要一个框架。我可以推荐使用ada-awa项目。

以下是如何入门的视频:youtube.com


5

4
如果您想使您的烤面包机具备网络功能,可以尝试使用嵌入式Web服务器,例如EWS。甚至不需要在服务器上安装文件系统。

1
-1:我不明白这如何回答问题。 - John Saunders
2
@John,我认为烤面包机只是一个玩笑。EWS是用Ada编写的,因此与问题非常相关。 - Rommudoh

3
关于使用Ada进行重型Web开发的问题,答案取决于您想要做什么。 如果您可以满足于cgi-bin方法,则有一个Ada包将完成工作,并且您可以像任何Web界面一样附加级联样式表。 如果您想处理XML解析,则还可以使用Ada/XML。 在某些情况下,这是有用的,尽管您可能需要考虑XML是否是您所需的内容。 因为用于处理Web界面的Ada过程已编译,所以它的性能应该与C相当。 此外,您可以使用Bounded_Strings包进行字符输入解析,该包可让您测试输入字符字符串不包含不可接受的字符并且不太长。 这两个检查在网站上都很重要,以减少成功的黑客攻击的可能性。
如果您正在将数据库纳入Web设计中,则应查看Ada Web Server(AWS),其中包括与数据库的链接。 对于更重型的工作,您可能需要查看Ada-AWA项目,这是开源的。 如果您正在处理对象关系数据库,则可能还需要考虑PolyORB,它可以处理CORBA和Ada分布式系统附录。 如果您作为单个开发人员工作,则这是相当繁重的工作。 您几乎肯定需要有人来处理日常系统管理工作 - 并且您需要获得Internet服务提供商的许可才能托管网站。
如果您想要一个Web界面,该界面将支持重型数值工作,则应注意Ada具有支持多线程应用程序的任务 - 通常,Ada编译器和链接器将为每个任务分配一个线程。 该语言旨在直接支持线程之间的线程通信,使用会合。 此外,语言设计者必须担心硬调度问题,其中错过从一个线程到另一个线程的通信被视为程序失败。 如果您要进行多代理通信,则可能需要获取UML设计工具,该工具将允许您使用同步图来设计这些类型的程序,因为理解这种计算方式与顺序编程非常不同。
请注意,Ada是为嵌入式编程而设计的,这意味着它已经针对存在许多计算机的环境进行了设计,每台计算机都可以以点对点的方式与其他计算机通信。 它最初由美国国防部使用,但也被用于控制飞机翼和其他表面的航空电子软件,以及汽车中的等效系统。 波音777航空电子软件是用Ada编写的。 我记得戴姆勒 - 克莱斯勒使用了Ada - 指出当前的汽车拥有大约80个嵌入式计算机。 软件开发成本可能约为新车当前成本的20%。

只是一点小注...除了777之外,欧洲制造的Tornado和Typhoon军用飞机以及它们相关的地面设备上的许多软件都是用Ada编写的。 - Carl H

1

一般来说,Ada语言最严肃的应用出现在国防承包商圈子里,而不是Web 2.0群体中。

有更好的语言可以用于Web开发,但我在谷歌上没有找到任何预构建的Ada Web开发库或框架,我的同事们也对此一无所知。

话虽如此,如果你想使用Ada工具解决问题,你可能可以构建一些东西来编译HTML代码并将其移动到服务器的正确文件夹中。或者,通过Apache进行一些高级的即时编译HTML返回...虽然痛苦,但我认为这是可行的。


2
我想这取决于你所说的“严肃”是什么意思。如果说引导导弹比引导HTTP请求到LOLcat图片更为严肃,那我想我会同意。然而,实际上有很多人在使用Ada进行Web开发。如果你的同事从未听说过AWS,也许他们需要多出去走走了?这是一个非常广泛使用的项目。 - T.E.D.
1
意思是有最多资金支持的项目。大公司、大项目,不在学术界。庞大的代码库。实际交付的产品。生命/飞行/空间关键软件。你会认为最重要的用户是国防部/国防相关(考虑到国防部长期要求使用Ada语言,直到几年前才开始试图在国防领域中禁止它)吗?我的建议是用正确的工具做正确的工作。 - Caladain
1
@Caladain - 那是在 mandate 时代的情况。现在,我不太确定。我同意你的观点,即 Ada 最好的领域肯定是在需要软件具有强大和可靠性的市场中(例如:数千万美元和/或生命处于危险之中)。然而,我认为 Sony 最近的经验表明,今天有许多基于 Web 的应用程序也适用于这种情况。 - T.E.D.
1
@T.E.D,@Caladain - 我不同意你们使用PHP的观点...我被安排在一个大量使用PHP(和WordPress)的项目上,我无法告诉你有多少次完整的情况覆盖[假设实际枚举]会确保客户请求的更改并且已经实施的更改将在每个更改这些值的实例中被标记,可以使我们免受一些错误行为的影响。{例如:向竞标系统添加“已撤回”状态指示器。}此外,我想知道PHP是否适用于意大利面辅助编程。 - Shark8
1
我和Shark8一样,各个领域都做过一些编程工作,而Ada语言绝对是开发任何复杂性项目的更好选择。它为建模现实问题提供了更好的机制(例如尝试在每种语言中将时间值乘以距离值 - 只有一种语言不会让你轻易得逞)。此外,Ada没有笨重的解释器。虽然它缺少很多易用性钩子,但像AWS这样的库似乎为许多最困难的Web相关问题提供了非常引人注目的抽象。 - weberc2
显示剩余6条评论

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