由于平台搭建,笔者目前正在研究图数据库Neo4j。研究过程中遇到的问题真是一波三折,心力交瘁。首先申明这些问题不是Neo4j的问题,而是和我们的开发环境有关。先介绍一下我们的开发环境:操作系统:Windows7IDE:VisualStudio2012PlatformSDK:uptoVS2012开发语言:C++公司成立之初,服务平台是在Windows上搭建的,所以目前的开发环境基本上都是Windows-基于。底线:Windows是一个糟糕的C++开发平台!下面我将用现实世界中遇到的开发问题来证明我的论点。Neo4j驱动问题Neo4j驱动支持两种协议,二进制Bolt协议和REST-styleHttp协议。前者比后者性能更高,首选二进制协议。但是发现并没有提供官方的C++驱动。虽然github上有个个人项目是C的,但是是基于Linux的。现在我面临两条路:fork这个C项目,让它支持Windows平台,自己实现Bolt协议那么,还有第三条路。Http库的第三种方式是封装HttpRESTAPI,需要使用到Http库。至此,Windows下C++的Http库真的不多了:WinINet有一堆bug,微软已经停止维护,微软声明这个库是面向客户端的,不建议在服务器端。举手有多少公司在服务器端使用这个库。Winhttp可以在服务器端使用,但都是一样的:微软已经停止维护了,BUG很多。我遇到的一个错误是连接设置超时没有效果。libcurl对于普通的http菜鸟来说真的很难用,因为它太底层了;可以将其与使用OpenSSL进行加密和解密的菜鸟进行比较。BoostBeast很新,需要VS2015的支持,目前的开发环境不能满足。看了项目介绍和示例,Poco觉得上手非常简单。然后编译。..我编译OpenSSL是因为依赖OpenSSL导致编译失败。不同的OpenSSL版本也会对编译结果产生影响。有的直接编译失败,有的即使编译成功,写程序测试的时候也会出现找不到符号的错误。然后,我从网上下载了预编译的OpenSSL库,下载了好几份,最后还是编译失败。这一折腾下来,又过了很多时间。..其他。..以上两个问题只是冰山一角,相信很多人都遇到过类似的问题,还有更多。Windows作为开发平台相比Linux【我没用过苹果操作系统】主要有以下不足: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是一个很好的开发平台。关注公众号
