2

因平台建设,笔者最近在调研图数据库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的。现在我面临的路有两条:

  1. Fork这个C项目,使之支持Windows平台
  2. 自己实现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是一个很好的开发平台。

关注公众号哦
图片描述


ideami
91 声望11 粉丝