最简单的语言,最昂贵的代价

佐手、 提交于 2020-11-12 02:35:00

尖锐的问题:

GuiLite刚出生的时候,遇到的最多的问题就是:既然支持单片机,为什么不用C语言?

诚然,单片机的开发者多用C语言,最多的顾虑是自己的开发环境是否支持C++;随着大量的GuiLite实例在各种单片机环境的运行,大家的疑虑被彻底解除;但更尖锐的问题出现了:为什么要使用全宇宙最难的C++开发GUI框架?为什么不用最简单的语言C呢?

 C语言的代价:

首先,在嵌入式领域,C语言的项目很多,很多大名鼎鼎的GUI数不胜数,不仅拥有着大量的使用者,同时也拥有十万,百万级的代码量;群主相信这些代码都是非常精炼高效的,开发者要完全掌握,必须完全理解代码含义,否则踩坑之路永远没有尽头。

群主觉得C语言是相对容易掌握的语言,但由于出现的时候太早,对今天的新情况往往缺乏足够的重视。所以从单个函数,语法来看,C确实很亲民;但在组织数据和方法上面就有点吃力。相信大家在开发完一个系统后,最恼人的,肯定不是某些语句,而是越来越难以理清的代码逻辑--俗称屎山

所以能用C语言编写出简练,清晰的代码本身是件很有挑战的事情。即使是Linus这样的大神,写出的Linux代码绝对属于质量上层的迷魂汤,三碗不过岗的同学,请在下面留言证实一下群主所言非虚。

所以,群主的想法是:在100行规模的软件里面,C语言一定是宇宙第一首选;但在超过2千行的规模,则会让读者吃力,吃灰。

 换一种开发语言,行吗?

但是,群主,你说的我都懂,但我真得离不开C呀,即使有时间学习新语言,我也会选择Go,也不会选择宇宙第一难度的C++

请你一定相信群主,不仅C语言能制造屎山Go也是可以;屎山的高度取决于开发者对语言的熟练程度。千万不要指望一门新的语言解决屎山问题。你对新语言的好感,仅仅只能持续2千行左右;过了2千行,C语言项目中遇到的所有问题,一个不少的都会过来找你。不要轻易说你喜欢谁,相处2千个小时,再问自己你喜欢她/他什么?

所以,群主觉得,既然新语言解决不了老问题,还不如继续用C~~~~骗子呀,说了半天C的坏话,结果还是在跪C语言~~~~

且慢吐槽,在下的意思是99%的使用C语言风格,但加入1%C++特性,也就是:C with Class;好了群主好像又听到了新一轮的吐槽:low👎

实用主义放光芒:

请回答一个问题,太空火箭,宇宙飞船上用什么芯片?相信很多人(包括群主)的答案是:高可靠,高抗干扰,可抵御宇宙射线,中微子干扰的超牛、超贵的特种CPU芯片!好吧,这么高,超,牛,贵的字眼,我就不信有人敢不同意!

结果还真有一个抠门王,号称二手货真香的老马斯克君不被所动,老马袖子一撸:有拐杖了,还要啥自行车?什么特种CPU,我连二手火箭都要再用5次,你让我花这钱,不是败家玩意吗?就用我家电脑上的intel cpu就可以了;6个一组,同时计算,计算结果一致便罢,一旦不一致,少数服从多数!卧槽,不愧是抠门王,宇宙射线,和不稳定问题就这样给解决了。。。

相信,大家也知道群主要说啥了:最聪明的办法往往与金钱,技术高低没啥关系,关键还是看你怎们用。

 99% C + 1% C++

所以,既然你喜欢C,就继续用吧,相信你现在已经有的系统,驱动都是C语言编写的,我们是来解决问题的,不是让你推倒重建。相反,你要充分利用现有的东西和知识。

而关键的一味调料就是1%C++,即Class和虚函数这2个基本属性。相信很多同学觉得这很低级,但这正是C++语言发明的初心。这种特性让你完全告别的了函数指针;当然很多C的高手,就是用函数指针实现了C++的所有特性。首先为高手点赞,但作为普通韭菜的我们要明白它的代价就是一大堆函数指针;只要函数指针的大量存在,代码的可读性就大大降低,而C with Class就能用最优雅的方式消灭所有的函数指针,虽然你觉得它很low,但它就能让你的代码量大大缩小;而且它对编译器的支持极好,任何单片机编译器都能支持这种简单的C++特性。

作为开发者,编程思想远远比语法糖重要的多。C with Class是编程思想的进步,虽然在语法难度上面它不值一提。记住,这里说的是编程思想,即使这么简单地语法,现在还是被滥用了,完全不考虑实际需要,上来就是一个class,完全不顾及class发明者的初衷。class是在高level重整代码结构,而不是用class污染每一个细节,每一行代码;还是那句话,用的好,4千行就能解决很多问题;用的不好,还不如不用,还是用最擅长的语言更高效的污染代码吧。

 GuiLiteC with Class的最大受益者。国内外很多围观GuiLite的同学,多是因为炫酷的界面吸引过来看看热闹的;但真正能留住大家的还是4千行能读懂,能马上上手的代码。很多小白同学,一边战战兢兢的说自己什么都不会,一边把各种实例成功的移植到各种硬件上面。群主想问:你们真是小白吗?简单、易用、不添乱、让开发者自己完全掌握命运是GuiLite初衷,只是大家不要太过分,总想着再给GuiLite减减代码量。要知道4千行的代码量已经很给以庞大著称的GUI框架丢脸的了。。。

诚然,C++是全宇宙最难的开发语言,但好在是它的很多难以操作的特性,都被嵌入式,桌面UI这些应用场景完美的避开了,对这一点有兴趣的同学,可以参看另一篇在知乎的回答(https://www.zhihu.com/question/374663834)但它的思想精髓和主要作用在嵌入式方面绝对大有可为。群主一向鼓励不要凭空学习;而是:用多少,拿多少;别浪费自己宝贵的时间,去验证最难,而且对自己毫无用处的语法特性。

开源的力量:你的支持

最后,阴差阳错的,GuiLite要去跟一批优秀的JavaScript项目去竞争前端软件TOP 10,既来之则安之,不求金榜题名,但求不要输得太难看。如果你觉得本文对你有些所启发,也请随手投票支持一下GuiLite(https://www.oschina.net/p/guilite)

👉投票链接(非注册用户,可微信打开链接,投票)

👉点击“投票让它出道

🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!