簡體   English   中英

為科學代碼挑選前端/口譯員

[英]Picking a front-end/interpreter for a scientific code

我在過去幾年中開發的仿真工具是用C ++編寫的,目前有一個tcl解釋的前端。 編寫它可以在交互式shell中運行,也可以通過傳遞輸入文件。 無論哪種方式,輸入文件都是用tcl編寫的(我添加了許多其他特定於仿真的命令)。 這允許非常強大的輸入文件(例如,當運行monte-carlo sims時,隨機分布可以直接在輸入文件中編程為tcl過程)。

不幸的是,我發現tcl解釋器與現代解釋語言提供的內容相比變得有限,而且它的語法似乎有些神秘。 由於計算引擎被編寫為具有c兼容API的庫,因此編寫替代前端應該很簡單,而我正在考慮轉移到新的解釋器,但是我有一點時間選擇(主要是因為我沒有很多解釋語言的經驗)。 我開始探索的選項如下:

保留tcl:
優點:
- 無需更改現有代碼。
- 現有輸入文件保持不變。 (雖然我可能會保留tcl前端作為選項)
- 成熟的語言,有很多社區支持。
缺點:
- 感覺受語言語法的限制。
- 從用戶那里獲得有關學習tcl困難的投訴。

蟒蛇:
優點:
- 現代翻譯,已知非常有效。
- 龐大,活躍的社區。
- 眾所周知的科學和數學模塊,如scipy。
- 常用於學術科學/工程界(我的代碼的典型用戶)
缺點:
- 我從來沒有用它,因此需要時間來學習這門語言(這也是一個專業人士,因為我已經有一段時間學習python了)
- 嚴格格式化輸入文件(縮進等)

Matlab的:
優點:
- 非常強大和廣泛使用的數學工具
- 強大的內置可視化/繪圖功能。
- 可擴展,通過社區提交的代碼,以及商業工具箱。
- 科學/工程學院的許多人都熟悉並熟悉matlab。
缺點:
- 不能作為可執行文件分發 - 需要是一個附加組件/工具箱。
- 需要(?)matlab編譯器(這是pricy)。
- 需要Matlab,這也很昂貴。

這些優點和缺點是我能夠提出的,盡管我對解釋語言的總體經驗很少。 我很想聽到我在這里提出的解釋器的任何想法,如果列出的這些優點/缺點是合法的,以及我沒有想過的任何其他解釋器(例如,php是否適合這樣的事情?lua ?)。 在代碼中嵌入解釋器的第一手經驗絕對是一個優勢!

我是預先發布的強大的Tcl / Tk支持者,直到我用它做了一個大的項目,發現它是多么難以維護。 不幸的是,由於Tcl中的原型非常簡單,所以最終會有“一次性”腳本占用自己的生命。

在過去的幾個月中采用了Python,我發現它是Tcl承諾的所有內容,還有更多。 正如許多Python退伍軍人可以告訴你的那樣,源縮進最多只是第一個小時的麻煩,然后它似乎不是一個障礙,但肯定有幫助。 順便提一下,Tcl的作者John Ousterhout因為寫了一種迫使Tcl編碼器使用One True Brace Style的語言而受到贊揚和反對(我是1TBS所以我很好)。

Python沒有很好處理的唯一Tcl構造是任意eval "${prefix}${command} arg"構造,不管怎樣都不應該在Tcl中使用,但它們是uplevel類型語句(這是個好主意但是為一些毛茸茸的代碼而制作)。 事實上,Python對動態eval感覺有點對抗,但我認為這是一件好事。 不幸的是,我還沒有使用一種語言來接受它的GUI以及Tcl / Tk; Tkinter在Python中完成了這項工作但卻很痛苦。

我根本不能和Matlab說話。

有了幾個月的Python,我幾乎肯定會將正在進行開發的任何Tcl程序移植到Python中,以達到理智的目的。

你考慮過使用Octave嗎? 從我收集到的內容來看,它幾乎是matlab大部分內容的替代品。 這可能允許您為擁有它的人支持matlab,並為那些沒有它的人提供免費替代方案。 由於您的程序的“肉”似乎是用另一種語言編寫的,因此性能考慮因素似乎不如提供具有以下特性的環境那樣重要:繪圖和可視化功能,跨平台,具有龐大的用戶群,以及幾乎所有學術界和/或模型流體流動的人都可能已經知道這種語言。 Matlab / Octave可能具備所有這些功能。

好吧,除非有任何其他建議,我得出的最終答案是使用Python。

我認真考慮過matlab / octave,但是在閱讀octave API和matlab API時,它們的不同之處在於我需要為每個API構建單獨的接口(或者用宏來創造非常有創意的接口)。 使用python,我最終會為前端提供一個更容易維護的代碼庫,並且幾乎我們所知道的每個人都會使用它。 感謝大家的提示/反饋!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM