- 论坛徽章:
- 2
|
1、程序员应该学习编译原理吗?有什么作用,说出你的观点。
程序员肯定要学习编译原理,如果想成为一个好的程序员,一个源程序翻译到机器代码的过程啊,编译的词法分析和句法分析那些在搜索引擎里用得到吧?看到开发数据库也需要编译的。不要以为,自己不去开发“语言”,编译原理就没有用啦,它能让你从根本上理解编译器,这对怎么提高程序的效率,怎么变出漂亮的程序很有用...当然貌似如果从事,“人工智能”这一块的话,编译原理也非常重要。无论是工作上还是业余中如果想编一点稍微有一些智能的程序,必然要用到。目前大家都在用的正则表达式是用编译原理做的,那只是一个很小的应用例子。大一点的应用可以做到一定的技术先进性,从而让你在本行业站稳脚跟。比如可以用语法分析来分析出一段用户上传是否含有代码,从而让你的网站更健壮。分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入。在业务软件中结算方面允许用户输入条件表达式和四则运算,允许用户自定义结算公式或条件,使软件上一个档次。甚至可以实现自己创造的编程语言,以后编程全用自语言来做,然后编译成老板要的那种语言。有的公司要JAVA,有的公司要C#,C++,VB等等你都不必每样都费心了。这样做还有一个好处,你的源程序其实是自语言,目标代码则是社会上公认的源程序,所以是可以公开的。如果以这种技术为核心技术开公司的话,则有着技术上更高一层的先进性,这种核心竞争力是很值钱的。试想,你公司的员工只会用自语言,他们跳槽的机会就少了。而你公司的用户总是可以得到全套的他们认为的源程序,则市场机会就大了。别的一般软件公司可不敢给出全套源程序,总要多少保留一点的。
总之,我觉得编译原理十分重要,我现在也在学。只是缺少一本合适的教材。
2、你是否研究过自己所使用的编译器?
没有仔细深入的去研究,不过对于自己编程需要的编译器还是十分用心的去学习了研究了下,能够用到的功能现在已经十分的得心应手了。
3、是否清楚程序编译的整个过程?
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
4、分享一个自己处理过的棘手的编译错误。
未初始化变量更常出现于类中,成员的初始化一般是通过构造函数的实现来完成的。
class Foo
{
private:
int m_nValue;
public:
Foo();
int GetValue() { return m_bValue; }
};
Foo::Foo()
{
// Oops, 我们忘记初始化m_nValue了
}
int main()
{
Foo cFoo;
if (cFoo.GetValue() > 0)
// do something
else
// do something else
}
注意,m_nValue从未初始化过。结果就是,GetValue()返回的是一个垃圾值,if语句的两个分支都有可能会执行。
5、分享自己学习程序编译相关技术的收获。
在学习程序编译的过程中,编译技术其涉及计算学科抽象、理论、设计三个形态,含有基本问题求解的典型思路和方法,从系统级再认识程序、算法最恰当的知识载体,将使我们的程序设计能力得到升华,并促进系统能力的提升,对于培养我们的计算思维,程序设计与实现,算法设计与分析,计算机系统的认知、开发和利用等
方面十分的有帮助。可使其从语言实现机制的高度理解局部变量与全局变量的差别,这必将使我们更容易理解与运用高级语言从事程序设计,达到“知其然又知其所以然”的学习目标;而在“编译原理”的学习中深化“高级语言程序设计”及“数据结构与算法分析”的若干核心内容,又可以使我们从语言实现的角度更明智地选择数据结构,并按照问题的实际需求运用高级语言进行程序设计。
6、分享学习程序编译相关的原理对自己写程序的帮助。
可使其从语言实现机制的高度理解局部变量与全局变量的差别,这必将使我们更容易理解与运用高级语言从事程序设计,达到“知其然又知其所以然”的学习目标;而在“编译原理”的学习中深化“高级语言程序设计”及“数据结构与算法分析”的若干核心内容。 |
评分
-
查看全部评分
|