当前位置:首页 » 编程软件 » 儿童编译器的种类

儿童编译器的种类

发布时间: 2022-12-11 13:33:11

㈠ 谁知道c语言各个编译器优缺点越详细越好

编译器种类很多,最主流的还是turbo和VC,主流的东西可参考资料多,建议用这两个。但VC好用些,图形环境。

㈡ 编译器如何分类

凭机器多分类,就看你个人的

㈢ 什么是编译器

编译器

编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。这时我程序把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。

[编辑]编译器工作方法
首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,我们也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候我们需要把多个文件产生的目标文件进行链接,产生最后的代码。我们把一过程称为交叉链接。

一个现代编译器的主要工作流程如下:

* 源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)

工作原理

编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器言)。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

编译器种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。

预处理器(preprocessor)

作用是通过代入预定义等程序段将源程序补充完整。

编译器前端(frontend)

前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a, =, b , +, c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

编译器后端(backend)

编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

编译器分析(compiler analysis)的对象是前端生成并传递过来的中间代码,现代的优化型编译器(optimizing compiler)常常用好几种层次的中间代码来表示程序,高层的中间代码(high level IR)接近输入的源程序的格式,与输入语言相关(language dependent),包含更多的全局性的信息,和源程序的结构;中层的中间代码(middle level IR)与输入语言无关,低层的中间代码(Low level IR)与机器语言类似。 不同的分析,优化发生在最适合的那一层中间代码上。

常见的编译分析有函数调用树(call tree),控制流程图(Control flow graph),以及在此基础上的变量定义-使用,使用-定义链(define-use/use-define or u-d/d-u chain),变量别名分析(alias analysis),指针分析(pointer analysis),数据依赖分析(data dependence analysis)等等。

上述的程序分析结果是编译器优化(compiler optimization)和程序变形(compiler transformation)的前提条件。常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。

机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)的策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令(instruction selection),如何合并几句代码成一句等等。

㈣ JIT编译器的分类

事实上,JIT编译器分成两种:经济编译器和普通编译器。 普通JIT编译器则是缺省的运行时配置,它会对其产生的代码进行即时优化。这样做无形中给予了.NET超出传统预编译语言的一个优点:预编译语言只能对其处理的代码将要运行于其上的平台做一番大致的事前估计。
JIT编译器可以经过准确调节达到当前运行时状态,结果可以完成一些预编译语言无法完成的工作:更高效地利用和分配CPU寄存器。在适当的情况下实施低级代码优化,比如常量重叠、拷贝复制、取消范围检查、取消常规副表达式以及方法内联等
在代码执行期间监控当前的物理和虚拟内存需求从而更高效地利用内存
产生特定的平台指令以准确、充分地利用实际的处理器模式
NET编译的结果就是JIT所带来的额外负载要求并没有产生显着的性能损失。 JIT Compiler(Just-in-time Compiler) 即时编译
最早的java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。针对这个问题,业界首先开发出JIT(just in time)编译器。当Java执行runtime环境时,每遇到一个新的类别(class:类别是Java程式中的功能群组),类别是Java程式中的功能群组-JIT编译器在此时就会针对这个类别进行编译(compile)作业。经过编译后的程式,被优化成相当精简的原生型指令码(native code),这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。基于对JIT的经验,业界发展出动态编译器(dynamic compiler),动态编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据“历史资料”做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。
JIT 页面渲染引擎
JIT 页面渲染是 COMSHARP CMS 为了实现网站内容即时更新而开发的页面生成技术,JIT页面渲染引擎直接从数据库获取网站最新内容,瞬间生成页面输出给访问者,并通过 URL 转写技术实现纯静态地址。JIT 页面渲染技术是针对传统 CMS 生成静态 HTML 文件而言。传统 CMS 由于使用脚本代码模板技术,页面生成前,需要将数据库中的页面内容用外部模板进行解析与渲染,导致严重的性能问题,为了解决这个问题,传统 CMS 一般采用生成 HTML 静态文件技术,即,在内容创作完成后,对全站的内容执行一个静态 HTML 文件生成过程,最终,全站内容以静态 HTML 文件的形式存在。静态 HTML 文件技术最显着的优势是性能出众,然而这种技术最严重的问题在于,用户对站点任何修改与更新,必须首先经过一次全站 HTML 文件重新生成过程,然后才能被访问者看到。根据不同 CMS 产品的性能和站点规模,这个 HTML 生成过程可能长到十几分钟到几十分钟或更长。也有个别 CMS 产品使用触发式页面渲染模式,即内容更新后,并不立即生成 HTML 文件,而是在用户第一次访问该页面时,触发生成该页面的 HTML 文件,这种技术的问题在于,用户第一次访问被更新页面的时候,可能经历非常漫长的等待,因为站点内各个页面之间并非孤立的,他们可能相互引用,虽然访问的只是一个页面,为了对引用页面同步更新,需要重新生成 HTML 文件的页面可能有多个。JIT 页面渲染如何工作?下图,是 COMSHARP CMS JIT 渲染引擎与传统 CMS 生成 HTML 静态页面模式对比。可以看出,JIT 渲染引擎直接将网站最新内容从数据库渲染给访问用户,而传统 CMS 的站点内容在到达访问用户之前,首先要经历一个 HTML 的转换过程。COMSHARP CMS JIT 页面渲染如何实现毫秒级的渲染速度?COMSHARP CMS 在页面渲染的时候,JIT 引擎可以在数十毫秒的时间内容完整整个页面的生成,这样就保证用户访问的时候,不会因 JIT 渲染造成延迟。事实上,COMSHARP CMS 网站访问速度只取决于服务器带宽,页面生成过程带来的延迟可以忽略不计。我们有两项技术保证这样的性能:编译级主题模板COMSHARP CMS 的编译级主题模板直接内嵌在系统的 DLL 中,主题模板的套用是在运行时(Run Time)完成,这和传统 CMS 的调用脚本代码模板解释运行是截然不同。

㈤ 计算机程序设计语言分为四类

计算机程序设计语言分为四类

为了让计算机解决实际问题,人们从一开始就不断地开展程序设计工作,这里的“程序”就是计算机能够执行的指令代码(机器码和其它代码)。程序设计人员还必须在一个被称为“计算机程序设计语言(也可以称为编译或解释性语言)”的环境中开展编程。

计算机程序设计语言

是指程序设计人员和计算机都可以识别的程序代码(包括0和1机器代码)规则,是人与计算机进行交流的工具,可以把程序设计语言分为以下四类。

1.机器语言

机器语言是一种CPU指令系统, 被称为CPU的机器语言, 它是CPU可以识别的一组由0和1序列构成的指令码。用机器语言编程序, 就是从所使用的CPU的指令系统中挑选合适的指令,组成一个指令序列。这种程序可以被机器直接理解并执行,速度很快,但由于不直观、难记、难以理解、不易查错、开发周期长,很难推广应用下去,因此,只有专业人员在编制对于执行速度有很高要求的程序时才采用这种代码。

2.汇编语言

为了减轻编程者的劳动强度,人们使用一些用于帮助记忆的符号来代替机器语言中的0、1机器指令代码序列,使得编程效率和质量得到极大的提高。把这些助记符组成的指令系统称为汇编语言。汇编语言是指令与机器语言指令基本上是一一对应的。由于这些助记符号不能被机器直接识别,所以汇编语言代码程序必须被编译成机器语言程序才能被机器理解和执行。编译之前的程序被称为“源程序”,编译之后的被称为“目标程序”。

汇编语言与机器语言都是因CPU的不同而不同, 所以统称为“面向机器的语言”。使用这类语言,可以编出效率极高的程序,但对程序设计人员的要求也很高。他们不仅要考虑解题思路,还要熟悉机器的内部结构,一般的人很难掌握这类程序设计语言,还是不能大范围推广应用。

3.面向过程的语言

面向过程思想是一种以过程为中心的编程思想,是以什么正在发生为主要目标进行编程。面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

把解题的过程看做是数据被加工的过程,这种程序设计语言称为面向过程的程序设计语言。常用的面向过程的语言有C、Fortran、Basic、Pascal等。使用这类编程语言,程序设计者可以不关心机器的内部结构甚至工作原理,把主要精力集中在解决问题的思路和方法上。这类摆脱了硬件束缚的程序设计语言被统称为高级语言。高级语言的出现大大地提高了编程效率,使人们能够开发出越来越大、功能越来越强的程序。要运行使用面向过程语言编制的程序,一般有两种方法:(1)解释型,(2)编译型。

解释型语言在程序编制完成之后,按照程序编排的顺序一条条地把指令语句转换为机器代码然后执行。因为每次运行中每条语句都要进行转换和执行这两个步骤,所以解释型语言的执行速度不快,并且每次执行都离不开语言环境。

编译型语言在程序设计完成之后,使用语言本身提供的编译(Compile)程序与连接(Link)程序把源程序编译连接成为可执行文件(扩展名一般为“.exe”)。可执行文件就能脱离语言设计环境独立运行了。当前比较流行的程序设计语言多数是编译型的。也有些语言既可以解释型地运行程序,也可以对程序进行编译连接。

解释型运行往往用在程序的调试过程中,而设计完成之后就可以把它编译成为独立的可执行文件。

计算机只能识别0、1,并不能能识别其他的语言。程序员在开发的时候,可以使用很多种语言,如c语言,java,python。使用不同的语言开发出来的程序,如果想要执行,那么最终必须要变成机器语言才能执行。那怎么样变成机器语言,我们大家可以找一个翻译。这个翻译就专门负责把编写的代码翻译成机器能够识别的机器语言,叫做编译器,不同的编译器,就负责把不同的语言翻译成计算机能够识别的机器语言来,这个就是编译器的作用。

根据编译器对源代码翻译的方式不同,编译器分成两种类型,一种类型叫编译器。而另一种类型叫做解释器。

使用编译器编译的语言,通常称为编译性语言,而使用解释器解释的语言叫做解释性语什么又是编译性语言,什么又是解释性语言?

这两种语言到底是怎么工作的?最典型的代表就是C语言、C 这种语言都叫做编译性语言。编译性语言是怎么工作的,人们来看c语言或者C 的程序在自己的开发环境内来编写代码。那当程序开发完成之后,成员就把开发完成的源代码统一交给编译器。编译器对所有源代码进行翻译。翻译成机器语言,并且最终保存成一个可执行的文件,当我们需要执行这个文件的时候,在windows下最常见的操作就是双击一下可执行文件的图标,就可以把这个文件交给CPU去执行。编译性语言的特点,程序员在自己的开发环境内开发程序开发完成之后,统一交给编译器。编译器统一进行翻译,并且最终生成一个独立的可执行文件。用户在需要的时候,就可以执行可执行文件看到最终的效果。

解释性语言的特点,python语言就是一个解释性语言,那解释性语言在开发的时候,跟编译性语言并没有太大的区别,成员仍然是在自己的开发环境内来编写代码。假设现在写了三行代码,那这三行代码怎么运行啊?要想运行解释性语言,我们就把这个源程序丢给解释器。解释器拿到源程序之后,会按照从上向下的方式逐一读取代码中央解释器称一行一行来翻译的。首先读出第一行代码,就立刻翻译成机器码。翻译完成之后,就丢给CPU去执行CPU在执行的过程中,解释器在读取第二行代码进行翻译。翻译完成之后,再交给CPU去执行,然后依次类推,从上到下一次读取每行代码读取一行。翻译一行执行一行。

编译性语言是统一编译一次性执行。

解释性语言是一行一行代码进行翻译,翻译一行执行一行,编译性语言最终产生的文件执行速度快,解释性语言执行速度慢。因为最终生成的可执行文件中不需要任何的介入。

解释性语言不同。解释语言在执行的时候,必须是翻译一行执行一行。解释性语言的执行速度就相对慢一些,需要考虑的因素就所谓跨平台,就是我们开发完成的程序,既可以在windows上运行,也可以在linux上运行,还可以在MAC上运行一次编写在任何一个平台上都能运行,这种方式就叫做跨平台。

如果我们使用的编译器是在windows平台上编译的程序,那么最终生成的可执行文件只能在windows平台上运行,它并不能够在linux上运行,并不能也不能在MAC上运行,这个是编译性语言的特点。如果使用某一个操作系统的编译器,那么,这个编译器最终生成的可执行文件就只能在这个操作系统上运行,而不能在其他操作系统上运行。

解释性语言相对来说就简单了,程序员仍按照习惯的方式来编写代码,程序编写完成之后,如果想要执行,如果是windows,就在windows上安装一套windows的解释器,如果想在linux上执行呢,就在linux上安装一套linux的解释器,就是在不同的操作系统上安装不同的解释器。既然在每个操作系统上都已经安装了解释器,那源代码就不需要任何的修改。这个就是解释性语言在跨平台上的优势。至于程序的执行是解释器的工作,只需要在不同操作系统中安装不同的解释器同一份代码就可以在不同操作系统中执行了。

开发完成的源程序要想执行,就必须找一个翻译性语言要找的翻译叫做编译器,解释性语言要找的翻译叫做解释器,而从执行效率上讲,编译性语言执行效率要比解释性语言执行效率高,但是从跨平台来讲解释性语言跨平台能力要比边形语言跨平台能力要强好。

4.面向对象的程序设计语言

随着像Windows这样具有图形用户界面的操作系统的广泛使用,人们又形成了一种面向对象的程序设计思想。这种思想把整个现实世界或是其一部分看做是由不同种类对象(Object)组成的有机整体。同一类型的对象既有共同点,又有各自不同的特性。各种类型的对象之间通过发送消息进行联系,消息能够激发对象做出相应的反应,从而构成了一个运动的整体。采用了面向对象思想的程序设计语言就是面向对象的程序设计语言,当前使用较多的面向对象语言有Visual_Basic、C++、Java等。

面向对象语言:是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。面向对象语言:系统中的基本构件可识认为一组可识别的离散对象,在基本层次关系的不同类中共享数据和操作。

Python是一个完全面向对象的语言,那什么又是面向对象?

面向对象是一种思维方式,同时也是一门程序设计技术。程序员每天的工作是使用自己熟悉的语言来解决一个又一个问题,那在解决问题的时候,有两种方式,第一种方式要解决这个问题,自己一步一步把这个问题解决掉,自己来逐步的解决一个问题。第二种方式就是面向对象的这种解决问题的方法,用面向对象来解决一个问题的时候,通常我们要首先考虑由谁(这里指对象,而其具备解决该问题能力)来做。找一个别人来帮助自己做事情,而我们找到了这个对象,已经具备了解决这个问题的能力。这个对象做完之后,问题也同样得到了解决。这个就是面向对象的解决方法。

第一种方式自己逐步来解决问题的每一个步骤,第二种方式我们来找一个对象替自己做事情,对象又具有做这件事情的能力。

如果开发程序,当然更倾向于第二种方式。找个对象来完成,这个思路就是面向对象的思维方式。在做事情的时候,找一个具有能力的对象,帮我们把问题解决掉就好了。这个就是从思维方式角度所谓面向对象的概念。

python是一个完全面向对象的语言。在python中,无论是函数,模块,数字以及字符串等等等等,全部都是对象。在python中所有的东西都是对象,python这门语言中已经提供有各种各样,具有很强大能力的对象。在工作中遇到不同的问题,就找不同的对象来帮我们解决问题就可以。这个是python面向对象语言的一个特点,同时大家在看第二个特点。Python应用一个强大的标准库,所以强大的标准库在python这门语言中已经内置有非常非常多,是具有强大能力的对象。当在开发时遇到不同的问题,可以在标准库中来找不同的对象,帮我们把问题解决掉就好,在python的标准库中提供有类似于系统管理,网络文本处理等,它的功能还是非常强大的。第三个特点:Python社区提供了大量的第三方模块,什么又是第三方模块?所谓第三方模块就是跟标准库类似的一个库,但是第三方模块并不是由官方来开发的,而是由网络上非常非常多python爱好者来开发的。那这些爱好者为什么要开发第三方模块原因很简单,因为标准估虽然很强大,但是标准库的力量有限,而全世界有非常多的python爱好者以及开发团队或者公司。针对当今市场上最主流的一些应用技术开发有非常多的模块,把自己开发好的这些模块开源出来。这些模块都涉及到哪些领域,分别包括有科学计算,人工智能机器学习,以及web开发大数据等。在python社区中有大量的第三方模块,而这些第三方模块在使用的,基本的方式是跟标准库类似的,python这门语言既有一个能力非常强大的标准库,又有一个非常非常丰富的第三方模块。那么,作为python的成员在开发的时候是不就非常容易了。面向对象的思维方式,就是在做事情之前,先找一个具有能力的对象,帮我们来解决问题。而python的标准库也好。Python第三方模块也好,实际上内置有大量的具有强大能力的对象,我们在使用python进行日常开发时,只需要从标准库中或者第三方模块中找到。能够帮我们解决问题的对象,并且使用对象已经具有的能力,通常就可以快速的把我们日常开发中需要解决的问题搞定了,Python提供有强大的标准库和第三方模块。在开发时,只需要找到相应具有能力的对象,就可以解决日常工作中遇到的问题了。

程序设计语言的支持环境

操作系统是计算机最重要的一类软件,其他程序的运行都要在操作系统支持与控制下进行。设计者编制的源程序并不能直接操作计算机,而要在要具体的程序设计语言的支持下通过操作系统来完成。它们之间如何相互配合,因语言、操作系统、计算机硬件的不同而不同。大多数情况下,编程人员没必要关心程序每一个细节。

㈥ 编译器的种类

编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如: 自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如FORTRAN的DOALL指令)。 编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。
一般说来所有的编译器分析,优化,变型都可以分成两大类: 函数内(intraproceral)还是函数之间(interproceral)进行。很明显,函数间的分析,优化更准确,但需要更长的时间来完成。

㈦ 编码器和译码器的区别介绍(分类,工作原理,二进制

编码器是把多个低电平有效信号或多个高电平有效信号,转换成多位二进制数输出。例如,有8个按键,每按一个键,输出与按键编号对应的三位二进制数,如按3号键,则输出011二进制数。
译码器的工作原理与编码器刚好相反,把多位二进制数转换成多个单电平有效信号输出。例如,3线-8线译码器,把三位二进制数,000~111,译码输出8个信号,Y0~Y7。译码器分为通用译码器和显示译码器两种。

热点内容
中国有ip6服务器吗 发布:2025-07-04 17:58:56 浏览:724
第六章编译原理答案 发布:2025-07-04 17:37:55 浏览:39
php内存优化 发布:2025-07-04 17:25:54 浏览:662
威纶触摸屏如何设置时间限制密码 发布:2025-07-04 17:25:50 浏览:418
python列表的遍历 发布:2025-07-04 17:24:20 浏览:22
编译基本块 发布:2025-07-04 17:23:06 浏览:748
scl语言编程 发布:2025-07-04 17:23:05 浏览:991
oracle用户连接数据库连接 发布:2025-07-04 17:20:20 浏览:939
我的世界纯生存服务器推荐死亡不掉落 发布:2025-07-04 17:06:14 浏览:348
方舟编译器可以用于p20吗 发布:2025-07-04 17:00:17 浏览:786