返回信息流我是这么认为的:
语言不该就是一种规定么 大家都这么用
编译器或解释器 能识别 能让机器按翻译过来的指令运行就行了
那用语言开发一种语言是什么意思 这两种语言应该有什么联系
这是一条镜像帖。来源:北邮人论坛 / cpp / #82195同步于 2014/9/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一直不懂,用c语言开发一种别的语言比如说lua 是什么意思
mogumogu
2014/9/7镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
开发一种语言 是不是 主要就是开发一个编译器或者解释器或者vm
【 在 nuanyangyang 的大作中提到: 】
: 指得是语言实现吗?解释器是一种实现方法,编译也是一种实现方法。都是把理论上的语言变成真的能执行的东西。
【 在 mogumogu 的大作中提到: 】
: 开发一种语言 是不是 主要就是开发一个编译器或者解释器或者vm
:
还需要设计这个语言的语法、语义。比如这几个问题:
1.变量可以变还是不可以变?
2.有符号整数溢出的时候会发生什么。
3.函数参数的求值顺序是什么?从左向右?从右向左?还是随便?
4.如果有多个线程往不同的内存地址写数据的时候,所有线程的所有的写操作是否有一个全局统一的顺序?
不同的语言的选择会不同。
如果不规定,不同的人实现起来,运行的结果也不同。
意思就是 需要设计语法语义 然后实现一个编译器之类的东西 再进行测试。代码量主要在后者。
【 在 nuanyangyang 的大作中提到: 】
:
: 还需要设计这个语言的语法、语义。比如这几个问题:
: 1.变量可以变还是不可以变?
: ...................
【 在 mogumogu 的大作中提到: 】
: 意思就是 需要设计语法语义 然后实现一个编译器之类的东西 再进行测试。代码量主要在后者。
:
有的语言没有一个单独的语言设计,比如python,没有“标准”什么的,官方的实现就是规范。他们用解释器。
另一些语言,比如C语言,会有单独的一个“标准”,有很多编译器实现。Java也有一个标准。
至于哪里难,哪里都不容易。就拿C语言的memory model(就是规定多个线程访问内存的时候程序的行为)为例,它的设计从2000年代中期就开始了,到2011年才设计出来。但是实现方面,就算到现在,主流的编译器(比如GCC)实现这个标准也有很多bug,尤其是优化器,有时候还在按照以前没有规定多线程行为的时候的很多假设来优化,现在都是错误的了。
但是想设计一个糟糕的语言很容易,比如PHP,以前黑过它: http://bbs.byr.cn/article/Linux/131124 最核心的语义里面有一个严重的缺陷,结果因为改正这个缺陷几乎不可能,他们干脆不改了。现在facebook往php这个垃圾里成百万上千万地投钱,即便如此,前一阵子他们服务器还宕机30分钟,因为他们的PHP实现的内存管理有问题。
【 在 mogumogu 的大作中提到: 】
: 意思就是 需要设计语法语义 然后实现一个编译器之类的东西 再进行测试。代码量主要在后者。
:
设计和实现一个语言,代码量真的不是最难的。
【 在 mogumogu 的大作中提到: 】
: 我是这么认为的:
: 语言不该就是一种规定么 大家都这么用
: 编译器或解释器 能识别 能让机器按翻译过来的指令运行就行了
: ...................
就是用C语言开发lua语言啊。其实脚本语言的原理很简单的, 就是解析字符串,然后调用对应的C函数而已。
对LUA感兴趣的话,可以看看作者亲自写的这篇论文
《The Implementation of Lua 5.0》(http://www.lua.org/doc/jucs05.pdf)
里边介绍了开发LUA的动机和LUA语言具体实现的main concept