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

时间:2012-06-05 01:45:09

标签: performance functional-programming j

披露

这是一个“普遍”的问题,可能没有具体的答案,但意图作为火焰战争。在开始我的项目之前,我真的想要一些信息。

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

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

  • 搜索了Google趋势,但收到了以下回复:“您的条款 - j编程语言 - 没有足够的搜索量来显示图表。”
  • 搜索免费(代码),但未找到使用J
  • 的单个项目
  • 在Sourceforge上搜索,没有找到使用J
  • 的单个项目
  • 搜索了Lambda the Ultimate,并且只找到了倾斜引用APL的following discussion
  • 一般在Google和Bing上进行搜索,未能找到任何使用J的大型项目示例

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

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

提前感谢您的回复。

4 个答案:

答案 0 :(得分:19)

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

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

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

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

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

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

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

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

答案 1 :(得分:12)

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

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

  • IDE:对我来说,大型项目应该与可靠的IDE齐头并进。 J是一个文本编辑器。

  • 库:有许多J库,但J就像它一样,有几种语言存在,它们有更丰富的库和框架。

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

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

答案 2 :(得分:3)

  
    

有人可以告诉我在重要项目中使用J(或任何晦涩的语言)的一些缺点吗?

  

对于担任经理或项目负责人的人来说,为关键任务项目使用更多模糊语言的最大缺点是人员和技能。

  1. 我们如何找到并评估该语言中潜在的团队成员技能和能力?
  2. 如果有人留下需要多长时间才能填补知识空白?
  3. 当我们需要额外的帮助时,我们可以足够快地扩展开发团队吗?
  4. 对于一个重要的项目,我希望那些已经非常有语言经验的人,并且不仅仅是在他们去的时候学习它。

答案 3 :(得分:2)

对我来说,J是一种很好的脚本语言(在支持角色中),特别是对于数学相关的计算。通过文件夹复制(特别是windows环境)部署它是非常独立的,这比ruby或python更有优势。

例如,在nodejs webapp中,可以使用child_process调用jconsole.exe并通过命令行界面传递参数。

整个程序可以在Windows Azure平台上以及本地计算机上部署和运行,无需任何额外安装(即node.exe和jconsole.exe包含在同一文件夹中)。