使用J编程语言编写大型项目

Shr*_*roy 22 performance functional-programming j

泄露

这是一个"普遍"的问题,也许没有具体的答案,但它并不打算作为一场火焰战争.在开始我的项目之前,我真的想要一些信息.

我必须实现一个特别的项目,它将真正受益于J提供的数据结构和抽象.这是一个大型项目,旨在作为大型(软实时)Web应用程序的核心组件.所以表现非常重要.

我一直试图在大型商业或开源项目中找到有关J的使用的一些信息,但我无法找到任何有关我的决定继续前进的信息.我有:

  • 搜索了Google趋势,但收到了以下回复:"您的条款 - j编程语言 - 没有足够的搜索量来显示图表."
  • 搜索免费(代码),并没有找到使用J的单个项目
  • 在Sourceforge上搜索,没有找到使用J的单个项目
  • 搜索了Lambda the Ultimate,并且只发现了以下倾向于引用APL的讨论
  • 通常在Google和Bing上进行搜索,但未能找到使用J的部署中的大型项目的任何示例

我在为项目使用J时会犯一个错误吗?它似乎拥有我想要的一切 - 特别是在数据结构,抽象和简洁方面.当然,我可以花时间在F#,C#或C++中模拟所有这些属性,但J已经拥有它们,所以...

有人可以告诉我在重要项目中使用J(或任何晦涩的语言)的一些缺点吗?它的表现不够好吗?它没有图书馆吗?还有什么我应该知道的吗?

在此先感谢您的回复.

kal*_*dic 19

我认为J适用于大型重要项目的关键用途.但我也认为J对于这样一个项目来说是一个非常冒险的选择(阅读:高风险).

我知道使用J作为主要软件系统的核心技术的两家规模较大的公司是Cognos和Luen Thai.(Cognos已被IBM收购.)对这些系统的一些讨论,或者至少涉及它们的一些经验,已经出现在J Chat论坛中.然而,那里的信息并不多.

可能还有其他大型软件系统依赖于J,但我还没有发现它们(我多年来一直在关注它.)

Dmitri Chubarov认为找到适当技能的开发人员的困难可能是一个重大问题.此外,我认为对于那些尚未掌握数组语言技能的人来说,很难估计他们需要多少努力才能在J中编程.我个人认为从J中学习J是特别重要的.快乐兴奋的态度,这种态度可能会受到软件项目生产压力的威胁.(可能在工作中学习J并且喜欢它,但是程序员因为"必须"学习它而讨厌它的风险不应该被忽略.)

另一个可能的困难是整合工作.J有各种各样的库,并且已经连接到各种其他软件系统,但与更流行的语言所取得的成果形成鲜明对比.我的经验表明,J接口非常容易,我将其归结为如何与外界合作.(这包括DLL,内存映射文件,套接字和文本文件脚本.)然而,在一个大型项目中,当您连接到周围的支持软件时,您将比平时更频繁地进行创新.

在我看来,最重要的因素是我是否有足够的团队来承担核心产品.实际上,这可能是一个比大多数"大型"项目所依赖的小得多的团队.阵列语言与该领域的典型团队相比显着更小,我认为这是优势之一.如果你已经安排得到你需要的任何同事的参与,那就太好了.如果没有,在你做之前不要承诺这样的项目.

接下来最重要的事情是了解您期望获得的作为J的主要好处,以及在项目进行过程中检查您是否获得这些好处的方法.我不是建议如何做到这一点的合适人选,但我确信你不想投入资金而不追踪这样的高风险选择是否能够带来预期的回报.

Paul Graham写道,某些语言被视为秘密优势.J肯定是这样一种语言.然而,仅仅使用J不足以确保它具有他想到的那种优势.你所描述的J的吸引人的方面表明,这样的优势可能对你有用.如果你确实选择依赖它,那么让所有主要参与者都有一个强大而清醒的理解为什么选择这种语言来完成这项工作是至关重要的.


MPe*_*ier 12

尽管已经接受了答案,我仍在回答这个问题.

  • 可移植性:我负责维护一个用J构建的大型代码库,其中大部分是不可移植的(或者真的很危险)到J6,所以我被困在J5中.J并不意味着非常向后兼容.实际上,大多数版本引入了重大变化.版本7使用Java作为其前端,因此使用Windows Driver(wd)的接口和所有内容都不起作用.版本8承诺为其前端提供QT ,因此您的新Java接口很可能不会被移植.公平的警告.

  • IDE:对我来说,大型项目应该与可靠的IDE同时进行.J是一个文本编辑器.

  • 库:有许多J库,但J就像它所知的那样,存在几种具有更丰富的库和框架的语言.

  • 代码结构:这完全取决于你,实际上并不是反对J. J的观点,可以像任何其他语言一样清楚或模糊地编写.标准编程实践适用,并且应始终尽可能明确地记录和描述.如果你发现某组"被删节的咒骂词"比另一组效果更好,那么这就是J的两倍.

  • 最后,如果您只需要J来实现其某些功能,则可以将J用作组件.遗憾的是,.NET集成在J7中已被释放(并且在J6中并不是100%兼容,特别是在其64位版本中),但是有一些方法可以让它与外部世界进行通信.例如,KDB基于K,J的疏远兄弟,并且基本上包装映射文件以便快速访问,J设施也是如此.

  • 非常感谢您的回复.我非常接近我必须开始编写代码的地方.到目前为止,我在J和F#中进行了或多或少的并行单元测试.这样,如果其中一种语言最终在完成项目时太麻烦,我总是可以回到另一种语言.(我很喜欢这两个:F#的表现力和J的"神经质"都有它们的吸引力.) (2认同)
  • 毫无疑问,.NET集成已经放弃了.我一直认为J最适合作为嵌入式语言,即它应该作为带有可选CLI前端的库分发.然后,你可以使用J最好的J,以及最好的宿主语言. (2认同)