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)
  • 单一小部件系统(无需担心选择或学习)
  • 保存/恢复功能
  • 使用关键字参数作为标志更方便

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 方便)
  • 数组索引约定“向后”</li>
  • 小阵列性能较慢
  • 没有标准的 GUI 运行/调试工具
  • 支持许多小部件系统(担心选择哪个)
  • 当前缺少相当于 IDL 中的 SAVE/RESTORE 的功能
  • matplotlib 还没有所有 IDL 2-D 绘图功能的等效项(例如,曲面图)
  • 使用用作标志的关键字参数不太方便
  • 绘图:
    • 比较不成熟,还有很大的发展空间
    • 缺少一些绘图类型(例如,表面)
    • 3-d 能力需要 VTK(尽管 matplotlib 有一些基本的 3-d 能力)
4

13 回答 13

11

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

关于许可费。您的大学已经购买了多少个 IDL 版本,以及其中多少个?估计很多...

是的,继续购买新的 IDL 8.x 版本。我听说它的新绘图包允许您在生成绘图后修改部分绘图。哇!这太酷了!

ps IDL 中没有什么不能在 Python 中以更好、更简洁的方式完成。其中的大多数科学工具都是广泛且非常稳定的。在 matplotlib 中绘制各种图我没有任何问题。它的 GUI 工具非常出色且直观,与蹩脚的 IDL“小部件”没有什么不同。

这和我以前大学的情况很像,老教授有点被时间难住了,因为他们拒绝学习编程方面的任何新东西。他们变得没有竞争力并停止做任何重要的工作。

于 2011-10-03T19:05:51.810 回答
6

我是辛辛那提儿童医院的 fMRI 研究员,多年来,这里的放射学研究人员一直使用 IDL 开发图像处理包(称为 CCHIPS)。这是一个非常完善的软件包,多年来已经有很多人扩展了它的实用性。尽管我几乎是 MATLAB 的铁杆用户,因此倾向于使用 SPM 之类的软件包进行 fMRI 图像处理,但我最终还是经常使用 CCHIPS 并编写/编辑一些 IDL 脚本。它不像 MATLAB 那样对我来说“舒适”(毕竟我们都有最喜欢的“空白”!),但它相当容易学习。

我想我的意思是……如果一个编程资源运行良好、建立良好、被许多人很好地使用,并且(最重要的是!)您的组织内仍有人愿意维护/调试/修改/扩展资源,那么就没有必要采取危言耸听的立场,即必须立即更换新的东西。如果您所在的机构中根本没有人愿意再维护一项资源,那可能会引起紧急关注。否则,我建议对你不喜欢的东西再熟悉一点,然后施加温和的压力来介绍你认为更好的选择,并用明确的改变理由来支持它。

于 2009-01-09T18:24:35.710 回答
4

我是一名气候科学家,我每天都使用 IDL。这是一种爱恨交织的关系。但我要在这里为 IDL 辩护,因为我认为你没有为与你合作的科学家们做出转变的充分理由。

该列表中唯一可行的 IDL 替代品是 Python 和全套科学库。即便如此,python 中的许多事情都比 IDL 更难或更冗长。像 C 和 Fortran 这样的语言对于分析数据集或制作一些数字的工具来说太低级了,而且它们缺乏交互式外壳。

大多数科学家都对获得问题的答案感兴趣,IDL、Matlab 和 NCL 等工具旨在帮助我们更快地获得答案。

于 2009-11-09T04:57:16.310 回答
3

要打败你的敌人,你必须学会​​它,但不一定掌握它。

我会采用您最喜欢的语言并将其与 IDL 进行比较和对比。IDL有什么优势?有什么缺点?请您的同事向您展示一些他们最喜欢的用 IDL 编写的代码,并将其与您最喜欢的一些代码片段进行比较。这可能并不全是坏事——毕竟人们正在花大价钱使用它。

试图替换最喜欢的东西可能不是赢得朋友或赢得争论的好方法。如果您断定 IDL 仅提供微弱优势或没有优势,那么请尝试构建从较新的语言(例如 Ruby)到 IDL 的网关,以便人们可以结合使用其中任何一种。您可能正在尝试消除一种根深蒂固的文化,这种文化对 IDL 非常满意,非常感谢,但如果他们采用混合方法并最终用另一种语言替换他们的 IDL,因为另一种语言实际上更优越你会产生积极的影响。

无论如何,我从来都不是范式转变的粉丝,而将时间和金钱浪费在一个工具上以获取另一个工具的意识形态利益是一个糟糕的商业决策。然而,在有意义的情况下,必须逐步淘汰旧的专有技术——尽管分阶段的方法是关键。

于 2008-11-04T04:27:03.850 回答
3

作为博士 天文学专业的学生我大约一年前开始使用 IDL。我也不完全相信这种语言,并且肯定对它是专有的感到非常恼火(但请查看开源变体 GDL: http: //gnudatalanguage.sourceforge.net/)。然而,它是一种非常强大的语言,内置了许多科学家经常使用的工具和功能,例如,它可以开箱即用地进行各种拟合,并具有大量可供使用的图形绘图工具。此外,还有许多基于 IDL 的工具,例如 IDL 天文学用户库 ( http://idlastro.gsfc.nasa.gov/)。因此,虽然在一开始将所有这些工具实现为一种开放语言可能会更好,但恐怕现在有这么多人正在使用并且已经习惯了它。

于 2008-11-05T10:21:58.470 回答
3

如果成本是主要问题,并且您只需要 IDL 语言解释器本身,而不需要花哨的软件包,那么您可能会对 IDL 的免费克隆 Fawlty Language 感到满意。

(链接现在死了!)http://fl.net23.net/

实际上,我已经用这个而不是 IDL 完成了向公众发布的实际工作,没有告诉老板,作为测试,并且成功了,但是我主要运行非 GUI 程序并进行交互式命令行工作。我上次检查时 GUI 小部件不完整。然而,就直接编程而言,Fawlty 远远领先于 GDL。

于 2010-05-23T05:14:20.547 回答
2

我是一名天文学家,使用 IDL 已经很多年了。它有一些非常好的东西——例如,包括字符串数组的数组处理——并且有很多与天文学相关的例程可用。另一方面,作为一种语言,我更喜欢 python。成本是 IDL 许可证的一个问题——即使对于单个用户来说也不便宜。还有其他烦恼。IDL 默认制作的 PostScript 绘图不是很好。每次都指定粗线很烦人,而且字体有点难看。我已经开始使用 matplotlib python 模块,它有很多值得推荐的地方。例如,无需重新绘制绘图即可更改轴标题。我只希望我拥有所有用 python 为 matplotlib 编写的方便的 IDL 天文学库例程。

于 2010-06-11T20:28:47.203 回答
1

好吧,我确实在堆栈上搜索了 IDL,这就是我到达这里的原因!:-)

我已经编程了将近 30 年,并且正在学习 IDL。到目前为止,我承认我并不太喜欢它。然而,它确实具有许多其他语言所没有的一些东西(例如,数学数组运算可以用一个命令完成,而不是循环或其他一些设备)。

正如其他人所说,IDL 的受欢迎程度在某种程度上是文化和根深蒂固的问题。大约 20 年前,我第一次听说 IDL。那时,我觉得 Stallman 有一些不错的想法和一些有用的工具,而 Linus 还没有发布他著名的 comp.os.minix 消息。因此,IDL 在任何具有竞争力的开源项目上都处于领先地位。据我所知,开源社区中还没有任何东西具有竞争力(我知道 GDL,但如果我没记错的话,它落后于 IDL ——我很乐意在这方面得到纠正)。最终,它可能会被取代,但我预计这不会很快发生。

于 2008-12-03T20:45:44.187 回答
1

如果我错了,请纠正我,但你是否应该告诉你的同事“停止浪费他们的时间”在一种语言上,你不知道,但不喜欢,因为它是专有的????

好吧,我认为这有点短视。首先,你应该问你的同事“他们为什么使用 IDL”。我已经断断续续地使用 IDL 大约十五年了,我想他们会告诉你“因为我可以快速完成我必须做的事情”。我用 IDL/C++/LabVIEW/Python/Pascal 编程已经 20 年了,我认为你应该使用最适合这份工作的语言/环境。我不会将 IDL 用于华而不实的用户界面应用程序,但对于千兆字节数据的分析和可视化,它很难被击败。(我当然不会为此使用 Python 或 Ruby!)

关于 IDL 是专有软件。没错(尽管您不需要昂贵的许可证来运行 IDL 应用程序。您可以使用虚拟机来运行应用程序,但您需要昂贵的(真正的)许可证来开发应用程序)。但是,专有性有什么问题?我的车是专有产品(我猜你的也是:-)),我的电视机、电话等也是如此。所以 IDL 是专有的,这意味着你不能更改语言(除了要求 ITTVIS 进行更改),但你甚至不懂语言!所以有什么问题?(顺便说一句,提到了开源版本 GDL,还有其他(开源)替代方案)。你为 C++/Python/Ruby 等做出了多少贡献?

我希望专有论点不会(错误)使用,因为您不喜欢(高)许可费?确实有免费的(阅读:没有钱被转移)C++/Python/Java 编译器,但 ITTVIS 是一家商业公司,想要赚钱。好吧,我是一名专业程序员,虽然我支持开源思想,但我确实喜欢在月底获得报酬(猜猜这笔钱必须从哪里来:-))。(顺便说一句,我不是 ITTVIS 的员工。)

所以,简而言之。如果您认为 IDL 太昂贵,那没关系(但不要使用专有参数)。有替代品,您可以自由选择!但是在你(要求你的同事)转换之前,问问自己这对你的生产力有什么影响!您可能会节省几千美元的许可费,但如果完成一项工作需要 10 倍的时间............

亲切的问候

于 2009-01-02T13:04:27.630 回答
1

我在医学影像研究实验室使用 IDL 已经 8 年了。我还使用 MATLAB、LabVIEW 和 Visual C++。

IDL 成本:编程终端确实需要 IDL 许可证。但是,如果您可以忍受启动画面,您可以在任何终端上的免费“虚拟机”下运行您的 IDL 应用程序。此外,许多其他语言/开发环境的成本与 IDL 一样多(如果您合法使用它们)。在这所大学,Visual Studio 的每个许可证比 IDL 更贵。

IDL/MATLAB 与 Visual C++/etc:您可以在 IDL 中用一天时间编写程序或 GUI 应用程序,而用 C++/Visual C++ 编写需要一周时间——这是我们专业的 Visual C++ 程序员的一句话。IDL 只需要两周的时间来学习,并且有一本很棒的书可以学习。当然,如果添加 Visual GUI,C++ 程序会运行得更快,并且可以使用更多控件。但是,如果您想通过用户界面对算法或应用程序进行原型分析以分析数据,IDL(或 MATLAB)将为您节省大量时间。

IDL vs MATLAB:IDL 比 MATLAB 稍微冗长一些,并且没有用户群或工具箱的数量,但它确实拥有的主要用户论坛非常好,有许多响应专家。过去,IDL GUI 编程接口非常出色,尽管 MATLAB 可能已经赶上了——我仍然更喜欢编写 IDL“小部件”。此外,IDL 的内置功能有时似乎有更多的“内置”功能,这可能会弥补其较小的用户群。一个很好的例子是 convolve 命令:IDL 中的“convol”与 MATLAB 中的“conv”。该命令在 IDL 中是一个较长的单词,但也包含用于规范化结果以及处理无效数据和边缘效应的标志。MATLAB 语法更加优雅简洁,而且它'

相信我:如果您想花更多时间处理数据而不是处理代码,那么学习 IDL 和 MATLAB 等“科学数据”语言是值得的。我不会说一种比另一种更好,但是像这样的语言在实验室中是不可或缺的,尤其是成像实验室。

于 2009-07-22T20:11:29.153 回答
1

当我开始学习 IDL 时,我也有类似的想法——我仍然不喜欢它,但我现在有一些我在 SolarSoft(太阳物理学的软件分发系统......大多数软件都在 IDL 中)。

IDL 擅长处理大型数据立方体和数字图像,如果您了解 Fortran,则相当容易学习。(大多数年长的科学家都是这样做的,我不得不以非 CompE 的工科学生的身份上大学)

问题是——IDL 中有很多代码。将其全部转换为其他语言并对其进行必要测试的成本简直是天文数字。我老板的估计是这需要十几个人年,我们需要了解 IDL、任何新语言和实际科学的人,这样他们才能理解代码的逻辑存在的原因(而不仅仅是一些奇怪的东西语言)。...然后您必须考虑对所有科学家进行再培训。在我们目前的资金水平上,这不会发生。

综上所述,我希望他们的 Regex 引擎使用 PCRE 或至少支持零宽度断言。他们终于做到了,所以我可以将一个字符串传递给 XML 解析器,而不必先将其写入文件,但我仍在等待真正的 SOAP 支持,而不是我的 hack 尝试。我必须解决一些限制,比如没有零元素数组(我使用指向数组的指针,所以我可以留下一个空指针)、命名空间(我用对象伪造它)和缺乏 XPath 支持(当我看到一些奇怪的问题时)在遍历 DOM 树之后,树中元素每翻一番,清理时间就会翻四倍……我不得不将大型记录集作为税分隔符返回,而不是 XML,但希望测试他们的 VOTable 实现是否有相同的问题)

在这一点上,我并不是建议人们停止使用 IDL——但我正在努力让人们停止将他们的数据目录作为 IDL 保存文件存储和分发,因为限制使用 IDL 以外的任何东西读取它们。而且我知道一些努力为科学家提供服务以运行他们的数据准备,希望他们可以摆脱要求科学家拥有 IDL 才能使用数据的要求。

于 2009-07-23T15:19:04.433 回答
1

我是地球科学的博士后,并且广泛使用 IDL 来处理大型数据集。我不得不说它很容易使用(对我和其他许多人来说),如果它为我节省了数百小时调试 c 内存错误的时间,那么它很容易值得支付许可费用(我也有 CS 学位) ,所以我知道“真正的”编程语言)。

听起来您的问题不在于 IDL,而在于文件格式。与其说服您的同事使用不同的语言,不如说服他们使用不同的文件格式。我几乎从未使用过 .sav 文件,我总是使用常见的数据格式,例如 geotiff、HDF、netCDF,甚至适当的简单二进制或 ASCII。这样,我所有的同事都可以使用他们选择的语言来阅读它。

我来到这里寻找有关使用 IDL 和 SOAP 的信息,遗憾的是,上面的评论赢得了 google 竞赛。现在,如果我能找到一些关于它的实际信息就好了:)

于 2009-08-03T19:18:45.903 回答
1

也许这可能对某人有所帮助:GDL 确实处理(读取和写入)IDL .sav 文件。SAVE 和 RESTORE 例程是在免费的 CMSV 库(用 IDL 编写)的帮助下实现的。

此外,GDL 可以构建为 Python 模块——然后也可以使用 Python 中的 .sav 文件。GDL 中的 Python 支持仍然使用 numarray 包,因此它可能不是很方便。

于 2010-02-09T09:56:22.573 回答