开发环境仍是选Linux好

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

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

关注公众号哦
图片描述

相关文章
相关标签/搜索