技术层面看<易语言>与<易飞扬>:

易已经推出已经很多年了 +之最近 易飞扬的推出.因此不免评价一番,作为第一个稍微看的顺延的中文语言:

我曾经在有些言论中提到过易编译器很 '垃圾'.因此有不少人对我很不满意,但是依然固执己见,并对此进行一个简单的分析,为什么我会得出这个结论.

我们首先还是就易语言先进行一个分析: 首先我们选取官方的一个例子:

拥有自己的编译器
    易语言拥有自己独立的高质量编译器,源程序被直接编译为目的机器的CPU指令,不存在任何速度瓶颈和安全隐患。


    编译器是编程语言中最核心最关键的部分,易语言的编译器不仅效率高,而且可以编译出与操作系统平台无关的可执行代码。
              


然后我们对这个例子稍加改动:

.版本 2

.子程序 __启动窗口_创建完毕

Test1 ()
Test2 ()

.子程序 Test1
.局部变量 累加变量, 整数型
.局部变量 时间, 整数型

时间 = 取启动时间 ()
累加变量 = 0
.计次循环首 (100000000, )
    累加变量 = 累加变量 + 1
.计次循环尾 ()
时间 = 取启动时间 () - 时间
输出调试文本 (“Test1 Time Spend ” + 到文本 (时间) + “ MS”)

.子程序 Test2
.局部变量 累加变量, 整数型
.局部变量 时间, 整数型

时间 = 取启动时间 ()
累加变量 = 0
.计次循环首 (100000000, )
    累加变量 = 累加变量 + 2 - 1
.计次循环尾 ()
时间 = 取启动时间 () - 时间
输出调试文本 (“Test1 Time Spend ” + 到文本 (时间) + “ MS”)

注意Test1 与 Test 2的区别

我仅仅将+1 换成了 + 2 - 1.大家可以试图先猜测一下所花费的时间.

开始运行被调试易程序
* Test1 Time Spend 219 MS
* Test1 Time Spend 2386 MS
被调试易程序运行完毕

结果是不是另你吃了一惊?差了整整10倍。这里我都不去和C++ C语言甚至Delphi,C# 甚至VB这些比了。结果大家都知道。又是一个10倍的差距。

如果算一般的解释语言的话:如果差两倍还想得通。我们还是来看看汇编码:

Test1子程序的汇编码:

004032E9     55                     push ebp
004032EA     8BEC                   mov ebp,esp
004032EC     81EC 24000000          sub esp,24
004032F2     C745 FC 00000000       mov dword ptr ss:[ebp-4],0
004032F9     C745 F8 00000000       mov dword ptr ss:[ebp-8],0
00403300     68 00000000            push 0
00403305     BB 08030000            mov ebx,308
0040330A     E8 5A010000            call E与EF.00403469
0040330F     83C4 04                add esp,4
00403312     8945 FC                mov dword ptr ss:[ebp-4],eax
00403315     C745 F8 00000000       mov dword ptr ss:[ebp-8],0
0040331C     33C9                   xor ecx,ecx
0040331E     41                     inc ecx
0040331F     51                     push ecx
00403320     81F9 00E1F505          cmp ecx,5F5E100
00403326     0F8F 06000000          jg E与EF.00403332
0040332C     FF45 F8                inc dword ptr ss:[ebp-8]
0040332F     59                     pop ecx
00403330   ^ EB EC                  jmp short E与EF.0040331E
00403332     83C4 04                add esp,4
00403335     68 00000000            push 0
0040333A     BB 08030000            mov ebx,308
0040333F     E8 25010000            call E与EF.00403469
00403344     83C4 04                add esp,4
00403347     8945 EC                mov dword ptr ss:[ebp-14],eax
0040334A     DB45 EC                fild dword ptr ss:[ebp-14]
0040334D     DD5D EC                fstp qword ptr ss:[ebp-14]
00403350     DD45 EC                fld qword ptr ss:[ebp-14]
00403353     DB45 FC                fild dword ptr ss:[ebp-4]
00403356     DD5D E4                fstp qword ptr ss:[ebp-1C]
00403359     DC65 E4                fsub qword ptr ss:[ebp-1C]
0040335C     DD5D DC                fstp qword ptr ss:[ebp-24]
0040335F     DD45 DC                fld qword ptr ss:[ebp-24]
00403362     E8 5BFFFFFF            call E与EF.004032C2
00403367     8945 FC                mov dword ptr ss:[ebp-4],eax
0040336A     8BE5                   mov esp,ebp
0040336C     5D                     pop ebp
0040336D     C3                     retn

Test2子程序的汇编码:

0040336E     55                     push ebp
0040336F     8BEC                   mov ebp,esp
00403371     81EC 24000000          sub esp,24
00403377     C745 FC 00000000       mov dword ptr ss:[ebp-4],0
0040337E     C745 F8 00000000       mov dword ptr ss:[ebp-8],0
00403385     68 00000000            push 0
0040338A     BB 08030000            mov ebx,308
0040338F     E8 D5000000            call E与EF.00403469
00403394     83C4 04                add esp,4
00403397     8945 FC                mov dword ptr ss:[ebp-4],eax
0040339A     C745 F8 00000000       mov dword ptr ss:[ebp-8],0
004033A1     33C9                   xor ecx,ecx
004033A3     41                     inc ecx
004033A4     51                     push ecx
004033A5     81F9 00E1F505          cmp ecx,5F5E100
004033AB     0F8F 2C000000          jg E与EF.004033DD
004033B1     DB45 F8                fild dword ptr ss:[ebp-8]
004033B4     DD5D F0                fstp qword ptr ss:[ebp-10]
004033B7     DD45 F0                fld qword ptr ss:[ebp-10]
004033BA     DC05 04314000          fadd qword ptr ds:[403104]
004033C0     DD5D E8                fstp qword ptr ss:[ebp-18]
004033C3     DD45 E8                fld qword ptr ss:[ebp-18]
004033C6     DC25 0C314000          fsub qword ptr ds:[40310C]
004033CC     DD5D E0                fstp qword ptr ss:[ebp-20]
004033CF     DD45 E0                fld qword ptr ss:[ebp-20]
004033D2     E8 EBFEFFFF            call E与EF.004032C2
004033D7     8945 F8                mov dword ptr ss:[ebp-8],eax
004033DA     59                     pop ecx
004033DB   ^ EB C6                  jmp short E与EF.004033A3
004033DD     83C4 04                add esp,4
004033E0     68 00000000            push 0
004033E5     BB 08030000            mov ebx,308
004033EA     E8 7A000000            call E与EF.00403469
004033EF     83C4 04                add esp,4
004033F2     8945 EC                mov dword ptr ss:[ebp-14],eax
004033F5     DB45 EC                fild dword ptr ss:[ebp-14]
004033F8     DD5D EC                fstp qword ptr ss:[ebp-14]
004033FB     DD45 EC                fld qword ptr ss:[ebp-14]
004033FE     DB45 FC                fild dword ptr ss:[ebp-4]
00403401     DD5D E4                fstp qword ptr ss:[ebp-1C]
00403404     DC65 E4                fsub qword ptr ss:[ebp-1C]
00403407     DD5D DC                fstp qword ptr ss:[ebp-24]
0040340A     DD45 DC                fld qword ptr ss:[ebp-24]
0040340D     E8 B0FEFFFF            call E与EF.004032C2
00403412     8945 FC                mov dword ptr ss:[ebp-4],eax
00403415     8BE5                   mov esp,ebp
00403417     5D                     pop ebp
00403418     C3                     retn

其中两个循环我已经用红色部分标注出来了

明眼人一看就知道后者很显然是调用的浮点指令来实现计算的。自然速度相差10倍也不为过。

我以前也只听到过用整数运算模拟浮点的(搞嵌入式的应该知道多数CPU 包括80386之前是根本不带浮点指令的)。而看到这里另你很好笑:用浮点模拟整数。况且类型定义的时候已经说明了是整数。这个语言也不是一门弱类型语言。实在是不可理解。而且看

004033F2     8945 EC                mov dword ptr ss:[ebp-14],eax
004033F5     DB45 EC                fild dword ptr ss:[ebp-14]
004033F8     DD5D EC                fstp qword ptr ss:[ebp-14]
004033FB     DD45 EC                fld qword ptr ss:[ebp-14]
004033FE     DB45 FC                fild dword ptr ss:[ebp-4]
00403401     DD5D E4                fstp qword ptr ss:[ebp-1C]
00403404     DC65 E4                fsub qword ptr ss:[ebp-1C]
00403407     DD5D DC                fstp qword ptr ss:[ebp-24]
0040340A     DD45 DC                fld qword ptr ss:[ebp-24]

很显然时间 = 取启动时间 () - 时间 这条指令转换尽然也是采用的浮点。

当然很明显 调用格式: 〈整数型〉 取启动时间 () - 系统核心支持库->系统处理 这个系统库也是返回的整数。根本不存在类型无法判断等问题。

我这里都先不说编译器中的表达式优化。以及循环中多用寄存器的问题。

很明显

004033BA     DC05 04314000          fadd qword ptr ds:[403104]
004033C0     DD5D E8                fstp qword ptr ss:[ebp-18]
004033C3     DD45 E8                fld qword ptr ss:[ebp-18]
004033C6     DC25 0C314000          fsub qword ptr ds:[40310C]

这里把 + 2 - 1一五一十的给写上去了。我不相信哪个语言会无法计算这个表达式。包括许多脚本语言在内

我曾经就这个问题问过易语言公司:当然我问的时候大概已经过去2年了吧。当然给我的回答是:

这样实现更简便,并且以后用户有需要可以考虑增加(大概是这样,不是原文,记错了不要怪我 2年多的事情了)。

当然很明显由于E中根本没有异常处理,当然对于溢出,除0等等问题 的确让CPU的浮点指令帮你处理简便很多。

但事隔两年多我依然没有看到有任何改动,以上的代码均为最新的易语言生成的。

当然易公司的解释也很合理:想想也是,只要速度不是满到无法跑的地步当然可以 想想5年前CPU可能才200 兆赫兹而现在 10 倍都有余,自然程序指令慢上10倍也没有什么。但更为具体的是:很明显E的程序基本上绝大部分代码都是C++具体点就是其MFC库。而且由于这个原因因此E的界面库界面库仅可以采用MFC 4.2也就是VC6.0来写。很显然其他语言和后续MFC版本都不再考虑的行列。这个问题我举一个例子就行了:

调用格式: 〈整数型〉 位与 (整数型 位运算数值一,整数型 位运算数值二,... ) - 系统核心支持库->位运算
    英文名称:band
    如两个数值有某共同比特位为1,则返回值的对应位也为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
    参数<1>的名称为“位运算数值一”,类型为“整数型(int)”。
    参数<2>的名称为“位运算数值二”,类型为“整数型(int)”。

操作系统需求: Windows、Linux

调用格式: 〈整数型〉 位或 (整数型 位运算数值一,整数型 位运算数值二,... ) - 系统核心支持库->位运算
    英文名称:bor
    如两个数值中有一个数值的某一比特位不为零,则返回值的对应位就为1,否则为0。返回计算后的结果。本命令为中级命令。命令参数表中最后一个参数可以被重复添加。
    参数<1>的名称为“位运算数值一”,类型为“整数型(int)”。
    参数<2>的名称为“位运算数值二”,类型为“整数型(int)”。

操作系统需求: Windows、Linux
这个系列的命令均是

从系统核心支持库->位运算 看得出来这很明显是调用的核心支持库。当然我们下面还是来验证一下:

位异或 (305419896, 2271560481)

当然这里的两个整数分别对应0x12345678,0x87654321

004032B3     68 01030080            push 80000301
004032B8     6A 00                  push 0
004032BA     68 21436587            push 87654321
004032BF     68 01030080            push 80000301
004032C4     6A 00                  push 0
004032C6     68 78563412            push 12345678
004032CB     68 02000000            push 2
004032D0     BB CC000000            mov ebx,0CC
004032D5     E8 B9010000            call E与EF.00403493

->

00403493   - FF25 2F324000          jmp dword ptr ds:[40322F]                      ; krnln.10029AD4

->

10029AD4   /.  55                   push ebp
10029AD5   |.  8BEC                 mov ebp,esp
10029AD7   |.  A1 58A91310          mov eax,dword ptr ds:[1013A958]
10029ADC   |.  0318                 add ebx,dword ptr ds:[eax]
10029ADE   |.  8D4424 0C            lea eax,dword ptr ss:[esp+C]
10029AE2   |.  83EC 0C              sub esp,0C
10029AE5   |.  50                   push eax
10029AE6   |.  FF7424 18            push dword ptr ss:[esp+18]
10029AEA   |.  33C0                 xor eax,eax
10029AEC   |.  894424 08            mov dword ptr ss:[esp+8],eax
10029AF0   |.  894424 0C            mov dword ptr ss:[esp+C],eax
10029AF4   |.  894424 10            mov dword ptr ss:[esp+10],eax
10029AF8   |.  8D5424 08            lea edx,dword ptr ss:[esp+8]
10029AFC   |.  52                   push edx
10029AFD   |.  FF13                 call dword ptr ds:[ebx]
10029AFF   |.  8B4424 0C            mov eax,dword ptr ss:[esp+C]
10029B03   |.  8B5424 10            mov edx,dword ptr ss:[esp+10]
10029B07   |.  8B4C24 14            mov ecx,dword ptr ss:[esp+14]
10029B0B   |.  8BE5                 mov esp,ebp
10029B0D   |.  5D                   pop ebp
10029B0E   /.  C3                   retn

->

10060CE0    .  8B4424 0C            mov eax,dword ptr ss:[esp+C]
10060CE4    .  8B4C24 08            mov ecx,dword ptr ss:[esp+8]
10060CE8    .  8B5424 04            mov edx,dword ptr ss:[esp+4]
10060CEC    .  50                   push eax
10060CED    .  51                   push ecx
10060CEE    .  52                   push edx
10060CEF    .  6A 02                push 2
10060CF1    .  E8 FAFEFFFF          call krnln.10060BF0
10060CF6    .  83C4 10              add esp,10
10060CF9    .  C3                   retn

10060BF0   /$  8B5424 10            mov edx,dword ptr ss:[esp+10]
10060BF4   |.  8B4424 0C            mov eax,dword ptr ss:[esp+C]
10060BF8   |.  83F8 01              cmp eax,1
10060BFB   |.  8B0A                 mov ecx,dword ptr ds:[edx]
10060BFD   |.  7E 2F                jle short krnln.10060C2E
10060BFF   |.  56                   push esi
10060C00   |.  8B7424 08            mov esi,dword ptr ss:[esp+8]
10060C04   |.  57                   push edi
10060C05   |.  8D78 FF              lea edi,dword ptr ds:[eax-1]
10060C08   |>  8BC6                 /mov eax,esi
10060C0A   |.  83C2 0C              |add edx,0C
10060C0D   |.  83E8 00              |sub eax,0                                     ;  Switch (cases 0..2)
10060C10   |.  74 0E                |je short krnln.10060C20
10060C12   |.  48                   |dec eax
10060C13   |.  74 07                |je short krnln.10060C1C
10060C15   |.  48                   |dec eax
10060C16   |.  75 0A                |jnz short krnln.10060C22
10060C18   |.  330A                 |xor ecx,dword ptr ds:[edx]                    ;  Case 2 of switch 10060C0D
10060C1A   |.  EB 06                |jmp short krnln.10060C22
10060C1C   |>  0B0A                 |or ecx,dword ptr ds:[edx]                     ;  Case 1 of switch 10060C0D
10060C1E   |.  EB 02                |jmp short krnln.10060C22
10060C20   |>  230A                 |and ecx,dword ptr ds:[edx]                    ;  Case 0 of switch 10060C0D
10060C22   |>  4F                   |dec edi                                       ;  Default case of switch 10060C0D
10060C23   |.^ 75 E3                /jnz short krnln.10060C08
10060C25   |.  8B4424 10            mov eax,dword ptr ss:[esp+10]
10060C29   |.  5F                   pop edi
10060C2A   |.  5E                   pop esi
10060C2B   |.  8908                 mov dword ptr ds:[eax],ecx
10060C2D   |.  C3                   retn
10060C2E   |>  8B5424 08            mov edx,dword ptr ss:[esp+8]
10060C32   |.  890A                 mov dword ptr ds:[edx],ecx
10060C34   /.  C3                   retn

很明显的看得出来调用的支持库函数 当然这个支持库函数是VC6.0生成的。

我就在想一个问题了:XOR这个汇编指令里面有什么需要跨平台的地方需要调用外部库吗?

或者这个指令CPU没有需要模拟吗?估计CPU里面就算没有乘法指令也不会没有XOR吧。

这样做很简单啊,不管怎么这条指令只需要的实现只需要在VC中写上100行代码即可表示,何必去花时间来搞编译器呢?反正只需要PUSH PUSH 然后CALL/JMP到库中就完事。

难怪有人天天嚷嚷说易程序老是误报,这还不简单,你发行的EXE中至少70% ++都是采用的VC++ 编写的相同。让杀毒软件自己去区分这30%实在是难为人家了。

更不要说易的IDE 是VC++开发的 也不要说所有的界面库 几乎所有的库都和VC++脱不了干系。让我怀疑易是否在推销VC ++

最后再举一个例子:

看跳转指令的生成:

除了计次循环首 这个固定的结构外

004033AB     0F8F 2C000000          jg E与EF.004033DD

全是Jxx + Long Jmp的形式。明眼人都知道这里2C 明显在 + 127 范围内

当然任何JMP Long Jmp都可以表示(Kernel MODE除外)Jmp Short要加一个判断,多麻烦啦。
不要跟我说这只是编译器的BUG。这个问题我 2 年前就跟易公司提过。只要不是程序出现了  非法操作,估计也没有人管你。

之初说的要跨平台,但是我也不知道界面库采用MFC如何跨?当然只写写命令行调用几个Shell当打包后的脚本语言后也还不错。

当然还有IDE 与Vista的兼容性问题,我也难得说了。反正用的人就知道。Vista由于Aero的原因,控件的矩形区域是不同的,细节决定成败。Vista已经发布马上就一年了。再不兼容我看怎么都说不过去。

还有很多很多地方 我这些也就一一叙述了。但是我想说的是现在马上就是08年  。编译技术的今天和 70时代的时候早已不可比。但代码质量甚至不及当初。实在是难以理解。

其实如果不是因为最近天天吵汉语编程的问题 我也难得提,反正我看WT的 5000万不知道花来干什么来着。

最近花心思来写它的EF。我也就事论事的说吧。

编译器质量相对于E语言是有些提高,具体我也没有去仔细研究。但是我继续陈述事实:

我知道现在很多人都喜欢C++,EF也不例外,从编译器 到 GC 到各种库 依然才用得C++ ,只是方式换了 ,代码可以在GCC编译通过,甚至用了开源的跨平台库。

其实编译器用C++这个没有什么。这个可以理解(当然C 语言编译器也是C语言的)。就算底层GC必须采用到Native 语言也罢了。

但是令人不可理解的是 居然类库依然是大规模普及C++。

当然因为这个原因我还是先装上EF,写段代码来说明问题:

for(;;)
  {
   int a;
   string b="11";
   a=b.到整数();
  }

汇编码为:

0040410E     C745 F8 FB414000       mov dword ptr ss:[ebp-8],临时工程.004041FB
00404115     8D4D F8                lea ecx,dword ptr ss:[ebp-8]
00404118     51                     push ecx
00404119     68 05424000            push 临时工程.00404205
0040411E     E8 8DFFC00F            call 系统.100140B0
00404123     83C4 08                add esp,8
00404126     FF75 F8                push dword ptr ss:[ebp-8]
00404129     A1 48020410            mov eax,dword ptr ds:[10040248]
0040412E     FF90 D0020000          call dword ptr ds:[eax+2D0]
00404134     83C4 04                add esp,4
00404137     8945 FC                mov dword ptr ss:[ebp-4],eax
0040413A     FF75 F8                push dword ptr ss:[ebp-8]
0040413D     E8 BEFFC00F            call 系统.10014100
00404142     83C4 04                add esp,4
00404145   ^ EB C7                  jmp short 临时工程.0040410E

大家可以明显地看得出来依然是调用的系统库。

而很明显系统库是C++ 编写的。

汇编代码如下:

10020A50   /$  8B5424 04            mov edx,dword ptr ss:[esp+4]
10020A54   |.  85D2                 test edx,edx
10020A56   |.  75 03                jnz short 系统.10020A5B
10020A58   |.  33C0                 xor eax,eax
10020A5A   |.  C3                   retn
10020A5B   |>  66:833A 20           cmp word ptr ds:[edx],20
10020A5F   |.  75 09                jnz short 系统.10020A6A
10020A61   |>  83C2 02              /add edx,2
10020A64   |.  66:833A 20           |cmp word ptr ds:[edx],20
10020A68   |.^ 74 F7                /je short 系统.10020A61
10020A6A   |>  33C9                 xor ecx,ecx
10020A6C   |.  56                   push esi
10020A6D   |.  66:8B0A              mov cx,word ptr ds:[edx]
10020A70   |.  83C2 02              add edx,2
10020A73   |.  83F9 2D              cmp ecx,2D
10020A76   |.  8BF1                 mov esi,ecx
10020A78   |.  74 05                je short 系统.10020A7F
10020A7A   |.  83F9 2B              cmp ecx,2B
10020A7D   |.  75 08                jnz short 系统.10020A87
10020A7F   |>  33C9                 xor ecx,ecx
10020A81   |.  66:8B0A              mov cx,word ptr ds:[edx]
10020A84   |.  83C2 02              add edx,2
10020A87   |>  33C0                 xor eax,eax
10020A89   |.  83F9 30              cmp ecx,30
10020A8C   |.  72 1A                jb short 系统.10020AA8
10020A8E   |>  83F9 39              /cmp ecx,39
10020A91   |.  77 15                |ja short 系统.10020AA8
10020A93   |.  8D0480               |lea eax,dword ptr ds:[eax+eax*4]
10020A96   |.  83C2 02              |add edx,2
10020A99   |.  8D4441 D0            |lea eax,dword ptr ds:[ecx+eax*2-30]
10020A9D   |.  33C9                 |xor ecx,ecx
10020A9F   |.  66:8B4A FE           |mov cx,word ptr ds:[edx-2]
10020AA3   |.  83F9 30              |cmp ecx,30
10020AA6   |.^ 73 E6                /jnb short 系统.10020A8E
10020AA8   |>  83FE 2D              cmp esi,2D
10020AAB   |.  5E                   pop esi
10020AAC   |.  75 02                jnz short 系统.10020AB0
10020AAE   |.  F7D8                 neg eax
10020AB0   />  C3                   retn

以上仅举一个例子,包括各类数组操作,等等都是调用C++实现

大家都知道跨平台的首要条件就是越是少调用Native 库。如此这番调用如何实现跨平台呢?

况且这种算法又不是有对系统底层的依赖。实在是难以理解。

调用本地库的原因  要嘛是因为对速度有很高的要求 比如C中strlen strcat实现是用汇编语言。

要嘛 就是有平台依赖性。反正我就想不通是哪一点了

至少C++的这个函数是C++实现的

Delphi的也是包括Java的JDK

甚至C# 的NET 也是。有兴趣自己翻阅代码就知道了。

无法理解EF的这种行为。恐怕只有一种解释,C语言的拿来就用多方便,Ctrl + C AND Ctrl + V即可完成库,

何必要去改呢。

或者说这些必须要调用C语言甚至更底层,地汇编语言 因为EF编译器生成的代码会严重影响效率。

我个人觉得 就算这些库你采用纯ASM甚至机器码。都要好的多,但作为一门语言这样做就很不应该,我知道又有人要说人家Lua Python 这些呢?但是我想说的是EF是编译型本地语言,不是解释语言。运行方式都不同。当然你硬要说这是创新,也没有假。反正就是给大家展示C++多么多么的强大由他诞生了好多好多语言。

个人认为如果EF要给各位看官合理的交待至少这种起码的东西还是要具备的。

不要除了采用开源项目 Ctrl +X 以外就没有其他招了,我们熟知的EF IDE是EF开发的。但是就连官方也是无法解决

for(;;)
  {

代码缩进问题 也就说 {} 缩进后 { 始终会露出来

原因官方自己都说了 由于这个开源项目作者的习惯问题 所以基于这个项目的所有IDE 都是这种风格。隐含的核心很明显就是IDE的核心 依然不是EF。而是C++(猜测,反正不可能是汇编)。

我并不是否认这种做法,但是我觉得作为一个大型商业作品 ,面向的也是 16 亿中国人,这种做法实在是有些不可理解。因为我还没有看到NetBeans或者说Visual Studio 去采用哪个开源作品。

另外我想补充一下我对EF的看法。既然EF的语法和Java,C++这些很类似了,库用法也差不多。也是面向对象化的,且IDE也是这种风格了 而不是老版易特有的填表式风格。那么我就在想:

既然如此用户何必非要来选择EF这个库也少 资料也少,要说跨平台也远不及Java ,C++呢?想必习惯上述两门语法和编程习惯的用户,那几个英文词汇应该不是什么阻力。这只是个人观点,当然易公司既然花了这么大的人力物力肯定有他的原因。姑且理解为填补Java 和 C++之间的空白。既有Java的方面避免C++的困难,但是又可以生成C++的本地代码

当然了 EF的编译质量来说还是基本令人满意的。

不过客观来说 我还是对这个变化有些吃惊(包括寄存器分支预测这些现代编译器技术),会不会又是某个开源作品的功劳呢?就如IDE和界面库一样呢?[界面的一些贴图和Visual Studio实在是太相似了,感觉完全是在用C# 个人感觉而已]

当然仅仅是猜测(毕竟开源作品都是 C Based语言的,会不会和EF的语法结构也有关系呢?),如果真是易公司自主法的话还是令人高兴的。再次声明:纯属猜测,我也知道E有很多FANS。也喜欢注册些用户来当马甲用,我希望你们省省。我不是在搞人身攻击,请你们也自重。

总上,我只能够简单的表示这些易语言和EF 语言的特色为 ‘中国特色’。比如易语言以前不是一直在跟国家取得支持嘛?x63计划?

希望EF不要这样,你有了用户群 自然就有人支持你。希望不要过多地心思花在这上面,同时也希望E公司不要只对C++库充满了兴趣。哪怕是把库改为EF的代码,也总比你把人家的代码编译为DLL供EF调用好点;我看目前EF对支持库开发的C++说明和帮助就甚至比语言本身的帮助自己类库的介绍详细的多。好像是在鼓励别人用C++而不是用EF。

当然了除了否定以外,我觉得我还是比较看好EF的。

本着希望越来越好的心理,虽然我几乎没有说什么表扬的话,但是并不代表就没有值得赞赏的,应该说值得赞赏的地方还是很多的,但重复的言词我也就省省了.

因此不管怎么说也祝顺。

技术层面看《易语言》与《易飞扬》相关推荐

  1. “易写易库(EXEK)”项目启动,用易语言开发易语言支持库

    "易写易库"(EXEK,E Xie E Ku)项目已经启动,用易语言开发易语言支持库.我(liigo)准备用一个月左右的业余时间,完成本项目的一期工程. 用易语言开发易语言支持库, ...

  2. [易语言][转载]易语言支持库内的DES算法分析

    介绍 易语言支持库里有个这样的命令: 〈字节集〉 加密数据 (字节集 字节集数据,文本型 密码文本,[整数型 加密算法]) - 数据操作支持库一->数据加解密 其中加密算法可以选DES以及RC4 ...

  3. c开发 易语言支持库,易写易库-用易语言开发易语言支持库.pdf

    易写易库-用易语言开发易语言支持库 易写易库(EXEK)用户手册 版本:0.2 作者:liigo,/liigo 时间:2008.10 概述 EXEK EXEK "易写易库(EEXXEEKK) ...

  4. c 传入易语言字节,易语言字节集参数传递详解

    易语言多线程之字节集参数传递 传递文本可以直接传递文本的指针,但是字节集却不能这样,看下面直接传递字节集指针的代码: .版本 2 .支持库 spec .支持库 EThread .程序集 窗口程序集1 ...

  5. c 与易语言程序间通信,易语言与三菱PLC通信-FX系列

    PLC以卓越的可靠性和方便的可编程性广泛应用于工业控制领域.实现PC机与PLC通信的目的是为了向用户提供诸如工艺流程图显示.动态数据画面显示.报表显示.窗口技术等多种功能,为PLC提供良好的人机界面. ...

  6. 511遇见易语言学习易语言常量

    简单的说,就是在程序运行时,其值不能被改变的量.是计算机将数据储存到内存中的一种方式,不变是相对于变量而言,没有绝对的不变. 一.了解常量 常量是一种标识符,它的值在运行期间恒定不变.常量是一个固定的 ...

  7. 易语言snmp_易语言教程

    易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言.易语言降低了广大电脑用户编程的门槛,尤其是根本不懂英文或者英文了解很少的用户,可以通过使用本语言极其快速地进入Window ...

  8. c调用易语言串口,易语言串口API源码

    易语言串口API源码系统结构:ReadCommPure,BuildCommDCB,CreateFilea,关闭句柄a,SetCommState,ReadFileA,GetCommState,Write ...

  9. 字符串固定长度 易语言_易语言字符串操作源码

    易语言字符串操作源码 系统结构:字符串_取长度,字符串_取中间,字符串_取左边,字符串_取右边,字符串_替换,到宽字符,到多字节,取文本数据地址,取字节集数据地址,MultiByteToWideCha ...

最新文章

  1. python框架flask系列(2),Python的Web框架之Flask(2)
  2. python 读取大文件_Python读取大文件
  3. cordova指定版本_Cordova 基本命令 以及如何添加,删除插件
  4. mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区
  5. Java内置数据类型
  6. WCF中如何用nettcp协议进行通讯
  7. [机器学习-Sklearn]函数sklearn.feature_extraction.DictVectorizer理解与总结
  8. 活在贫困线之下的开源软件项目——开源的可持续性斗争
  9. linux简单命令3---帮助命令
  10. MyBatis的懒加载(延迟加载)
  11. 根据共享文件夹的权限进行自动映射网络驱动器
  12. iOS开发经验总结(上)
  13. 最长公共子序列(输出公共序列)
  14. 软件测试HW3 主路径覆盖测试
  15. Mybatis Configuration.xml中properties属性定义
  16. 小甲鱼c语言_C语言可以不用,但是不能不会!
  17. 如何生成PSSM矩阵
  18. 联想G480 i3 2348M扩展内存
  19. 帆软软件FineReport考试题库FCRA题库
  20. 微商史上最全软文标题写作套路(收藏版)

热门文章

  1. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】
  2. centos系统时间不对
  3. 如何计算航天器的轨道
  4. 小米6系统 Android版本,追赶华为! 小米开启安卓8.0系统适配, 小米6最先更新!
  5. Polkadot的轻白皮书
  6. 【每日早报】2019/07/12
  7. 转行要趁早!盘点网络安全的岗位汇总
  8. Element UI 和js实现文件的上传和下载
  9. 数学建模美赛E、F题备考策略(自用,大部分复制粘贴)
  10. 如何用最简单的Python爬虫采集整个网站