2010-11-16 52 views
4

我之前使用過AspectJ進行Java,最近我想過檢查C++語言中存在哪些可能性。C++中面向方面的編程 - 當前支持的替代方案

我聽說AspectC++,但與AspectJ不同的是,根據他們的網站,AspectC++似乎被放棄了,因爲最新的發佈日期從2005年12月21日開始。

我不知道現在是否有更多近期正在使用或開發的替代方案,哪些仍在支持並持續更新和發展,以及如果任何此類替代方案碰巧具有某種集成插件以便於使用在Eclipse IDE中。

如果沒有,那麼在考慮使用AspectC++之前,我應該知道哪些是最有問題的AspectC++限制?

在此先感謝。

+1

可能值得一看的是,如果OpenC++是一個持續的問題,並且它是否適合您的需求...... – 2010-11-17 02:52:10

+0

OpenC++確實看起來很有趣,即使乍一看它似乎也停止了,最新版本的日期是29.08。 2004年。 – 2010-11-17 05:08:16

回答

6

AspectC++是一個值得嘗試,但大學的項目不經常繼續,因爲產品往往不爲了保持穩健,原來的學者失去興趣,建立它的研究生繼續前進。當我在2010年編寫這個答案時,似乎是這樣。2017年,我感到意外的是,AspectC++似乎仍然有着積極的發展。如果你想只是方面的C + +,這可能值得一看。面向方面的編程只是一種特殊的程序轉換(「找到符合此條件的地方('切入點'),並在此處對代碼」)執行此操作。所以,如果你有一個程序轉換工具,你可以很容易地模擬AOP。要在C++上進行轉換,您需要強大的C++前端以及轉換和重新生成代碼的能力。 OpenC++是一個執行C++轉換的項目,其中轉換完全按程序性AST進行編碼,並且使用程序性AST修改。 OpenC++處理C++的哪一種方言需要處理一個特殊問題;特別是,我不確定OpenC++如何處理C +的模板或完整的常用方言(GCC,MS);但是我沒有直接的經驗,只是這種工具的熱衷者。我們的DMS Software Reengineering Toolkit是通過語言定義參數化的通用程序轉換。它有robust definitions for GCC and MS dialects of C++。您可以像OpenC++那樣程序性地實現程序轉換,或者更方便地編寫源代碼到源代碼模式的轉換(或者更通常地,將這些轉換混合以實現複雜的效果)。 DMS已被用於大規模重組大規模C++代碼 (請參閱Case study: Re-engineering C++ component models via automatic program transformation)。 DMS積極維護,但它是商業性的。

編輯2015年3月:現在在GCC和MS方言中使用C++ 14。

編輯2017年7月:現在在GCC和MS方言中使用C++ 17。

+0

嗨,我錯過了什麼嗎?根據他們的網站,似乎這個項目仍然維持...(http://www.aspectc.org/Home.php) – omer 2017-07-12 08:33:40

+1

@omer:你說得對,它似乎是活躍的。在2005年停止發佈的學者們,當我在2010年回答這個問題的時候,發生了很長時間的乾旱,似乎沒有任何進展。有人再次感到有興趣。更新答案。 – 2017-07-12 09:20:23