最简单的语言,最昂贵的代价
尖锐的问题:
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千行就能解决很多问题;用的不好,还不如不用,还是用最擅长的语言更高效的污染代码吧。
GuiLite是C with Class的最大受益者。国内外很多围观GuiLite的同学,多是因为炫酷的界面吸引过来看看热闹的;但真正能留住大家的还是4千行能读懂,能马上上手的代码。很多小白同学,一边战战兢兢的说自己什么都不会,一边把各种实例成功的移植到各种硬件上面。群主想问:你们真是小白吗?简单、易用、不添乱、让开发者自己完全掌握命运是GuiLite初衷,只是大家不要太过分,总想着再给GuiLite减减代码量。要知道4千行的代码量已经很给以庞大著称的GUI框架丢脸的了。。。
诚然,C++是全宇宙最难的开发语言,但好在是它的很多难以操作的特性,都被嵌入式,桌面UI这些应用场景完美的避开了,对这一点有兴趣的同学,可以参看另一篇在知乎的回答(https://www.zhihu.com/question/374663834)但它的思想精髓和主要作用在嵌入式方面绝对大有可为。群主一向鼓励不要凭空学习;而是:用多少,拿多少;别浪费自己宝贵的时间,去验证最难,而且对自己毫无用处的语法特性。
最后:
感谢大家的支持,GuiLite如愿进入了“大前端”软件的Top 10(第9名),能与这么多优秀JavaScript项目同场竞争真是令人兴奋,也非常期待能看到更多的C/C++项目跻身“大前端”Top 10,祝大家2020都有所收获,谢谢!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
3D目标检测综述:从数据集到2D和3D方法
点击上方“计算机视觉cv”即可“进入公众号” 重磅干货第一时间送达 本文经机器之心(almosthuman2014)授权转载,禁止二次转载。作者:Yilin Wang, Jiayi Ye机器之心编译编辑:Panda 目标检测一直是计算机视觉领域中一大难题。近日,来自阿尔伯塔大学的研究者对目标检测领域的近期发展进行了综述,涵盖常见数据格式和数据集、2D 目标检测方法和 3D 目标检测方法。 论文地址:https://arxiv.org/abs/2010.15614 目标检测任务的目标是找到图像中的所有感兴趣区域,并确定这些区域的位置和类别。由于目标具有许多不同的外观、形状和姿态,再加上光线、遮挡和成像过程中其它因素的干扰,目标检测一直以来都是计算机视觉领域中一大挑战性难题。 本文将概述性地总结一些当前最佳的目标检测相关研究。第 2 节将简要介绍目标检测任务常用的数据格式,同时还会给出一些著名的数据集。 然后会概述一些预处理方法。第 3 节会介绍与 2D 目标检测相关的技术,包括传统方法和深度学习方法。最后第 4 节会概括性地讨论 3D 目标检测这一主题。 数据格式 数据集 在计算机图形学...
- 下一篇
OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?
作者 | 郑超 导读:OpenYurt 是阿里巴巴开源的云边协同一体化架构,与同类开源方案相比,OpenYurt 拥有可实现边缘计算全场景覆盖的能力。在之前的一篇文章中,我们介绍了 OpenYurt 是如何在弱网和断网场景下实现边缘自治的。本文作为 OpenYurt 系列文章的第四篇,我们将着重介绍 OpenYurt 的另一个核心能力——云边通信,以及相关组件 Yurttunnel。 使用场景 在应用的部署和运维过程中,用户常常需要获取应用的日志,或直接登录到应用的运行环境中进行调试。在 Kubernetes 环境中,我们通常使用 kubectl log,kubectl exec 等指令来实现这些需求。如下图所示,在 kubectl 请求链路上, kubelet 将扮演服务器端,负责处理由 kube-apiserver(KAS) 转发来的请求,这就要求KAS和 kubelet 之间需要存在一条网络通路,允许 KAS 主动访问 kubelet。 图一:kubectl 执行流程 然而,在边缘计算场景中,边缘节点常位于本地专有网络中,这虽然保证了边缘节点的安全,但也造成位于云端管控节点的 K...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群