因平臺建設,筆者最近在調研圖數據庫Neo4j。在調研過程當中,遇到的問題真的是波瀾起伏不定,心神疲憊不堪。首先聲明,這些問題不是Neo4j的問題,而是跟咱們的開發環境有關。git
先介紹下咱們的開發環境:github
- 操做系統:Windows 7
- IDE: Visual Studio 2012
- 平臺SDK: 最高支持到vs 2012
- 開發語言: C++
由於公司建立初,服務平臺是以Windows搭建的,因此基本上如今的開發環境是基於Windows的。shell
一句話:對於C++而言,Windows是一個糟糕的開發平臺!下面我將用遇到的現實開發問題證實個人論點。數據庫
Neo4j驅動問題
Neo4j驅動支持兩種協議,二進制的Bolt協議和REST風格的Http協議,前者比後者性能更高,優先選二進制協議。但發現,官方並無提供C++的驅動,有一github上的我的項目雖然是C的,但基於Linux的。如今我面臨的路有兩條:服務器
- Fork這個C項目,使之支持Windows平臺
- 本身實現Bolt協議
好吧,還有第三條路。curl
Http 庫
第三條路就是封裝Http REST的API,這須要用到Http的庫。工具
在這一點上,Windows下給C++用的Http庫真的不太多:性能
- WinINet
一堆bug,微軟已經中止維護了,並且微軟聲明這個庫是面向客戶端的,不建議在服務端使用。有多少公司在服務端使用這個庫,請舉手。
- Winhttp
這個能夠在服務端使用,但同樣:微軟中止維護,bug也很多。我遇到的其中一個bug是鏈接設置超時無效。
- libcurl
對於普通的http小白,真的很難用,由於太底層了;能夠類比爲加解密小白用OpenSSL。
- Boost Beast
很新,須要VS 2015支持,當前開發環境不知足。
- Poco
看了項目介紹,以及樣例,以爲挺好上手。而後就編譯。。。由於依賴OpenSSL編譯失敗,我就編譯OpenSSL,不一樣的OpenSSL版本對編譯結果也有影響,有的直接編譯失敗,有的即便編譯成功了,寫程序測試也會出現找不到符號的錯誤。而後,我就從網上下載預編譯的OpenSSL庫,下載了好幾份,最終仍是編譯失敗。這一折騰,好多時間又下去了。。。
- 其餘
。。。
上面的兩個問題只是冰山一角,我相信不少人都遇到過相似的問題,還有更多的問題。相比Linux[沒用過蘋果操做系統哈],Windows做爲開發平臺主要有如下不足:測試
- C/C++ 開發資源少
好比剛纔提到的一些開發庫,有些是不提供Windows版本的。萬一依賴它們,只能捉急了。
還有一些開源軟件也沒有Windows的版本,如經常使用的Redis。
- Windows下軟件編譯困難重重
這有幾方面的緣由:
(1)不少開源項目對Windows下的編譯過程言之寥寥,按照流程一步一步編譯,每每會出現不少問題。
(2)Windows自己就不具有對開發的良好支持,在Linux下一個build-essential就能按照得差很少,Windows下連編譯器的下載地址都不容易找。
特別說明一下:ui
- 以上主要是針對Windows下的C/C++說的,實際上不少虛擬機語言,好比Java,在兩個系統上差異很小,好比我用Java花幾分鐘就能搭建好開發環境,這類語言,有一些公司在Windows上開發,Linux下部署,看中的是Windows的GUI友好,Linux的優越性能。而我則不覺得然,開發測試環境與最終部署環境的儘可能一致,能有效避免系統各類稀奇古怪的問題,這都是血的教訓。
- Windows也有不少優勢,好比GUI工具豐富,有VS這麼強大的開發套件,有先進的完成端口模型,有強大的Powershell[這個已經開源了,各系統都支持]等等,只不過相比Linux而言,單薄很多。
如今互聯網公司,大部分都使用Linux做爲服務器系統,不談系統自己的優勢,主要仍是由於這個平臺上的開發者多,長此以往,圍繞該系統的生態就有了。而Windows雖然這幾年也在大力擁抱開源,但落得太遠,也就不容易看到進步。
無論多麼浮誇的高談闊論,最終都要落地實施,而開發者的時間成本尤其難得,Linux是一個很好的開發平臺。
關注公衆號哦
![圖片描述 圖片描述](http://static.javashuo.com/static/loading.gif)