學會C++就等於掌握了所有語言

來源:互聯網
上載者:User

“掌握所有語言”也許有點誇大,說“掌握所有市面上流行的程式設計語言”我覺得一點也不過分。

“學會C++”又是如何定義呢?我覺得閱讀過一些比較經典的國外大師寫的C++書籍和文章,有兩三年編程經驗的話,最重要的是人是肯多鑽研多思考類型的話,應該算學會C++,當然離精通還差的遠了。

定義為“學會”是因為這樣的程式員完全可以獨當一面做一些有難度的項目了,可能要比現在許多自稱“精通XX語言”的程式員能乾的多。

如果你所謂精通某語言實際上是指對於某個庫滾瓜爛熟的話,我也無話可說,我認為學習語言是學習程式設計技巧或者編程思想,而不是某個庫。如果我們對於“學習語言”的定義都不一樣,那麼就沒有共同的討論基礎了。

我現在參加的項目使用的程式設計語言和庫對我而言都是全新的,工作中遇到的問題有時候也是很有難度的(例如將mpich庫封裝成python可以調用的介面)。但是因為我還記得C++的一些基本設計技巧(當然也我對於C++開發工具的熟悉也有協助),解決這些所謂難題都輕而易舉。

我在工作中碰到的一個問題就是某個架構師寫的程式(用python語言開發)老是在退出的時候崩潰,這個問題拖了兩三個禮拜,還得不到解決。我接手這個問題後,花了半個小時就*完全*解決了這個問題,而且也沒有損傷多少腦細胞,因為解決問題的步驟對我而言完全是機械性的。

首先,我把程式拉到Linux平台上調試,這樣程式崩潰的時候就產生了core dump,然後我用gdb載入core檔案,確定崩潰時的函數呼叫堆疊。結果發現是調用mpi::finalize()函數的時候發生了崩潰。這個函數的功能可以認為是釋放mpich庫的某種資源的函數。

不需要進一步調試下去,我就可以猜到問題的原因,python,正如現在的大多數流行語言,宣稱自己的資源管理是自動進行的。問題是這裡的資源指的僅僅是記憶體而已。但是就有很多人在用python開發的時候完全不管資源管理了,即使他們願意管理資源,用的也是最繁瑣的技術來管理。肯定是資源管理出了問題。

好吧,我遇到的問題還沒有這麼簡單,由於程式本身是分布式的(多個進程運行於多台機器上),多線程的,單個的函數還包括很多亂七八糟的錯誤處理流程(該錯誤流程在我這個C/C++程式員看來也是很噁心的),所以要完全通過調試器定位bug還是有困難的(python的調試器也不是那麼方便)。

而且我也沒有任何興趣閱讀分布式的多線程的python寫的代碼。

我只是簡單應用了一下C++中的獲得資源即初始化的技術,寫一個新的資源管理類,將獲得資源的代碼放在類的建構函式裡,將資源釋放代碼放在解構函式內。然後把原始的代碼替換一下(用文本替換工具自動替換),就完事了。

類的定義:

class mpiSmartManagement:
    def __init__(self):
        if mpi:
            if not mpi.initialized():
                mpi.init(sys.argv)
               
    def __del__(self):
        if mpi:
            mpi.finalize()

調用:

sp=mpiSmartManagement()

不好意思,沒有講述如何調試分布式的多線程程式的一些複雜的調試技巧。

關於這些複雜的調試技巧我有一個比方,好比發大水了,某地因此被搞得一塌糊塗,但是在抗洪搶險過程中產生了許多英雄,在重整家園的過程中GDP又被拉動(朝上)了,於是壞事變好事。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.