- 主题:C语言的优势是啥?
现在的人学计算机都是基本概念都不学,直接起手就开始瞎搞的么?
最早的visual c++ 1.0是1993年发布的,这意思是说1993年之前只能用汇编呗。
【 在 sqsl 的大作中提到: 】
: 是不是既能在个人电脑上运行,又能在以stm32f207 COTEX M3为内核的微处理芯片上运
: 行?
: C语言编写的程序能在电脑上运行是因为得益于Visual c软件将其编译为了机器能识别的
: ...................
--
FROM 180.111.48.*
不可能,java的应用基本上就只剩服务器这一块,其他领域全部失败了。
【 在 dismoon 的大作中提到: 】
: 现在大部分家用电器上用的是java,要不是日本的那个本来给相机用的OS黄了,其实我还蛮看好那个的
:
--
FROM 180.111.48.*
我就是好奇,有什么设备这么奇葩用的是java embedded...
【 在 dismoon 的大作中提到: 】
: 嗯,我样本比较小,我就是说我家里的....
: 最近装修房子,买新家电,的确大家伙都是安卓了。
:
--
FROM 180.111.48.*
这个我用的三星的tizen系统,虽然也是智能电视,但这个系统失败了所以基本可以当非智能机用。
冷启动2秒开机,非常舒爽~~
【 在 tom6bj 的大作中提到: 】
: 开机先放N秒广告还关不掉声音的所谓智能电视....
: 看啥规模的电器吧,电饭锅,电磁炉肯定不跑java,电视机肯定是andriod,
:
--
FROM 180.111.48.*
我从来没用过stmCube哦,我一开始就是gcc toolchain,现在更是c都不用直接rust了...
【 在 dismoon 的大作中提到: 】
: 大概是2003年左右的西门子一套家电还有什么日本小厂出的画中画功能的彩电吧。
: 然而,你是不是忘了,其实你现在用stmCube辅助设计,也是要先装java的....
:
--
FROM 180.111.48.*
你看,这就是rust的好处...
rust的编译器会保证你不可能写出有可能会产生资源冲突的代码...
rust的生命周期管理并不只是针对内存...而是针对所有的资源概念...
想在rust里做错事情是很难的...
【 在 dismoon 的大作中提到: 】
: 用stmCube又不是为了用自动生成的代码....是硬件设计的时候检查脚位冲突用的
: 我就把它当个图形化的检查器,有时候我要一个16位的总线,我就用来检查如果用了PA啊,PB里面会不会和我的SPI冲突
:
--
修改:lvsoft FROM 180.111.48.*
FROM 180.111.48.*
你不太了解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的只有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.*
这当然有重大影响。这就是什么东西定义了一门语言的问题了。
一般来说我们说这是xxx语言,包含了2方面的内容:语法和语义。
对于java来说,语法就是这门语言的规则,语义则是jvm以及核心基础库等一系列运行环境为起点,一直扩展到整个第三方生态。
如果割裂开来,光说语法是没意义的。比如说“孟母三迁”,只懂语法你看到的是“姓孟的母亲搬了3次家”,只有知道这背后的背景故事才能理解真正的含义。所以语法和语义割裂的结果,对于代码来说,就是这段代码只能通过编译器的文法分析,仅此而已。产生一个可执行的文件是需要链接系统库的,这一整个runtime环境才构成一门语言。
任何语言,脱离了具体实现只看语法都是极其简单的东西,lexer+parser就没了。而且只看语法,这门语言是高度不稳定的,没有一个广泛接受的确定形态。比如tcc是解释执行c的,jython让python可以跑在jvm上,你非说这也是xxx语言就很不合适。两者的关系本质上跟JavaScript和java的关系一样。前者借用了语法,后者借用了名字而已。
【 在 clyu1981 的大作中提到: 】
: 底层是怎么干的,也不影响它采用java语言开发的。
--
FROM 180.111.48.*
rust比c难学的多的多。
即使对我这种会20多门语言,而且包括了很多公认的难学语言的人来说,rust也是我用的语言里面难度最高的那一档。
所以我对rust能否取代c是持相当悲观的态度的。不过这并不妨碍人家定这个目标。
另一方面,c也确实太古老了,很多事情做起来相当不爽,大家也确实有好一点的“c++”的需求。
【 在 OrderPhoenix 的大作中提到: 】
: 这么看,rust自由度不如C,取代会是一个及其长期的过程。
: 不过rust这么设计应该是“可信计算”的理论落地。
:
--
FROM 180.111.48.*