| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言 C++ Java Python 论编程语言跨平台性和IDE选择---个人学习心得 -> 正文阅读 |
|
[C++知识库]C语言 C++ Java Python 论编程语言跨平台性和IDE选择---个人学习心得 |
首先申明,本篇文章针对个人爱好者,不适用于专业程序员,公司让专业程序员用什么平台,他就得用什么平台,没啥好商量的。面向工资编程是永远的第一要旨,哪个项目是赚钱的,他用什么平台,你用就是了。 这篇文章主要是对于没有很多时间和经验去学习编程的人,他的起步阶段,花最少时间和精力能尽可能多的拓宽眼界是最重要的,比如我投入时间,牺牲了周末休息玩耍时间去学一门编程语言和他的平台,我总得尽可能的物有所值吧?这就是这篇分析的初衷,主要讲究的是学哪个有性价比。 本文不讨论编程语言的执行效率和编程复杂度问题(哪样东西不复杂?玩得好都复杂)。主要从跨平台性、IDE方便程度两个角度来分析。 跨平台性: 概念:平时一直说的跨平台性,大概率是指你的代码只要写一遍,基本可以在Win Linux MacOS上跑了。这就意味着,你的代码不可以直接调用这三个系统的系统级API接口(这也很好理解,你如果代码里写了Win32API代码,拿去linux上肯定是不能用的啊)。所以这个跨平台的代码,首先他得通过某种形式来转译成不同的系统级API接口代码,比如:你的代码→转译→win32 or KDE or MacOS。 而这个转译的方式方法,各家套路不同,也就引申出了四个方向:一套代码,编译一次;一套代码,各处编译;一套代码,统一中间层,各处解释;一套代码,各处解释。 一套代码,编译一次。其实指的就是C语言,理由是C语言是二进制兼容和统一,他编译一次之后,随便哪个平台都能跑。但是C语言写业务代码太累是个问题。 一套代码,各处编译。C++为代表,C++有好几种编译器,比如MSVC,GCC,CLang等,编译器不同其二进制代码就不同,所以C++程序实际在各个平台上是处于割裂状态。什么原因?你想想看,你做一个C++程序,需要用到第三方库,比如说BOOST库。如果你使用Win平台上的MinGW64编译器(工具链),那么如果你用BOOST库是MSVC编译过的,那你就不能链接。只有从代码到你使用的BOOST库是用统一的编译器编译过,那才能顺利链接。这其实也很麻烦,因为Win平台上MSVC支持windows特性最好,Linux上是GCC,MinGW64有时候因为windows平台上的库(特别是闭源三方库)不兼容,也不是很适合。反正就是各种割裂:微软说你要用我的平台特性就得用MSVC编译器,Linux则用GCC。然后还有debug的问题。不同编译器,有时代码还有一些地方得根据编译器特性进行改动。所以,嗯,反正你想想清楚吧。被闭源第三方库牵着鼻子走,也很烦的。所以建议用C++时,一定要想好业务跑在win平台上还是linux平台上,然后尽量就别变了,千万别想着“真的跨平台”,很可能出问题。话说,确定之后的C++还是很强的。 一套代码,统一中间层,各处解释。其实这个是“一套代码,各处编译”的升级版。代表性的就是JAVA和Python。上面提到,C++因为编译器的关系,多少还是要针对平台的编译器修改一些代码,代码还要再编译一次,才能在平台上跑(编译也很花时间的)。JAVA真正做到“零修改”,“零编译”,这个平台上写一套,然后直接拿到另外一个平台上用了。因为他多了一层中间层,也就是字节码,你的代码先编译成字节码,然后由字节码去解释执行。代价是装Java软件的电脑上,除了软件本身,还得装一个JRE软件,他是用来解释执行Java软件代码的。当然,代价就是运行速度比C++和C语言慢,当然这是人可以接受的范围内的,写业务逻辑代码其实用Java还不错。 但现在JAVA也开始有C++割裂化的趋势,由于OpenJDK的出现,每家软件公司都在OpenJDK的基础上再搭建自己的一套(还记得微软的MSVC编译器套路么?),现在是2022年9月底,我看新闻感觉这个苗头已经出来了,几年JAVA肯定也会是各种乱七八糟的版本,没办法,都图这个赚钱。 Python其实过程和JAVA略有不同,他没有编译成字节码的环节,虽然也有中间层,但主要是翻译和解释自己的代码。这样的好处是简单快捷,但是执行速度上所有里最慢的。所以现在为了给python提速,主流的方式方法是用C/C++做需要执行速度的模块,python负责调用。这也符合python的最初定位,胶水脚本语言。 IDE: 概念:集成开发环境,对于不想用命令行来编程的人来说,是必备的。 我这里只介绍免费的IDE,付费软件不在本文讨论范围,我也不鼓励大家使用破解盗版,毕竟是人家的劳动成果,尊重知识产权。另外,VSCode、VIM、Emacs等也不在考虑范围内。 JAVA跨平台 :首选Eclipse。有些人说NetBeans也可以,我觉得也没问题,但是Eclipse的可扩展性比较好,我作为初学者,比喜欢IDE装很多种,特别是Python这货,还要专门装个IDE??我一般直接Eclipse装个插件就能带上Python了,我还少装一个IDE软件,挺好的。而且因为Eclipse是JAVA软件,需要带个JRE,电脑又多了一个软件。所以就物尽其用吧,把JAVA和Python放一起。另外,学习IDE也是有时间成本的,搞太多IDE,累,这符合我们“花最少时间学最多东西”的宗旨。 C/C++跨平台:CodeBlocks,EclipseCDT,QT,VisualStudio(win平台专用)。这几个里面,CodeBlocks是个不错的选择,轻便、速度快、自带GUI设计器。你别小看GUI设计器这东西,C++做GUI的IDE主要就三个,CodeBlocks-wxWidgets、QT-QTdesigner和VS-MFC。 其中VS-MFC是windows专用,所以跨平台的只剩QT-QTdesigner和CodeBlocks-wxWidgets两个货了。 QT已经发展成一个独立良好的商业C++平台,同样他也加了自己的东西在里面。(还记得微软的MSVC吗?)好用是挺好用的,但你其实有依赖性,你是专业程序员要快速出活儿拿钱的,用QT;你有精神洁癖的,是个C++原教旨主义者,或者压根不用GUI的,那就请远离QT。 CodeBlocks-wxWidgets也是个开源小平台,他没有加自己的东西在里面,全套都是纯洁的C++库,运行速度和MFC差不多(QT加了自己的东西会略略略慢一些,但依旧是C++领域的速度),而且跨平台。是个可以考虑的IDE,可惜的是,教材很少,凡事自己查文档(记得开启浏览器翻译功能)。而且2020年3月之后就没有大版本更新,小版本更新倒是一直在网站Forum帖子里有。 EclipseCDT是Eclipse的插件,安装后可以写C++。你瞧,Eclipse非常强大,啥东西插件一装就能开始像模像样地写其他语言了,这里面还包括GoLang。虽然也很好,但是和上面三个比,唯独缺了C++ GUI设计器。所以如果你打算手撸简单GUI界面,其实Eclipse是个好选择。 推荐了上面四个IDE,接下来说说他们的一些优势和坑。 CodeBlocks优势:嵌入式,OPENCV,CUDA等项目有集成,还是挺不错的,挺全的。劣势:Ubuntu平台上的CodeBlocks的Debug堆栈、CPU占用等数据窗口不能拖动,都挤在一起,查看起来是有问题的。其次CodeBlocks在Windows平台下,使用MSVC编译器,无法调用CDB进行debug,需要用更专业的WinDbg来进行,这是最大硬伤。其次,不像其他三家,CodeBlocks没有集成CMake。(Eclipse也不行,目前只有QT和VS可以)。 Eclipse优势:和CodeBlocks一样都不错。劣势:没有GUI设计器,界面要手撸,除非另外安装GUI界面设计软件。同样,在Windows平台下,使用MSVC编译器,无法调用CDB进行debug,需要用更专业的WinDbg来进行,这是最大硬伤。(所以Win平台,你就太平用QT或者VS就得了,而且我觉得如果是特别看中GUI,那必须用QT) QT优势:全套最先进,支持各种平台,GUI设计器该有都有。劣势:体积巨大。在C++上加了自己的东西,反正仁者见仁智者见智,专业程序员要急着出活儿,用QT比较简单,但深层次的暗坑就不知道了。当然如果你只用QTCreator写代码,不用QT的特性,我觉得也是没问题的,哈哈哈。但是GUI方面,你懂的,他是必须要用QT那一套自己的东西,否则也是手撸代码。 VS优势:Win平台绝对的霸者,微软什么先进技术都会放在这个平台上,你可以拿来玩。劣势:Linux上你别想了,而且体积和QT一样大。 所以写了这么多,大家心中可以有杆秤了,自己应该用哪款更合适。我这里有个性价比比较高的折中的方案:JAVA+Python→Eclipse,C/C++→QTCreator+wxWidgets FormBuilder , 学习微软先进技术则全套用VisualStudio。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:50:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |