交互式数据语言,IDL:有人关心吗?

14

有人使用一种叫作交互式数据语言(IDL)的编程语言吗?它在科学家中很受欢迎。我认为它是一种糟糕的语言,因为它是专有的(每个运行它的终端都需要购买昂贵的许可证),而且它的支持很少(现在在堆栈上搜索IDL这种语言试试)。我正在努力说服我的同事停止使用它,学习C/C++/Python/Fortran/Java/Ruby。有人知道或关心IDL吗?你对它有什么看法?我应该告诉我的同事现在停止浪费时间吗?我该如何说服他们?

编辑:人们得到了这样一个印象,即我不知道或不使用IDL。此外,我说IDL的支持很少,在某种意义上是正确的,因此我必须澄清科学库确实非常大。我一直在使用IDL,但这正是问题所在:我只是因为同事使用它才使用IDL。IDL使用一种名为.sav的文件格式,只能在IDL中打开。因此,我必须使用IDL来处理这些数据并将数据传输回同事,但我知道我在另一种语言中会更有效率。这就像有人在电子邮件附件中发送给你一个Microsoft Word文件,如果你不知道这有多么错误,那么你可能写的是太多的文字而不是足够的代码,并且你买了Microsoft Word。

编辑:作为IDL的替代方案,Python很受欢迎。以下是AstroBetter提供的IDL的优点(以及缺点)列表:

IDL的优点

  • 成熟的数值和天文学库可用
  • 广泛的天文用户群体
  • 数值方面与语言本身良好集成
  • 许多有经验的本地用户
  • 对于小数组更快
  • 安装更容易
  • 好的、统一的文档
  • 标准GUI运行/调试工具(IDLDE)
  • 单个窗口小部件系统(无需担心选择或学习哪一个)
  • SAVE/RESTORE功能
  • 使用关键字参数作为标志更方便

IDL的缺点

  • 适用范围较窄,不适合一般编程
  • 大数组速度较慢
  • 数组功能不够强大
  • 表格支持差
  • 使用C或Fortran扩展的能力有限,这些扩展很难分发和支持
  • 昂贵,有时会出现与其他没有或无法购买许可证的人协作的问题。
  • 闭源(只有RSI可以修复错误)
  • 与IRAF任务集成非常笨拙
  • 内存管理更麻烦
  • 单个窗口小部件系统(如果在另一个框架内工作,则无用)
  • 绘图:
    • 支持符号和数学文本的支持不方便
    • 许多字体系统,可移植性问题(v5.1在一定程度上缓解了这个问题)
    • 不够灵活或可扩展
    • 绘图窗口本质上不是交互式的(例如,平移和缩放)

Python的优点

  • 非常通用且强大的编程语言,易于学习。具有强大但可选的面向对象编程支持
  • 用户和开发者社区非常庞大,库非常广泛
  • 可通过C、C++或Fortran进行扩展,可提供可移植的分发机制
  • 免费;非限制性许可证;开源
  • 正在成为天文学的标准脚本语言
  • 与IRAF任务一起使用很容易
  • STScI应用程序工作的基础
  • 更通用的数组功能
  • 对于大型数组更快,对于内存映射提供更好的支持
  • 有许多书籍和在线文档资源(针对语言及其库)
  • 更好的表格结构支持
  • 绘图
    • 框架(matplotlib)更具可扩展性和普遍性
    • 更好的字体支持和可移植性(只有一种方法)
    • 可在许多窗口框架中使用(GTK、Tk、WX、Qt…)
    • 独立于所使用的框架的标准绘图功能
    • 图形可嵌入其他GUI中
    • 更强大的图像处理(多个同时LUTS,可选的重采样/缩放,alpha混合等)
  • 支持许多小部件系统
  • 对正在开发Python功能的能力具有很强的本地影响力

Python的缺点

  • 需要单独安装更多的项目
  • 在天文学界不太受欢迎(但支持明显增长)
  • 科学库不够成熟:
    • 文档不够完整,不够统一
    • 在天文库和实用程序中不够深入
    • 并非所有IDL数值库函数都有相应的Python功能
  • 某些数字构造与语言不太一致(或比IDL略不方便)
  • 数组索引约定“倒置”
  • 小数组性能较慢
  • 没有标准的GUI运行/调试工具
  • 支持许多小部件系统(对于要选择哪个感到不安)
  • 目前缺少与IDL中SAVE / RESTORE等效的功能
  • matplotlib尚未具备所有IDL 2-D绘图功能的等效物(例如曲面绘图)
  • 使用关键字参数作为标志不太方便
  • 绘图:
    • 相对不够成熟,仍然有很多开发工作进行中
    • 缺少某些绘图类型(例如曲面)
    • 3-d功能需要VTK(尽管matplotlib具有基本的3-d功能)

我学习编程是通过使用IDL。我仍然在使用IDL。IDL具有一些在IDL中最简单工作的包。尽管如此,我仍然不喜欢IDL。实际上,正是通过使用IDL,我才发现我不喜欢它。 - Alex
为了应对第一个Python问题,您可能想尝试Enthought Python Distribution(http://www.enthought.com/products/epd.php)。恐怕我没有任何第一手经验。 - GreenMatt
数组索引惯例“反向”。这是什么意思? - eric
13个回答

11

这里有很多IDL迷!我也是一名天文学家,广泛使用过IDL和Python。我想说的是,IDL之所以能够生存至今,是因为同行天文学家的懒惰,他们不能或者不想学习新的更好的编程语言。我的大多数同事除了Fortran或IDL以外没有使用过其他任何东西。对他们来说,整个世界上只有IDL。顺便说一句,许多年轻的天文学生也都是关于IDL的,甚至不想检查Fortran,更不用说Python或C/C++。那些是给程序员和数学家用的语言,而不是给天文学家用的。

关于许可费用。你们大学购买过多少个IDL版本?我猜很多吧...

是啊,去买那个新的IDL 8.x版本吧。我听说它的新绘图包允许您在生成后修改图的部分。哇!那真的很酷!

顺便说一句,在IDL中没有任何东西不能以更好、更清晰的方式在Python中完成。它的大多数科学工具都是广泛和非常稳定的。我在matplotlib中绘制各种图形都没有遇到任何问题。其GUI工具非常出色和直观,不像糟糕的IDL“小部件”。

这非常类似于我以前的大学,老教授们被时间打败了,因为他们拒绝学习任何新的编程知识。他们变得不具竞争力,停止了做任何重要的工作。


6
我是辛辛那提儿童医院的一名fMRI研究者,多年来,这里的放射学研究人员一直使用IDL开发图像处理软件包(称为CCHIPS)。它是一个非常成熟的软件包,多年来有很多人扩展了它的功能。虽然我基本上是一个MATLAB用户,因此更倾向于使用SPM等软件包进行fMRI图像处理,但我仍然经常使用CCHIPS并编写/编辑一些IDL脚本。相对于MATLAB来说,它并不那么“舒适”,但学习起来相当容易。
我的观点是这样的……如果一个编程资源工作良好、已经很成熟,被许多人使用,并且(最重要的是!)你的组织内仍有人愿意维护/调试/修改/扩展该资源,那么就没有必要采取紧张的立场立即更换。如果你的机构中再没有人愿意维护某个资源,那可能会引起紧急关注。否则,我建议更加熟悉你不喜欢的东西,然后施加温和的压力引入你认为更好的选项,并以清晰的理由支持变革。

谢谢你的输入。我知道它经常在医学领域中使用,但直到现在我还从没听说过一个具体的例子。 - Alex

4

我是一名气候科学家,每天都使用IDL。这是一种爱恨交织的感觉。但我要为IDL辩护,因为我认为你没有为你合作的科学家转换到其他工具提出充分的理由。

在列表中,IDL唯一可行的替代品是Python加上完整的科学库。即使如此,许多事情在Python中比在IDL中更难或更冗长。像C和Fortran这样的语言对于分析数据集或制作图表来说太底层了,而且它们缺乏交互式shell。

大多数科学家都希望得到问题的答案,而IDL、Matlab和NCL等工具专门设计用于帮助我们更快地获得答案。


3
如果费用是主要问题,而且您只需要IDL语言解释器本身,而不需要高级包,则可以考虑使用Fawlty Language,这是IDL的免费克隆版本。
(链接已失效!){{link1:http://fl.net23.net/}}
我实际上已经使用它完成了向公众发布的真正工作,而不是使用IDL,并在没有告诉老板的情况下进行了测试并成功了,但我大多数时间运行非GUI程序并进行交互式命令行工作。 我最后一次检查时GUI小部件还不完整。 但是,从编程角度来看,Fawlty远超过GDL。

3

为了打败你的敌人,你必须学会它,但不一定要精通。

我建议你选择自己喜欢的语言,将其与IDL进行比较,并进行对比分析。IDL有哪些优点?有哪些缺点?请向同事展示他们最喜欢的用IDL编写的代码,并将其与你最喜欢的代码片段进行比较。这可能并不全是坏事——毕竟有很多人付出了大量资金并使用它。

试图替换一个喜欢的东西可能不是赢得朋友或争论的好方法。如果你得出结论认为IDL只提供了少量或没有优势,那么尝试从一种新的语言(如Ruby)构建一个网关到IDL,以便人们可以同时使用两种语言。你可能正在试图消除一种根深蒂固、非常喜欢IDL的文化,但如果他们采取混合方法并最终用另一种语言替换他们的IDL,因为其他语言实际上更优秀,那么你就会产生积极的影响。

无论如何,我从未是范式转变的粉丝,为了另一个意识形态的好处而失去在一种工具上投入的时间和金钱是一个糟糕的商业决策。然而,当有必要这样做时,旧的专有技术必须被逐步淘汰-尽管采用分阶段方法是关键。

1
十二年后...今晚之前我真的从未听说过IDL。范式显然已经转变了。 - eric

3
作为一名天文学博士生,我大约一年前开始使用IDL。我并不完全信任这种语言,而且很烦恼它是专有的(但可以看看开源变体GDL:http://gnudatalanguage.sourceforge.net/)。尽管如此,它是一种非常强大的语言,内置了许多科学家经常使用的工具和函数,例如它可以直接进行各种拟合,并且内置了大量图形绘制工具可供使用。此外,还有许多建立在IDL之上的工具,如IDL天文用户库(http://idlastro.gsfc.nasa.gov/)。因此,虽然最初将所有这些工具实现到一个开放的语言中可能会更好,但现在似乎已经无法回头了,因为有如此多的人正在使用它并且已经习惯了它。

1
我也是一名天文学博士生(欢迎访问我的主页给我留言,我很想听听其他编程热爱者的研究经历)。问题在于那些编程人员对于使用易用而不是正确的工具感到冷漠。 - Alex

2

我是一名天文学家,使用IDL已经很多年了。其中有些功能非常好用,比如处理数组(包括字符串数组)的能力,以及提供了相当一部分与天文学相关的例程。但作为一门语言,我更喜欢Python。IDl许可证的费用问题也是个麻烦——即使对于单用户而言也不便宜。另外还有其他让人不爽的地方。默认情况下IDL生成的PostScript图表效果并不好。每次都需要指定粗线条很烦人,而且字体有点难看。我已经开始使用matplotlib模块,它有很多值得推荐的优点。例如,不需要重新制作图表就可以更改坐标轴标题。我只希望能够在matplotlib中编写出所有那些方便的IDL天文库例程。


我参加了2010年AGU秋季会议上的IDL用户会议 - 他们在IDL 8中推出了一个新的图形包,允许您在生成后修改绘图的部分。 - Joe

1
也许这可以帮助某些人:GDL 可以处理(读取和写入)IDL 的 .sav 文件。SAVE 和 RESTORE 例程是通过免费的 CMSV 库(用 IDL 编写)实现的。
此外,GDL 还可以构建为 Python 模块-然后也可以从 Python 使用 .sav 文件。 GDL 中的 Python 支持仍使用 numarray 包,因此可能不太方便。

1

嗯,我在Stack上搜索了IDL,然后就来到这里了!:-)

我已经编程近30年了,现在才开始学习IDL。到目前为止,我承认我并不是特别喜欢它。然而,它确实有一些许多其他语言没有的东西(例如,数学数组操作可以用单个命令完成,而不是使用循环或其他设备)。

正如其他人所说,IDL的流行在某种程度上是文化和根深蒂固的问题。我大约20年前第一次听说IDL。当时,在我看来,Stallman有一些好的想法和一些有用的工具,而Linus还没有发布他著名的comp.os.minix消息。因此,IDL在任何开源竞争对手之前都有一个良好的起点;据我所知,开源社区中没有任何竞争对手(我知道GDL,但如果我没记错的话,它远远落后于IDL - 我很乐意纠正这一点)。最终,它可能会被取代,但我不指望这会很快发生。


1
它远远落后。 - ninegrid

1

如果我说错了,请纠正我,你是在问是否应该告诉你的同事“停止浪费时间”在一种你不喜欢的专有语言上吗?

嗯,我认为这有点短视。首先,你应该问问你的同事“为什么要使用IDL”。我已经断断续续地使用IDL约15年了,我想他们会告诉你“因为我可以快速完成我需要做的事情”。我已经使用IDL/C++/LabVIEW/Python/Pascal编程20年了,我认为你应该使用最适合工作的语言/环境。我不会使用IDL来制作华丽的用户界面应用程序,但对于分析和可视化千兆字节的数据,它很难被超越。(我肯定不会使用Python或Ruby!)

关于IDL是专有软件的问题。这是真的(虽然你不需要昂贵的许可证来运行IDL应用程序,你可以使用虚拟机来运行应用程序,但是你需要一个昂贵的许可证才能开发应用程序)。但是,专有有什么问题吗?我的汽车是专有产品(我猜你的也是:-)),我的电视,电话等等也是。所以IDL是专有的,这意味着你不能改变语言(除非向ITTVIS请求更改),但是你甚至不知道语言!所以问题在哪里?(顺便说一下,提到了开源版本GDL和其他开源替代品)。你对C++/Python/Ruby等做出了多少贡献?
我希望专有的争论不会被滥用,因为你不喜欢(高昂的)许可费用?确实,有免费的(读作:没有资金转移)C++/Python/Java编译器,但ITTVIS是一家商业公司,想要赚钱。好吧,我是一名专业程序员,虽然我支持开放源代码的思想,但我喜欢每个月的工资(猜猜那些钱从哪儿来:-))。 (顺便说一下,我不是ITTVIS的雇员。)
所以,简而言之。如果您认为IDL太贵了,那没关系(但不要使用专有论点)。有替代方案,您可以自由选择!但在您(请您的同事)切换之前,请问问自己对您的生产力会有什么后果!您可能会在许可费上节省几千美元,但如果完成工作需要10倍的时间......

此致敬礼


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