因平台建设,笔者最近在调研图数据库Neo4j。在调研过程中,遇到的问题真的是波澜起伏不定,心神疲惫不堪。首先声明,这些问题不是Neo4j的问题,而是跟我们的开发环境有关。
先介绍下我们的开发环境:
- 操作系统:Windows 7
- IDE: Visual Studio 2012
- 平台SDK: 最高支持到vs 2012
- 开发语言: C++
因为公司创建初,服务平台是以Windows搭建的,所以基本上现在的开发环境是基于Windows的。
一句话:对于C++而言,Windows是一个糟糕的开发平台!下面我将用遇到的现实开发问题证明我的论点。
Neo4j驱动问题
Neo4j驱动支持两种协议,二进制的Bolt协议和REST风格的Http协议,前者比后者性能更高,优先选二进制协议。但发现,官方并没有提供C++的驱动,有一github上的个人项目虽然是C的,但基于Linux的。现在我面临的路有两条:
- Fork这个C项目,使之支持Windows平台
- 自己实现Bolt协议
好吧,还有第三条路。
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下连编译器的下载地址都不容易找。
特别说明一下:
- 以上主要是针对Windows下的C/C++说的,实际上很多虚拟机语言,比如Java,在两个系统上差别很小,比如我用Java花几分钟就能搭建好开发环境,这类语言,有一些公司在Windows上开发,Linux下部署,看中的是Windows的GUI友好,Linux的优越性能。而我则不以为然,开发测试环境与最终部署环境的尽量一致,能有效避免系统各种稀奇古怪的问题,这都是血的教训。
- Windows也有很多优点,比如GUI工具丰富,有VS这么强大的开发套件,有先进的完成端口模型,有强大的Powershell[这个已经开源了,各系统都支持]等等,只不过相比Linux而言,单薄不少。
现在互联网公司,大部分都使用Linux作为服务器系统,不谈系统本身的优点,主要还是因为这个平台上的开发者多,久而久之,围绕该系统的生态就有了。而Windows虽然这几年也在大力拥抱开源,但落得太远,也就不容易看到进步。
不管多么浮夸的高谈阔论,最终都要落地实施,而开发者的时间成本尤为可贵,Linux是一个很好的开发平台。
关注公众号哦
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。