- 主题:C语言的优势是啥?
【 在 dismoon 的大作中提到: 】
: 嗯,我样本比较小,我就是说我家里的....
: 最近装修房子,买新家电,的确大家伙都是安卓了。
:
啥设备啊,
--
FROM 60.29.171.*
c语言的优势是有指针可以访问硬件。
--
FROM 219.75.13.*
你不太了解rust...
rust的定位就是成为一门新的底层语言取代c的地位,也即可以达到和c一样的小体积和运行效率。同时作为一门更新的语言,具备zero abstraction能力,也就是说可以比c更高效。比如stm32的hal库用起来对资源是巨大的浪费,几个资源用的比较满的项目都是直接操作寄存器而不是用hal的。但在rust里你指定了器件型号之后,整个底层库都会按照这个器件型号做调整,功能一个不多一个不少。别说资源冲突外设差别这种大差别了,哪怕因为小型号改动,导致某个寄存器的某一个bit的定义没了或者变了,hal库都会在编译期报错。
rust的目标是在语言层面就消除可能产生的资源使用冲突问题(内存访问只是资源的一种),这对于嵌入式开发是有很大价值的。因为嵌入式开发调试手段有限,靠传统的测试手段来提升代码质量并不如pc平台下那么有效。很多面向消费类电子的硬件产品都有死机问题,只不过靠watchdog凑合过去罢了。我见过一个系统,里面的有个几千行规模的if-then-else分支,我说至少整理下整理成switch-case形式吧,看起来清晰一点,人家跟我说尝试过,但只要做这个改动,哪怕其他逻辑完全不变,编译出来的代码运行直接就会死机。这意味着什么?这意味着现在能运行的代码一定有内存越界、野指针等问题,能正常运行只是一种巧合。但这样的产品就是上万台的发布出去了。
最重要的是,rust这种追求安全的风格是处处深入骨髓的,比如它的库函数虽然版本号很低才0.0x,但在风格上都做的很极致。比如stm32的库,它的register库是一段脚本,从官方拉svd文件下来,再打上官方的以及第三方的勘误调整补丁,然后直接转换成rust代码和对应文档。整个过程你无法以勘误以外的形式去修改干预。比如我给它加上gd32支持,也只能另开一个gd32类别,自己写个勘误表去基于stm32修改调整,并且每一个bit都有文档说明。每一个bit是ro/wo/rw都有定义,每一个取值都有枚举名。甚至同一个寄存器同一个bit同一个0/1的取值,你是读到还是写入,枚举名都是不同的。比如读到叫enabled写入叫enable。并且代码里也只能用枚举名来读写访问。这个跟c一个头文件定义一个寄存器偏移量,最多定义几个枚举值就完事了,细致程度完全不是一个层次的。这种做事方式让可读性足够的好,同时也从机制上断绝了出错的可能性,这种风格注定能产生可信的结果。
【 在 conepoint 的大作中提到: 】
: 设备结构多有体积要求,客户喜欢轻便小巧的,同时考虑工艺维护需求,往往是P封装的小芯片,加上量大的成本乘数效应,如此程序空间有限,只允许轻便型的开发工具.加上某些场合特定时序与低功耗要求,只能手动针对性优化不允许黑箱模型,这些是C与汇编的主场.
: 因此硬件工程师首选C为开发工具,如果说想软硬皆通,再加一门PYTHON做上位机与数据分析,包括文件读写数值计算及可视化以进行相关应用领域的信号处理与业务拓展.
:
--
修改:lvsoft FROM 180.111.48.*
FROM 180.111.48.*
java在pc里的浏览器中运行很广泛。
在手机上更是压倒性的优势在运行。
服务器这块c++应该占据了核心那块。
【 在 lvsoft 的大作中提到: 】
: 不可能,java的应用基本上就只剩服务器这一块,其他领域全部失败了。
:
--
FROM 221.239.111.*
浏览器里运行的 java(applet)已经很少了吧。。。。甚至绝大多数电脑都没装插件
浏览器里运行的多的是 javascript 但跟 java 一点关系没有
【 在 clyu1981 () 的大作中提到: 】
: java在pc里的浏览器中运行很广泛。
: 在手机上更是压倒性的优势在运行。
: 服务器这块c++应该占据了核心那块。
: ...................
--
FROM 114.242.94.*
安卓啊...
【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: 不可能,java的应用基本上就只剩服务器这一块,其他领域全部失败了。
--
FROM 89.31.125.*
安卓只是java的皮而已…
【 在 tom6bj 的大作中提到: 】
:
: 安卓啊...
:
: 【 在 lvsoft (Lv(The Last Guardian)) 的大作中提到: 】
: : 不可能,java的应用基本上就只剩服务器这一块,其他领域全部失败了。
#发自zSMTH@Note8Pro暖手宝
--
FROM 36.45.171.*
扯蛋...
浏览器里跑java的只有java applet,你举几个还能用的applet例子出来试试看?
手机上跑的也不是java,那个是用了java语言的形式,但底层全换了,早期版本叫dalvik,现在的版本叫ART。
手机跑java的,那是在非常早期还在palm,nokia时代是有过一些尝试,现在早死绝了。如果说手机跑的是java,那很简单我随便丢个jar给你,你不用emulator,想办法让手机运行下看看呗?
c++的主要应用场景是游戏客户端,服务器领域只有一小撮涉及核心,有关键性能要求的业务可能会用。
【 在 clyu1981 的大作中提到: 】
: java在pc里的浏览器中运行很广泛。
: 在手机上更是压倒性的优势在运行。
: 服务器这块c++应该占据了核心那块。
--
修改:lvsoft FROM 180.111.48.*
FROM 180.111.48.*
底层是怎么干的,也不影响它采用java语言开发的。
【 在 lvsoft 的大作中提到: 】
: 扯蛋...
: 浏览器里跑java的只有java applet,你举几个还能用的applet例子出来试试看?
: 手机上跑的也不是java,那个是用了java语言的形式,但底层全换了,早期版本叫dalvik,现在的版本叫ART。
: ...................
--
FROM 211.94.231.*
这当然有重大影响。这就是什么东西定义了一门语言的问题了。
一般来说我们说这是xxx语言,包含了2方面的内容:语法和语义。
对于java来说,语法就是这门语言的规则,语义则是jvm以及核心基础库等一系列运行环境为起点,一直扩展到整个第三方生态。
如果割裂开来,光说语法是没意义的。比如说“孟母三迁”,只懂语法你看到的是“姓孟的母亲搬了3次家”,只有知道这背后的背景故事才能理解真正的含义。所以语法和语义割裂的结果,对于代码来说,就是这段代码只能通过编译器的文法分析,仅此而已。产生一个可执行的文件是需要链接系统库的,这一整个runtime环境才构成一门语言。
任何语言,脱离了具体实现只看语法都是极其简单的东西,lexer+parser就没了。而且只看语法,这门语言是高度不稳定的,没有一个广泛接受的确定形态。比如tcc是解释执行c的,jython让python可以跑在jvm上,你非说这也是xxx语言就很不合适。两者的关系本质上跟JavaScript和java的关系一样。前者借用了语法,后者借用了名字而已。
【 在 clyu1981 的大作中提到: 】
: 底层是怎么干的,也不影响它采用java语言开发的。
--
FROM 180.111.48.*