首页 > 编程知识 正文

总结今年展望明年短语,十大编程语言特点及应用领域

时间:2023-05-06 19:47:16 阅读:166704 作者:3033

我在QQ上添加了专门针对DirectX的小组。 其中有很多令人陶醉的唇彩。 这也是感受GNU之父——傲慢的泥猴桃在大学时代体验到的幸福的机会。 客观地说,这是传统黑客。 不是入侵别人的计算机,而是有技术和共享合作的精神。

在讨论技术的过程中,我发现大家都在批评C的语法问题。 它们往往臃肿、复杂化、晦涩难懂、缺乏灵活性,也无法缩小硬件能力。 其他C以外的语言更是如此。 像Java这样的语言只能被批评为邪语(像邪教一样)。

仔细一看,你会发现连中国人发明的主要编程语言都没有(实际上还有。 例如易语言,但使用这种东西的人很少见)。 最近华为呼声很高,宣称已经做了自己开发的操作系统(鸿蒙操作系统),下一步要开发自己开发的编程语言。 这其实是件好事。 但是,要落地,就不能画饼。 借鉴旧的编程语言,改进车轮,可以大有作为。

我对Python、JavaScript等脚本语言和Java等半编译语言不太感兴趣。 稍后再说。

本文专门针对未来的编译语言。 我只能说是编程业余爱好者。 水平不高。 想想你在哪里说什么。

自己享受,所以没有必要太当真。

一. pos_t型

大家都不知道size_t类型。 这是typedef的无符号整数,有指针和正常长度。 (x86下为32位=4字节,x64下为64位=8字节)。 另一方面,pos_t具有与size_t相同的长度,是无符号整数。 这有什么用? 请看以下代码:

void func () { pos_t pos=End; goto pos; 结束:返回; }这意味着将标签分配给变量,并允许变量跳转到目标。 ASM (组件)有这个能力。 至少在1/3以上的函数内,为了保证代码的效率是必要的。 写代码的人一定很熟悉。

函数中的标签应该也可以导出。 上传代码:

intfunc1(pos_tpos ) { goto pos; pos 1:返回1; Pos2: return 2}void func2() { pos_t pos=func1:Pos2; intx=func1(pos ); printf('%d ',x ); 对于外部函数(如dll ),内部跳转点的导出需要设置其他机制。 如果一定要实现的话就不难了。

C/C不允许这样的语法。 其实在c时代就应该实现这样的功能。 目前,内联组件可以模拟这样的功能。

上传代码:

#defineassign_label(value,label ) __asm push eax__asm mov eax,label__asm mov value,eax _ _ ASM ppm am //其实这一句是pos=_B; 但是,C/C不允许这样的语法。 jump_to(_b; //这一句话相当于goto pos; 同样,C/C中不允许这样的语法。 _a:printf(L'a ); 返回; _b:printf(L'b '; 返回; }很遗憾,这两个宏只能在x86上使用。 在x64上不可用。 内联程序集在VC编译器的x64模式下不可用。 GCC是可能的。 但是,必须修改为GCC的汇编语法。

二.用相关函数代替成员函数

上传代码:

struct type1_t{ int a,b; }void type1_t.print () printf ) ) ),a,b ); }类(或结构)中不再有成员函数,而只有相关函数。 在外部定义(或声明)。

也就是说,可以在任何位置扩展类的方法。 不限于班级内部。

结构和析构函数也是如此。

三.全文(透明)编译,不依赖定义顺序

上传代码:

void func1() { func2); }void func2() ) { func3); }void func3() print ) '确定!' ); }完全没有问题。 然后:

voidfunc(type1_t ) { printf }“% d”,t.x; }struct type1_t{ int x,y; }完全没有问题。 这称为全文(透明表达式)编译。 不依赖于定义顺序。

四.基础关键词

基本关键字实际上是g语言自定义语法的实现方法。 实际上,是一组丰富健全的基础关键词高级宏=自定义语法。

g语言的高级语法实际上是通过高级宏包的低级关键字实现的自定义语法。

g语言可以模拟其他编译语言甚至脚本语言的语法,不能100%,但是可以模仿八九点像。 方式是用基本关键词抽象出共同的核心语义。

/*/基础关键字/*/_ _ keyword _ function _ _ keyword _ void _ _ keyword _ return _ _ keyword _ goto _ )

__keyword_enum___keyword_if___keyword_else___keyword_while___keyword_for___keyword_do___keyword_break___keyword_continue___core_operator_('(')___core_operator(')')___core_operator_('{')___core_operator('}')___core_operator_('[')___core_operator(']')___core_operator('.')___core_operator('+')___core_operator('-')___core_operator('*')___core_operator('/')___core_operator('<')___core_operator('>')___core_operator('!')___core_operator('~')___core_operator('&')___core_operator('|')___core_operator(">=")___core_operator("&&")___core_operator("||")___core_operator("&=")___core_operator("|=")___core_operator("<=")___core_operator("==")___core_operator("!=")___core_operator("++")___core_operator("--")___core_operator("->")

无论怎样定义语法,编译器最终都会将代码先翻译成底层关键字语法形式,再进行底层语法代码编译。例如下面的代码:

void func(){ if(1 > 0) return;}

会被翻译为如下底层码:

___keyword_function((___keyword_void), func1, ())___core_operator('{') ___keyword_if ___core_operator('(') 1 ___core_operator('>') 0 ___core_operator(')') ___keyword_return ___core_operator(';')___core_operator('}')

五、高级宏

这一部分我还仅仅想了一个大概。C/C++的宏功能强大,但还没有强大到能够让人非常满意的程度。

高级宏的主要目标是,让旧的C/C++宏更加强大,更容易理解和键入,且支持G语言自定义语法功能。

#define big_macro#{ Line1; Line2; Line3; ...}##define big_macro2#{ #define big_macro3 #{ Line1; Line2; Line3; }#}##define use_std_grammar#{ #define #operator [ ___core_operator('[') #define #operator ] ___core_operator(']') #define #operator + ___core_operator('+') #define #operator - ___core_operator('-') #define #operator * ___core_operator('*') #define #operator / ___core_operator('/') ...}##define unuse_std_grammar#{ #undef #operator [ #undef #operator ] #undef #operator + #undef #operator - #undef #operator * #undef #operator / ...}#

其实这些只是高级宏丰富功能的冰山一角。

六、局部语法

宏定义语法#define太长了。#include也很长。其实可以像下面这样。

#define #macro def define#define #macro inc include#inc<g_grammar> //内含g语言语法定义项。#inc<g_stdio>use_g_std_grammar; //这一句必须,定义g语言语法。#def m1 int mainm1(){ return 0;}unuse_g_std_grammar; //这一句是必要的。

上面这个缺少让人醒目的功效。但是下面这一个就不一样了。

#include<g_grammar>#include"my_own_grammar.g"use_g_std_grammar;void func(){ return;}unuse_g_std_grammar;use_my_own_grammar;...unuse_my_own_grammar;

G语言对局部语法有强大的支持,因此甚至在一个函数内使用两套以上的语法都绝对不是问题。

如果感觉某项任务难以用传统语法达成,就可以尝试局部语法来完成任务。

七、G语言常量字符串

上代码:

void func(){ str_t s = "你好,G语言。"; char * s8 = s; wchar_t s16 = s; size_t sz8 = s.size<char>(); size_t sz16 = s.size<wchar_t>(); s.begin(); s.end();}

G语言常量字符串可以自动转化为宽窄两种版本。并提供起止位置,长度等相关方法。是内置类型。

...(未完待续)...

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。