编程语言之问

本文由 @lonelyrains 出品,转载请注明出处。 
文章链接: http://blog.csdn.net/lonelyrains/article/details/6630179


        从上大学开始接触C,到后来C++、Java、汇编、Javascript、pb、vb,到现在工作时学到一半耽搁了的clips,除了C用的多、C++学得较多之外,其他的都只能算是涉猎过。

         现在在考虑一个DLL函数测试接口的时候,需要知道怎样由窗口输入的字符串“int add(int 3,int 4)”变成运行时的代码:typedef int (WINAPI Add)(int a,int b)。然后用Add调用动态库的函数add并输出结果。当时想法是二次编译。第一次输入时,点击运行的结果是对源代码文件进行操作,插入一段调用typedef代码和一段DLL函数的调用代码;重新编译,再运行就可以得结果了。

         后来,在通信时,数据结构的大小端问题,也就是针对不同的数据结构,对内部的int、short等类型的高低字节互换。现在的普遍做法是先调换了,在传入到数据结构中。

假如定义的结构类型很多,那岂不是要经常在很多函数内部专门写转换的语句?要是能根据结构体声明和结构体类型名遍历结构体成员,写针对任何类型结构体的大小端转换函数,岂不是一劳永逸?查了查,C、C++还是不行。

        两个问题,后来都有回复提到动态语言。维基百科:“动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化”。貌似这个就取代了上面说的二次编译问题。是不是说它的编译可以分析源代码,然后按需要在源代码上增删代码,然后二次编译,而这些过程对程序员来说是透明的呢?C、C++为什么不提供这种函数呢?我觉得这可以通过提供函数接口或者类接口加上一定的编译器支持就可以实现啊。搞不懂C、C++标准化的人是怎么想的。C++的RTTI反复琢磨了那么长时间,也就知道是运行时类型识别,这和我现在所说的完全不是一个东西啊,为什么有人也把这种特性往现在这个二次编译的功能上面扯?

        发明一种编程语言的过程是怎么样的?定义语法规则+编译器开发?凭什么就说谁谁谁发明了什么语言?凭什么几种语言不能兼容?或者说凭什么你就认为这就是一种独立的编程语言呢?学C、C++把我都学傻了,老是一大堆疑问。不过实际开发板中开发,大家都是用C。组长说不能用C++,否则支持C++的编译器开销很大,以后往低端芯片上不能移植,连自学C++都被组长批了几次了。虽然知道他说的有道理,但我是学计算机出来的,不像他是学通信的,所以能学习、利用C++的优良特性的机会还是不愿意因挨批轻易放弃的。来回那么几次,现在不知道自己的未来在哪里啊。

你可能感兴趣的:(数据结构,编程,语言,编译器,winapi)