簡體   English   中英

Objective-C與Python的RegEx性能

[英]RegEx performance in Objective-C vs Python

這個問題似乎含糊,抱歉。 是否有人有使用Objective-C和Python編寫RegEx的經驗? 我想知道一個與另一個的性能? 在1.運行速度和2.內存消耗方面哪個更快? 我有一個始終在后台運行的Mac OS應用程序,我希望我的應用程序索引一些正在保存的文本文件,然后保存結果...我可以在Obj的應用程序中編寫一個regex方法-C,否則我可能會使用Perl或Python(只是Python的初學者)編寫一個單獨的應用程序。

(謝謝,我已經從你們中的一些人那里得到了一些很好的信息。噓給那些反對的人;我是來這里學習的,我可能會不時提出一些愚蠢的問題-這是交易的一部分。)

在我的Mac OS應用程序中,我將進行一些文本處理,我想知道在Python中這樣做是否會更快。

幾乎可以肯定,它將在開發時間方面更快。 對於幾乎所有軟件項目而言,開發時間都是衡量成功與否的關鍵。

如果您指的是運行時,那么幾乎可以肯定是在進行過早的優化,除非您已證明緩慢的代碼將導致難以忍受的/明顯的用戶界面減速。

過早的優化是萬惡之源。 - 唐納德·努斯

如果您正在尋找原始速度,那么這兩者都不是一個很好的選擇。 為了提高執行速度,您可以選擇Perl。 對於您進行編碼的速度,無論是Python還是Perl都可以輕松地花很多時間在Objective C中編寫它,就像兩者都可以輕松地擊敗Java解決方案一樣。 如果要衡量的是到解決方案的時間,而不是需要更多代碼行的解決方案,那么花費較少時間編寫代碼的高級語言始終是一個勝利。

就實際的運行時性能而言,Perl的正則表達式是用非常緊密的C語言編寫的,並且已知是可用的最快,最靈活的正則表達式。 regex優化器對已編譯的regex程序做了很多非常聰明的事情,例如,應用Aho–Corasick起點優化來查找在O(1)時間運行的交替Trie的起點。 沒有人這樣做。 哎呀,除了Perl之外,我什至沒有其他人願意將交替優化到嘗試中,這就是將您從O(n)轉換為O(1)的原因,因為編譯器花了更多時間做一些聰明的事情,以便解釋器運行快得多。 Perl正則表達式在調試和性能分析方面也進行了重大改進。 它們也比Python更靈活,但是僅調試本身就足以使平衡。

關於性能的唯一例外是某些病理模式在任何遞歸回溯器(無論是Perl,Java還是Python)下運行時都會退化。 可以使用強烈推薦的由Russ Cox編寫的RE2庫作為替換插件來解決這些問題。 知道它可以作為Perl的透明替換正則表達式引擎使用,而且我很確定自己也記得它也可用於Python。

另一方面,如果您真的想使用Python,而只想擁有一個更具表現力和健壯性的正則表達式庫,尤其是在Unicode上表現良好的正則表達式庫那么您想使用Matthew Barnett的regex模塊,該模塊可用於Python2和Python3。 除了符合tr18的1級合規性要求(這是Unicode正則表達式的標准文檔)之外,它還具有各種其他巧妙的功能,其中一些功能非常特殊 如果您是正則表達式行家,那么非常值得一試。

暫無
暫無

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

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