博舍

历经10年,我写了一个没人用的编程语言 智能机器人用什么编程语言写的

历经10年,我写了一个没人用的编程语言

周末在网上闲逛,发现了一个叫PiotrFusik波兰程序员,从2011年开始,开发一个叫做Ć的语言。 

GitHub:https://github.com/pfusik/cito

注意,不是C语言啊,在字母C上还有一撇,这是个波兰字母,我搜了一下发音好像有点像“赤”。

他一个人整整维护了10年!

这个语言是干嘛的呢? 

当然可以用它去写程序,不过它的厉害之处在于:可以自动编译成C,C++,C#,Java,JavaScript,Python,Swift,TypeScriptandOpenCLC,是不是很酷?!

我来了兴致,决定尝试一下。 

Ć使用C#写的,需要.NET5.0,这并不难,一会儿就安装好了。

然后用"赤"语言写个HelloWorld: 

publicclassHelloCi{publicstaticvoidSayHello(){Console.WriteLine("Hello,world!");}}

满满的C#Style。 

完成了“赤”语言源码,然后就可以把它编译成各种其他语言了。  

先试试Python:cito-ohello.pyhello.ci 

结果如下:

classHelloCi:@staticmethoddefsay_hello():print("Hello,world!")

再试试JavaScritpt:cito-ohello.jshello.ci 

"use strict";functionHelloCi(){}HelloCi.sayHello=function(){console.log("Hello,world!");}

编译成C语言会是什么样?cito-ohello.chello.ci    

#include#include#include "hello.h"structHelloCi{};voidHelloCi_SayHello(void){puts("Hello,world!");}

总之,一次编写,跨语言到处编译,看起来非常牛的样子。

没有深入尝试,但是我想这哥们应该会在编译以后的代码中体现各个语言的最佳实践,而不是拼凑的垃圾代码。 

可是这样的语言有什么用呢? 

比如用Ć怎么去写Web程序?

对不起,没有类库和框架,没有生态,得从头写起。

即使是哼哧哼哧写出来了,如何编译成别的语言呢?

每个语言都有自己独特的类库,所以也编译不了——得了解所有语言的所有类库的所有细节,估计只能神才能办到吧。

Ć这样的语言,只能写那些完全独立,不依赖第三方类库的程序,比如PiotrFusik用它实现了图像解码器,加密、解密等工具。 

但是这样的程序又有多少呢?

可是这哥们居然坚持了10年之久,就是凭兴趣做事,这是真爱啊。

我的知识星球“码农翻身”的球友“孔令贤”说: 

这种项目在现实中没什么卵用,但作为个人业余时间的兴趣和研究,对编程语言底层逻辑的基本功的提升却大有裨益。如果跟工作相关,那自然最好,否则拿出来吹吹牛逼当做茶余饭后的消遣也还不错,让人眼前一亮

确实是这样,做这样的项目需要精通多达10种编程语言,同时精通编译原理,对个人的技术功力大有提升。 

我到LinkedIn看了一下,他经历丰富,2004年从华沙大学毕业以后,做过兼职,在公司做过全职,自己开公司干过,现在在Intel,做高级编译器工程师。

我想他应该不是996,应该没有无穷无尽的需求,他有时间、有精力十年如一日地维护这样的项目,追随自己的兴趣。 

这样程序员多了,一定会产生伟大的技术发明和创造。

相信大家都有这样的体验:高强度,满负荷、被逼迫的软件活动只会产生垃圾。

好的、有创造性的想法通常产生在自己感兴趣的领域,在适度的压力下,在不断的追求中,突然灵机一动想出来的。

“有闲”很重要。 

年轻时我也有自己的梦想:

可是,梦想败给了现实。 

我丝毫不怀疑中国有很多天才程序员,只是绝大多数都被几座大山压着,每天累得要命,没有机会用自己的聪明和才智去创造。

算了,不说了,我去干活去了。 

(完)

最后,再介绍一下我的一个备份号“想躺平的程序员”,防止被人投诉后失联,请小伙伴们保存一下吧。

这个号不会空着,经常会发一下轻松有趣的东西,让大家在紧张的工作之余乐呵一下。

青少年机器人编程大赛用什么语言

青少年机器人编程大赛用什么语言?孩子的学习一直都是每一个家长们十分关心和重视的一件事。很多的家长在培养孩子的学习的时候,会给孩子选择一些能够提升孩子能力的课程。就拿现在很多的家长想要孩子去学习少儿编程的课程来说,他们对于青少年机器人编程大赛用什么语言并不清楚,今天我们就一起来了解一下青少年机器人编程大赛用什么语言?

一、4—6岁的孩子初学阶段

这是个可选的年龄段,这个阶段正是孩子逻辑思维能力的形成和快速发展期,再小一些思维能力还达不到,切忌揠苗助长。课堂形式多从少儿编程小游戏开始,玩一些编程小游戏,比如用指令控制一个角色到达终点,绕过一些障碍物,用循环来完成重复任务等等。再有一定基础以后,从孩子的兴趣和编程基础起来时开始培养,通过用可视化的编程工具来完成稍微复杂一些的任务,这一阶段孩子的逻辑思维开始更快地发展,比如Scratch少儿编程、App?Inventor等。

二、7—10岁的孩子进阶学习阶段

在熟悉了可视化少儿编程后,可以真正学习一门编程语言,用一些可视化编程工具来完成一些复杂的任务,比如Scratch、Python等。

三、11—18岁的孩子精进阶学习阶段

如果孩子走到了这一步,说明对编程非常感兴趣,并且编程能力也比一般的孩子强很多。学习一种真正的编程语言,比如Swift、Python等,尝试编写一些软件,初步学习算法、数据结构以及面向对象编程。这个阶段的孩子应以实践为主,看书为辅,也可以尝试一些硬件编程,比如用Arduino做个小机器人。避免闭门造车,尽量为孩子创造实践机会,比如合伙做网站,参加一些编程大赛等。

青少年机器人编程大赛用什么语言?通过上面的介绍,想必您对于青少年机器人编程大赛用什么语言有了一个好的了解和认识。孩子学习少儿编程对于孩子来说学习的好处其实也是非常的多的。但是家长们需要注意的是一定要给孩子选择正规靠谱的机构,这样孩子的学习各方面才能有一个好的效果和帮助。

C语言这么厉害,它自身又是用什么语言写的

换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来?用什么语言来写的?如果是用C语言本身来写的,到底是先有蛋还是先有鸡?

1

我们假设世界上不存在任何编译器,先从机器语言说起,看看怎么办。 

机器语言可以直接被CPU执行,不需要编译器。

然后是汇编语言,汇编语言虽然只是机器语言的助记符,但是也需要编译成机器语言才能执行,没办法只能用机器语言来写这第一个编译器了(以后就不用了)。 

汇编语言的问题解决了,就往前迈进了一大步,这时候就可以用汇编语言去写C语言的编译器,我们说这是C编译器的老祖宗。 

有了这个老祖宗,就可以编译任意的C语言程序了,那是不是可以用C语言本身写一个编译器?只要用老祖宗编译一下就可以了。

OK,这么一层层上来,终于得到了一个用C语言写的编译器,真是够麻烦的。 

到这个时候,之前那个汇编写的C语言编译器就可以抛弃了。 

当然,如果在C语言之前,已经出现了别的高级语言,例如Pascal,那就可以用Pascal来写一个C语言的编译器。

第一个Pascal的编译器据说使用Fortran写的。而做为第一个高级语言的Fortran,它的编译器应该是汇编语言写的。

2

关于编译器,这里边有个有趣的传说:

传说Unix发明人之一的KenThompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前,输入自己的用户名和密码,就能以root的方式登录! 

贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码,终于找到了登录的后门,清理后门以后编译Unix,运行,可是Thompson还是能够登录进去。

有人觉得可能是编译器中有问题,在编译Unix的时候植入了后门,于是他们又用C语言重新写了一个编译器,用新的编译器再次编译了Unix,这下总算天下太平了吧。

可是仍然不管用,Thompson依然可以用root登录,真是让人崩溃!

后来Thompson本人解开了秘密,是第一个C语言编译器有问题,这个编译器在编译Unix源码的时候,当然会植入后门,这还不够,更牛的是,如果你用C语言写了一个新编译器,肯定也需要编译成二进制代码啊,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了,你写的这个编译器就会被污染了,你的编译器再去编译Unix,也会植入后门:-)

说到这里我就想起了几年前的XcodeGhost事件,简单来说就是在Xcode(非官方渠道下载的)中植入了木马,这样XCode编译出的iosapp都被污染了,这些app就可以被黑客利用做非法之事。 

虽然这个XCodeGhost和Thompson的后面相比差得远,但是提醒我们,下载软件的时候要走正规渠道,从官方网站下载,认准网站的HTTPS标准,甚至可以验证一下checksum。

3

可能有人问:我用汇编写一段HelloWorld都很麻烦,居然有人可以用它写复杂的编译器?这可能吗?

当然可能,在开发第一代Unix的时候,连C语言都没有,KenThompson和DennisRitchie可是用汇编一行行把Unix敲出来的。  WPS第一版是求伯君用汇编写出来的,TurboPascal的编译器也是Anders用汇编写出来的,大神们的能力不是普通人能想象得到的。 

对于编译器来说,还可以采用“滚雪球”的方式来开发:

还是以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语句,函数调用......我们把这个子集称为C0。

然后用汇编语言写个编译器,只搞定这个语言的子集C0,这样写起来就容易不少。

C0这个语言可以工作了,然后我们扩展这个子集,例如添加struct,指针...... ,把新的语言称为C1。 

那C1这个语言的编译器由谁来写?  自然是C0。

等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2。 

然后是C3,C4...... 最后得到完整的C语言。

这个过程被称为bootstraping,中文叫做自举。

END

我是刘欣,畅销书《码农翻身》作者,15年以上开发经验,前IBM架构师,领导过多个企业应用架构设计和开发工作;洞察技术本质,擅长用故事去讲解复杂技术。

每天仅需4毛钱,加入码农翻身知识星球,和我以及来自腾讯、阿里、京东、滴滴、IBM、SAP等各路大牛深度交流技术学习,项目开发,编程技术,职业发展......

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇