g*t
2 楼
(1)
例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
义函数f(.),然后写下:
定义 f(.)
f(x)
f(y)
三段
另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
一块包含x的代码
一块包含为y的代码
现在问题来了,哪种脚本语言适合第二种方法这样的任务?有没有现成的工具?第二种
方法的好处是等于实现了一小部分编译器的功能。好处是,第二种方法出来的代码,和
函数定义的语法无关。将来就算语言版本换了,也不需要担心它不work。
简单说,我理解的现在的coding,先按最容易理解最有效率的方式写代码,然后编译。
这两部分任务是分开的。但我认为,写好的代码,应该有个专门的工具给它自动整理下
,或者半编译下,然后这个半编译后的版本对高度抽象复杂的语言定义依赖性较少,今
后换到别的芯片上用,也就没问题。
(2)
我碰到过的一个具体问题就是从一个芯片自有的C代码换到另一个芯片的C。这两个C有
细微不同的定义和编译器。
(例如浮点数不初始化是否自动初始化为0;
例如unsigned number和signed number比较的结果)我的想法是,如果能找个工具把这
些可疑的语法特征都还原成更基本的语法特征,那今后就省很多事。例如我可以查所有
浮点数初始化的地方,然后没有初始化的地方,都加上初始化。现在有适合这种任务的
工具吗?
(3)
总结下,给了一种语言A,以及写成的代码段source1。
我现在定义了语言A的比较靠谱和简单的子集a。
现在想把source 1通过自动查找粘贴分析的办法转成a写成的代码 source 2
这样做的好处是对未来可能的语言和编译器以及硬件变化更roubust。有这样的工具吗
?如果没有,大家认为哪种脚本语言适合这样的任务?
(4)
前面的想法,是关于提高robust的。
同样,也可以用于分析和自动重写源代码,把代码提升到超集AA,来提高速度。我相信
这种代码优化肯定是很多软工熟悉的实践。问题来了?你们软工用的什么工具?能介绍
下吗?
例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
义函数f(.),然后写下:
定义 f(.)
f(x)
f(y)
三段
另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
一块包含x的代码
一块包含为y的代码
现在问题来了,哪种脚本语言适合第二种方法这样的任务?有没有现成的工具?第二种
方法的好处是等于实现了一小部分编译器的功能。好处是,第二种方法出来的代码,和
函数定义的语法无关。将来就算语言版本换了,也不需要担心它不work。
简单说,我理解的现在的coding,先按最容易理解最有效率的方式写代码,然后编译。
这两部分任务是分开的。但我认为,写好的代码,应该有个专门的工具给它自动整理下
,或者半编译下,然后这个半编译后的版本对高度抽象复杂的语言定义依赖性较少,今
后换到别的芯片上用,也就没问题。
(2)
我碰到过的一个具体问题就是从一个芯片自有的C代码换到另一个芯片的C。这两个C有
细微不同的定义和编译器。
(例如浮点数不初始化是否自动初始化为0;
例如unsigned number和signed number比较的结果)我的想法是,如果能找个工具把这
些可疑的语法特征都还原成更基本的语法特征,那今后就省很多事。例如我可以查所有
浮点数初始化的地方,然后没有初始化的地方,都加上初始化。现在有适合这种任务的
工具吗?
(3)
总结下,给了一种语言A,以及写成的代码段source1。
我现在定义了语言A的比较靠谱和简单的子集a。
现在想把source 1通过自动查找粘贴分析的办法转成a写成的代码 source 2
这样做的好处是对未来可能的语言和编译器以及硬件变化更roubust。有这样的工具吗
?如果没有,大家认为哪种脚本语言适合这样的任务?
(4)
前面的想法,是关于提高robust的。
同样,也可以用于分析和自动重写源代码,把代码提升到超集AA,来提高速度。我相信
这种代码优化肯定是很多软工熟悉的实践。问题来了?你们软工用的什么工具?能介绍
下吗?
g*t
4 楼
llvm是通用一个机器模型还是可以自己定义模型?
例如我的芯片现在是买的instruction set,也能优化吗?
另外我做描述的这些事,哪种语言或者IDE方便些呢?
例如我的芯片现在是买的instruction set,也能优化吗?
另外我做描述的这些事,哪种语言或者IDE方便些呢?
g*t
6 楼
我去看看llvm,thanks for the information.
(1)
小芯片很多都不是标准C。我们是特制的。
标准c为基础的芯片我预测会今后在美国很
难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
我关注的主要是代码的robustness with respect to different future C
compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
所以需求是有的。
之类的书里面有详细讲这些隐含在C的不同compiler实现的坑。
但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。
(2)
因为速度和鲁棒性通常是duality,所以我觉得CS的人肯定已经有了compiler
middleware做速度。所以想看看是不是可以借鉴下。
(1)
小芯片很多都不是标准C。我们是特制的。
标准c为基础的芯片我预测会今后在美国很
难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
我关注的主要是代码的robustness with respect to different future C
compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
所以需求是有的。
但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。
(2)
因为速度和鲁棒性通常是duality,所以我觉得CS的人肯定已经有了compiler
middleware做速度。所以想看看是不是可以借鉴下。
p*o
7 楼
定制的东西可以很鲁棒也可以很不鲁棒,关键是看做芯片的公司养不养得起做
编译器的队伍。你怕赔几十M,可是你一年愿意出多少钱呢?最终的结果要么
是编译器bug越来越多,要么是前端用开源的东西比如llvm来节省人力成本。
【在 g****t 的大作中提到】
: 我去看看llvm,thanks for the information.
: (1)
: 小芯片很多都不是标准C。我们是特制的。
: 标准c为基础的芯片我预测会今后在美国很
: 难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
: 我关注的主要是代码的robustness with respect to different future C
: compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
: 所以需求是有的。
:之类的书里面有详细讲这些隐含在C的不同compiler实现的坑。
: 但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。
编译器的队伍。你怕赔几十M,可是你一年愿意出多少钱呢?最终的结果要么
是编译器bug越来越多,要么是前端用开源的东西比如llvm来节省人力成本。
【在 g****t 的大作中提到】
: 我去看看llvm,thanks for the information.
: (1)
: 小芯片很多都不是标准C。我们是特制的。
: 标准c为基础的芯片我预测会今后在美国很
: 难生存不下去。因为人人都会,利润很少。另外标准c在很多场合over kill太多了。
: 我关注的主要是代码的robustness with respect to different future C
: compilers and hardware changes。这方面如果出事故,赔个几十M都有可能。
: 所以需求是有的。
:
: 但感觉指望人力避坑不是个好办法。而且现在c写得好的人越来越少。
c*e
8 楼
I built small tool to translate a DSL to Verilog years ago. I uses http://www.boost.org/doc/libs/1_56_0/libs/spirit/doc/html/index.html. If the BNF is simple, it's quite easy. You can do lots of things without full fledged parser.
g*t
10 楼
thanks for sharing
g*t
11 楼
thanks for information. 展开说说?
r*9
14 楼
perl啊,做txt/log分析难道不是default用它吗
G*l
15 楼
lz你的标题误导人了。你在标题里说文本分析,结果一堆回复perl/python的,那些做
文本处理是很好。但你这个不是文本的问题,因为你这不是单纯的文本,是有语义的。
你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用compiler
把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都能准确定
位到,这时候你把ast上所有变量定义后面加一个初始化,再把ast反过来写成source
code,就成了。
如果你的需求很简单,比如只是变量定义加上初始化,那用纯文本regular expression
处理就可以了,perl,python很适合,哪怕sed/awk都可以搞定。如果复杂的话就需要
parser了,你可以用antlr,yacc之类的,那些常见语言的grammar都有现成的,不过要
是你自己特定的语法的话,就要自己写lexer/parer了,用上面提到的parser
generator的工具也挺容易。
【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码
文本处理是很好。但你这个不是文本的问题,因为你这不是单纯的文本,是有语义的。
你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用compiler
把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都能准确定
位到,这时候你把ast上所有变量定义后面加一个初始化,再把ast反过来写成source
code,就成了。
如果你的需求很简单,比如只是变量定义加上初始化,那用纯文本regular expression
处理就可以了,perl,python很适合,哪怕sed/awk都可以搞定。如果复杂的话就需要
parser了,你可以用antlr,yacc之类的,那些常见语言的grammar都有现成的,不过要
是你自己特定的语法的话,就要自己写lexer/parer了,用上面提到的parser
generator的工具也挺容易。
【在 g****t 的大作中提到】
: (1)
: 例如我有一段依赖于输入x的代码,现在想对输入y重新利用它,一种办法是在代码里定
: 义函数f(.),然后写下:
: 定义 f(.)
: f(x)
: f(y)
: 三段
: 另外一种方法是,选出那段代码,替换x为y,然后paste回去。这样最后代码为:
: 一块包含x的代码
: 一块包含为y的代码
g*t
16 楼
编译器或者编译器的middle ware是通用工具,对所有程序都有用,所以成本高。只要思
路清晰直接,做个类似的专门自己芯片用的tool应该不需要那么高成本。另外几十M的
赔偿其实在半导体行业算是少的。
路清晰直接,做个类似的专门自己芯片用的tool应该不需要那么高成本。另外几十M的
赔偿其实在半导体行业算是少的。
g*t
17 楼
谢谢回复。我学习下你说的东西再来和大家汇报。
我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
以免导致软件太复杂。我打算先实现以下四条rule:
第一条是查没明确初始化的变量。给它们明确初始化
第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
第三条是把所有的for循环展开。copy paste多遍。
第四条是把while 表达式定义的
不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
的范围,然后加上条件。明确避免while循环次数超过这个bound.
这几条会把原来的c code变成新的略微降低的c code
.
。你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用
compiler把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都
能准确定
我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
以免导致软件太复杂。我打算先实现以下四条rule:
第一条是查没明确初始化的变量。给它们明确初始化
第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
第三条是把所有的for循环展开。copy paste多遍。
第四条是把while 表达式定义的
不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
的范围,然后加上条件。明确避免while循环次数超过这个bound.
这几条会把原来的c code变成新的略微降低的c code
.
。你这个基本就是需要个compiler frontend。比如你那个c语言的问题。你要用
compiler把代码转换为abstract syntax tree。有了这个ast之后,所有的变量定义都
能准确定
c*6
18 楼
3和4要做value range analysis,前端也不好做,除非你知道代码循环的写法一定就那
么几种。做源源变换不损失原来code的信息还是比较难做到的。
么几种。做源源变换不损失原来code的信息还是比较难做到的。
C*t
19 楼
你的第四条是halting problem,判断一个程序是否为死循环。这个方法应该是
undecidable的吧。循环最大最小次数在绝大多数情况下也是没法用数学证明得出
【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code
undecidable的吧。循环最大最小次数在绝大多数情况下也是没法用数学证明得出
【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code
p*o
20 楼
四的水很深,最简单的比如单链表顺序访问,你怎么做?
【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code
【在 g****t 的大作中提到】
: 谢谢回复。我学习下你说的东西再来和大家汇报。
: 我想的东西确实是类似compiler middleware或者前端。但不打算generalize这个问题
: 以免导致软件太复杂。我打算先实现以下四条rule:
: 第一条是查没明确初始化的变量。给它们明确初始化
: 第二条是查混合类型的表达式。把所有变量都强制explicit 转换。
: 第三条是把所有的for循环展开。copy paste多遍。
: 第四条是把while 表达式定义的
: 不确定次数的循环,把变量的range估计出来,求解和数学证明while循环最大最小次数
: 的范围,然后加上条件。明确避免while循环次数超过这个bound.
: 这几条会把原来的c code变成新的略微降低的c code
g*t
21 楼
我有预知的domain knowledge.不是General 问题。
g*t
23 楼
我多是一些数学物理类型的方程。while条件都是ADC读出来的几个传感器的电压触发一
些逻辑。传感器电压读数是有固定范围的,电压对时间的变化率也是有固定范围的。这
个系统的输入等于是可列举的。所以输出也是可列举的。所以我觉得原理上来说,所有
可能的情况是可穷尽的列出的。
简单的说,电压信号是bound在两个sin函数之间的离散信号。我觉得原理上来说,每个
for ,while都可估计出循环次数范围。到底能不能,只能一个个看了才知道。但我确切
的肯定,很多都能。
一般的c code,拆解while是没可能的。
些逻辑。传感器电压读数是有固定范围的,电压对时间的变化率也是有固定范围的。这
个系统的输入等于是可列举的。所以输出也是可列举的。所以我觉得原理上来说,所有
可能的情况是可穷尽的列出的。
简单的说,电压信号是bound在两个sin函数之间的离散信号。我觉得原理上来说,每个
for ,while都可估计出循环次数范围。到底能不能,只能一个个看了才知道。但我确切
的肯定,很多都能。
一般的c code,拆解while是没可能的。
l*g
24 楼
处理文本,perl语言是不是最方便
相关阅读
cxx程序如何给optimized build加函数symbol?赵策说说现在进什么股票比较好?T倒了以后就靠D来撑Scala了?谁能推荐剖析SQL/NoSQL本质区别的文章?我溜须拍马的跟风赞下好虫求解:socket client用node.js, socket server用c++go这个首字母大小写代表public或者private是个很噁心的feature吧?app securitycluster环境里怎么做测试我要做一个Java演示系统,用哪些前台技术比较好?友情提醒年轻一代:mitbbs很多信息都不准 (转载)有哪位高手能给点评下我准备买的Hp laptop?谢谢!fastest way to send 100k http requests in javagoogle怎么又加了个alphabet母公司?游戏公司招各种人才 (转载)可能还得死磕Hbasenode.js child process: 怎样保证1个命令执行完了再执行下一个?继安卓后 iOS设备销量也将超过Windows电脑dotnet可以用NPM,Bower吗?请教一个关于std::function的问题