当前位置:首页 >竞聘副科干部演讲稿 >大神为你分析Go、Java、C等主流编程语言(Go可以替代Java,而且最小化程序员的工作量,学习比较容易) 正文

大神为你分析Go、Java、C等主流编程语言(Go可以替代Java,而且最小化程序员的工作量,学习比较容易)

2023-10-07 10:16:39 来源:演讲稿网作者:宜宾市演讲稿 点击:441次

本文主要分析C、C++98、C++11、Java与Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述下各个语言的特点和不足,对语言选型作为一个客观的参考。

把这些写出来,期望得到大家的指正与反馈,让整个分析更客观,性能方面,着重对Go做深入剖析参考。内容很多,期望不会让你望而却步。

语言整体概要

1、Go

在并发方面,goroutine和channel机制提供了语言层面的轻量级和毫无拖泥带水的并发机制;在性能方面,提供了不弱于Java的性能(性能是个伪命题),而内存资源消耗方面,相对Java和其它动态语言,具备明显的优势;在语法方面,具备了部分Python的动态语言特性,在对象初始化、构造和序列化等方面提供了无比简洁的表述方式,而这些处理代码可能占据10%~50%的代码分量,尤其对于处理数据、配置和协议映射场景,相比C、C++、Java在此方面拙笨,这就是动态语言为何让人着迷的关键所在。

这也是为啥Go语言第一个版本发布时就如此受人瞩目的关键所在,尤其是对于动态语言来说,它提供了动态语言所不具有的并发与性能优势,Pike 设计Go语言目的是想作为C/C++的另外一个可选的角色(注意不是替换,其设计目标不是替换),Go语言之父Google首席软件工程师Pike2012年“大道至简”演讲稿中对于此目标充满沮丧,引用其中一句话:“AlthoughweexpectedC++programmerstoseeGoasanalternative,instead mostGoprogrammerscomefromlanguageslikePythonandRuby.VeryfewcomefromC++.” C++的价值精髓在于:语言提供更加广泛的抽象、优雅和灵活的特性,而这些表达能力是硬件零成本的,而C语言一开始就把硬件零成本作为其设计目的,但语言表述力是C++来解决,Go思考的方向显然不是零成本,至少不是零CPU成本,Go的主张更多考虑的是最小化程序员的工作量。

一个是硬件零成本的极致追求,一个是最小化程序员的工作量,谁都替换不了谁最有价值的部分,Go无法同时符合两个目标,它选择了动态语法和 gc,就注定了它选择开发效率,会为开发效率牺牲硬件效率,所以它走向另外一个方向,也就是Java所擅长的应用方向,尤其是目前的网络和HTPP应用方面,这就需要有良好的标准库和生态系统支持,而在标准库方面,Go已提供了处理tcp/http/xml/json/加解密等更轻量级和优秀的代码库,对网络的核心协议http的高并发支持,已经为它提供了撬动Java的敲门砖。

但是我们必须面对它目前的不足,在其语言重要特性和严谨性方面还远未成熟,还有不少断层或临时解决方案,而这也会影响到其生态的成熟度,这些问题还需要在新版本中解决。Go语言2012年3月28日正式发布第一个版本,截止目前1.7版本发布,差不多一年两个大版本发布,中间还有数个beta与RC版本发布,这也基本能说明Go语言还未完全准备好。

小结

Go已经证明在动态语言需要性能方面,是作为Python和Ruby的理想候选者;在应用开发方面,尤其是HTTP相关应用方面,目前已经是站在 Java面前的一位挑战者,同时在对资源的掌控力不是那么强烈诉求的地方也是C/C++之外提供另外一种角色。

在生产力方面,其语言特性和生态系统还未成熟,版本还在快速迭代中,相比动态语言和Java,并不具有优势,目前阶段是这些语言在某些场景下的可选角色。长期看,在Google的鼎力支持下,新特性和库的应用能力还会不断加入,是一门欣欣向荣的编程语言,但目前阶段,建议必须控制好程序的规模和复杂度,语言和生态还未提供健全的支撑,同时还必须留意它的不成熟和版本快速迭代带来的风险。

2、Java

Java的成功得益于10年前以Unix系统为主的SUN、IBM、Oracle等大型公司的强力支持,这让它在企业应用领域和WEB应用方面站稳了脚跟,而随后的 10年,前半段是靠x86+Linux带来的革命继续保持份额,后半段就是android的成功让其在步履蹒跚停止脚步后再一次登顶。这二十年,Java积累了最强大的生态系统,你可以说它无所不包,毋庸置疑,Java早已是一艘航空母舰的巨大身躯,这足已证明它的地位与成功。但是其语言、库、框架和生态系统的复杂度,对技术人员构筑其巨大的障碍,比如并发方面,语言的synchronized机制,标准库的notify再到concurrent,也可以通过Apache+tomcat容器来获得HTTP等的并,而基于JVM技术,Java又与其它语言具有良好的互操作性,比如并发方面的Scala,可以选择其Actor或者也是用Scala写的Akka,当然业界选择nginx等混搭的场景更多,太多太多…

这就是Java的世界,永远不嫌多,无需要重复造车马,这是Java成功的关键所在,历史沉淀下来的,让Java提供的选项太多,深入后就知道Java的学习成本比C++更高,对程序员的要求比C++更高,除非掉队了,还在用7年甚至10年前的Java技术,技术人员要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是太多的基于Java所开发的平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的,除非语言和标准库提供了最好最直接的选项。

小结

Java早已证明它的无所不包,近十年基本都是排名最好的语言,积累最强大的生态系统。要澄清下一个误区:如今Java的学习成本和对开发人员的技能要求,已经远高于C/C++的,也许大多数的开发人员无法驾驭Java这艘航空母舰。若要长期使用Java,务必跟上Java的最新技术,同时在重用方面一定要拿捏好尺度,这会对人员技能提出更高要求,否则及其容易写出资源占用和运行时效率让人感到恐惧的应用。

3、C、C++98、C++11……

C/C++在嵌入式和系统级编程方面,依然占据着牢固的位置,因为诸如Java和Go等语言的关键发力点显然在开发效率这一侧,参考前面Go一章节的论述。

但是在并发、网络和应用编程等方面,一直处于讳莫如深的黑暗时代,语言本身未提供任何支持,而太单薄的标准库也毫无此方面的野心,C/C++的标准库的规模恐怕始终无法比拟Java与Go,因为C/C++不受任何一家大型商业公司控制而完全是“放养”状态,标准库需要得到大型商业公司持续的投资,这就是为啥C++98的标准库在13年后才获得一次大的更新。这直接导致C/C++必须封装各种硬件平台的系统API,而在linux+x86大面积击败Unix之前,众多的Unix系统更加剧了跨平台编程的难度,2000年前出现一个很糟糕的跨平台的ACE,还有windows平台上充斥大量宏静态全局变量的同样糟糕的MFC库,这些都曾经被程序员当成救命稻草,这些技术显然很快都被历史丢弃,这下可以知道为啥如此多的人对C/C++讳莫如深感到恐惧。而此时Java提供了多线程、网络和应用开发方面的标准库和基于JVM技术的跨平台支持,把Java推向主流编程语言,也就是Java前十年成功的关键所在。

对于C/C++程序员,有一个振奋人心的大事件,C++11发布,相比C++98,无论在语言和标准库上,都是一个极大飞跃,C++之父说它是一门新语言,这不为过,同时如此多的顶尖C++高手对boost库的贡献(其实已是实时上的标准库),在网络、并发编程和一些基本应用方面,已经提供了性能最优秀的库,极大地降低了此方面的开发难度。传统的C++程序员,尽快过渡到C++11上,这需要编译环境的更新,而编译环境更新又会带来内存检测和性能分析方面最强力的工具,C\C++曾经最广受诟病的内存越界与泄露问题,在gcc5.2版本和Intel最新CPU面前,内存飞踩可以被抓在第一现场,同时Intel提供的vtune性能分析工具,是个人目前为止所遇到的最强大工具。

小结

传统的C++程序员,尽快过渡到C++11上,拥抱新的标准库和boost,这会极大提高在嵌入式和系统级编程方面的开发与维护效率。要拥抱全新语言,而语言的重大升级,广义上看也是一门新语言,也要放到同样重要位置,更好地发挥已有资产的产效。而在应用开发方面,由于标准库方面就不要指望它可以匹敌目前阶段的Go,更不要说Java,所以老老实实做好它最擅长的领域。

语言特性

1、并发

Go在轻量级和简洁方面具备最大优势:goroutine和channel机制提供语言层面的轻量级和毫无拖泥带水的并发机制,标准库也提供了基于此的应用库;

在并发世界的混合编程方面,Java提供了最多的选择项和生态支持:十年前java.util.concurrent发布后就已经把Java推向了并发编程高峰,在云化下,Java与Scala等高并发框架和语言具有良好互操作性;

C++11相对于C/C++98,向前迈出了一大步,标准库和扩展库boost库已提供了优秀的跨平台封装,告别对操作系统API的维护,如同10年前Java的 concurrent包发布一样,极大降低了此语言在并发编程方面的跨平台的心智负担,但在线程调度和管理方面,还是需要自己精心维护;

而对于C/C++98来说,仅华为电信软件,有依赖SNE/ENIP、有依赖ACE、有风格各异的自行跨平台封装,尤其是10年前要支持windows、linux、solaris、aix等平台,并发编程的黑暗时代,C/C++的开发难度也多半因为其并发和网络编程,语言和库未提供支撑,必须白手起家。

小结

 

开发难度Go<Java<C++11<C/C98,学习曲线Go<C++11<Java<C/C98。可能有人会疑惑为啥Java比C++11的并发还难学,是因为Java 提供的选择项太多,语言、标准库和其它语言框架互操作方面,要掌握和拿捏好,学习成本非常高昂,否则写出来的程序可能非常低效或者不健壮或者复杂。

2、面向对象

Java、C++、Python均提供了良好的面向对象的语言支持,配合设计模式、类型系统和工具链的支持等,Java和C++具备构建大规模程序所具备的基本要素;Go语言虽然号称支持面向对象,但它是通过方法与interface等间接模拟,无法直接清晰地组织对象结构并初始化销毁它们,与C一样,会充斥大量的全局对象和结构体,管理对象的成本比较高,在构建大规模程序方面,语言能力还比较弱,还需要新的语言特性加入。

3、物理结构组织

物理结构的组织,对于中大规模的程序来说,相比类接口等逻辑结构的表述,具有更至关重要的作用,比如100万行左右的C++代码,如果结构组织不好,影响是战略层面的(逻辑结构组织对于大规模程序影响是战术层面):一行代码变更,编译链接时间可能都是10分钟以上,甚至数小时,仅仅编译和重启耗费的时间可能已击垮整个开发效率。

包:在代码组织方面,包的作用无需要在阐述,Java与Go基本上是天生就具备了此语言特性,而C/C++显然还不具备,C++只有比较弱的名字空间来避免名字冲突(更多的是逻辑结构组织),更多是通过目录、头文件/源文件/HPP文件来组织代码分类,需要非常精心地处理和设计,否则引入循环和混乱依赖是家常便饭,对大规模程序的组织,对人员技能要求更高。

库:在程序运行方面,Java支持jar包的动态加载,具备良好地扩展和升级能力,而C/C++支持静态和动态两种链接方式,但在加载方式方面,基本没有控制力,未能如Java般灵活,Go编译后linux下基本只依赖libc库,不支持动态链接,只支持静态链接,最终编译出一个兼容gdb格式的执行程序,在部署方面具有极简配置,但必须控制程序规模,否则在作业域可能会带来联动升级。

小结

Java在此方面是最优的,而C++必须要谨慎处理,Go 介于两者之间。

4、类型系统和泛型

Java/C++均支持强类型的编译时检测,提供了编译时的类型安全,便于发现低级的类型错误,同时支持泛型,便于表述通用的算法和容器;Go 语言支持Python的动态语法,在处理类型申明定义方面代码更简洁,但类型方面稍弱,目前阶段还不支持泛型,这为表述通用的算法和容器方面带来了极大障碍和类型不安全,需要通过interface{}来模拟,如同C语言世界的void*,或者10年前没有泛型的Java,其对象都继承自Object,当然interface{}不只是对象或数据结构类型,Java的历史已经证明此路不通,迟早会走到泛型,所以 Go 语言只是目前阶段不支持而已,长期看应该是支持的,其发明者也说过,目前还未找到好的支持办法。

小结

Go 还需要语言层面的新特性加入,相信这也是迟早的,在泛型方面,目前这几门语言中,C++11是做得最好的,Java次之,而C++98在处理泛型类型方面常常会遇到晦涩和极难处理的语法错误。

5、初始化

初始化对于程序的健壮性、灵活性和可读性,是至关重要一环,程序无法在各种复杂场景下良好地对变量赋值,其结果可想而知。

Java做得比较好,有良好的gc,面向对象,不支持全局变量,数据成员支持分阶段的初始化,未显示赋值也有明确含义的初值,而类加载过程中也可以控制类、jar包之间的复杂依赖关系。

C在初始化方面的语言支持是最原始的,贬义点来说就是“最糟糕的”,不支持面向对象,全局变量、自由函数和没有明确含义的初值带来了大量程序问题。

C++支持得比较好,面向对象,这几门语言中唯一支持对象的析构和RAII,在复杂对象和对象协作之间的初始化管理方面具有最强控制力,而C++11 引入了auto与decltype等偏动态点的特性,让C++表现得更好;但是同时兼容C语言的糟糕初始化,如果像C一样用C++,结果与C语言一样,而这可能很普遍,这也是C++被诟病的地方,这是继承C语言资产带来的其中一个负面,可以做得很好,也可能做得非常非常糟糕。

Go 在初始化方面,Go借鉴了Python部分动态语言,在变量、数组、struct、list和map等结构方面,相信看过的都会为其简洁点个赞。但目前还需要更多的版本催熟:gc相比1.5之前版本已经有较大提升,目前还不支持构造和析构,而defer一定程度上模拟了,但相比C++的RAII和Java的对象、finally等机制,还不成熟,很容易引入诸如性能和资源泄漏方面的缺陷;初始化不统一,New、make、{}等各种特定领域的初始化方式,这也是暴露Go的语言设计方面还不成熟的一方面,要知道Java与C++、C只需要一个new或者malloc。

6、错误处理

错误处理对于复杂逻辑的组织和程序的健壮性,是至关重要的,比如一个简单的读文件,C语言处理需要打开文件,判断打开结果;读取数据,判断读取数据结果;把数据映射为对象,判断每个参数结果….,就知道错误处理是多么地繁琐。

健全的编程语言Java/C++/Python/C#等无疑都把异常处理放在第一优先位置。可惜Go目前还不支持,而是通过多值返回错误码方式,或者panic– recover机制,让错误处理代码充满整个逻辑,相比C的错误返回,有时候可能更糟糕。

7、动态语法

为啥要把动态语法作为一个关键项呢,相信用过Python等的,不考虑其它运行效率因素,无疑会对其简洁耳目一新,尤其是在对象初始化和构造方面,而这是程序代码中可能占据10%甚至50%代码的地方,尤其对于处理数据、配置和分析的系统。

Go借鉴了Python的部分动态语法,在反射的配合下,相比传统的JAVA、C++的拙笨,是一个大的提升,当然此方面还需要不断提升,尤其字符串和类型兼容方面,断层还比较多,无疑在做数据处理方面,相对Java、C++、C,Go 是更好的选择。

8、其它重要语言特性

运算符重载对于可扩展的类型运算来说,无疑是最优雅的;函数重载对于增量维护开发和支持各种简便调用来说,也是必不可少的;lambda已经是健全的通用语言C++11/Java/python/C#的必选项,lambda在数据的初始化和控制逻辑表述方面,无疑是一个利器…… Go 语言还不支持这些重要的语法特性,需要后续版本增强。

生态

1、标准库

Java的标准库无疑是最成熟最强大的,提供了拿来即用的高可复用的类和库,无需要重复造车马,这是Java成功的关键所在,但Java发展至今,其语言、类库和框架早已经是一艘航空母舰,且围绕其JVM不断有新技术新库涌现,要掌握拿捏好的学习成本是最高昂的,许多Java程序员其实掉队了,如同C++一样,可能还在使用7年前甚至10年前的Java技术,Java应用领域,必须跟上新技术步伐,同时要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是一些平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的。

Go除了提供雷同C++11标准库和boost库的基础能力,同时在应用库方面,尤其是网络和WEB编程,提供了支持并发的优秀库,如果对于C++的应用能力薄弱和java的庞大感到恐惧,无疑Go是需要面对一个好的选择。

C++11,并发编程等已经纳入到标准库,同时实时上的标准扩展库boost无疑提供了基本的应用复用能力,C++11在做跨平台并发和网络应用编程方面,完全可替代传统的C/C++98,让曾经的黑暗年代往前迈出一大步。但是在做WEB、数据库和数据分析等企业应用开发方面,C++11的库还是非常地单薄。

2、工具链

C/C++/Java的工具链,就不用详细叙述了,从编辑器、代码浏览跳转、调试、代码文档自动生成、复杂度度量、findbug、内存排查、性能监控等已经非常鉴权,华为的CI环境也提供该了良好支持,就不详细叙述了。

重点审视Go语言,开发环境通常会选择Eclipse或者LiteIDE,选择Eclipse,麻烦就许多,由于Greatwall的原因,不能直接获取插件:Go工程需要 GoEclipse、代码跳转需要gocode、代码调试需要装gdb,这些都单独下载下来,健全点还需要安装guru和godef,有些需要做编译,安装Eclipse的Go的健全环境,看个人情况,差不多要0.5~2天就能工作了,所以推荐LiteIDE,它的包里基本都有,装上差不多也能用了。但是这些环境只能简单用,开发工作中会遇到许多重要体验问题,如下:

编辑阅读重要体验欠缺

代码浏览:没有代码的对象、函数、变量的全局浏览和查找功能,只能一个个文件地打开进去看,这对于大型工程,文件多,文件大,习惯了 Eclipse、sourceinsight和.net,没有浏览,会抓狂;代码搜索和跳转:不能打印名字,函数类接口等能够自动罗列出来,而前后跳转功能基本上也不能用,对于大型工程又是个重大体验丢失;其它重要体验:无重构工具、无代码自动生成工具、编译错误不能随见随得……

代码调试重要体验欠缺

Windows的调试依赖gdb,gdb在windows环境不大可靠,所以不要期望它在windows环境能够如期工作良好,调试就最好到linux环境下,或者写print 打印到控制台,习惯Windows环境滋养的,恐怕又要适应下新的非图形化环境。

动静态检测工具欠缺

缺乏圈复杂度、codex套件安全检查(可以直接调用C/C++的代码)、内存检查(可直接使用指针和调用C代码)。

小结

基本能用,但是一些提高效率的重要体验丧失,目前阶段如果给Java/C++的开发环境打5分,Go的环境,目前只能给2分,且Go一年差不多2个大版本,对开发环境也是个重要的挑战(Java/C++甚至用5年甚至10年前的环境),公司要做的工作还非常多,且要管控其版本快速迭代带来的切换冲击。Google公司在还未成熟就早早开源的目的之一就是期望业界能够提供更多工具,而工具基本都是开源世界贡献,而Android基于Java开发,所以Google能直接拿来用,而Go作为一门全新语言,在开发环境方面,Go目前还未及格。

3、语言流行度和开源项目分析

说到语言,必然会想到TIOBE、PYPL和GitHub的排名,我们看看它们的数据:

TIOBE数据

语言的热度必然得看权威的TIOBE世界语言排名,2016年6月最新数据排行榜:

新语言Go的最新排名是48位,与Java的热度差距是100倍。2年前的2014年7月,Go语言排名30位,指数是0.222%,2015年7月Go未排入前50,2016年最近5月排名分别是:50+、38、48、44和42。

近三十年语言热度排行榜:

 PYPL的最新数据

GITHUB的数据

开源社区,挑选最具代表的github上的开源语言排名:

点评

主流编程语言始终具有强大的生命力,Java、C、C++、C#、Python、JavaScript、PHP从近十年数据看,都未离开过前十名,其它语言扮演的是在某些情况下的一种可选角色,注意不是替代这些主流语言,因为目前还未见它们衰落的迹象。

Java近十年始终是王者;C/C++地位也始终稳固,在嵌入式、系统级编程方面始终占据统治地位,在动态语言方面;Python的简洁和生态让它占据着胶水语言的角色,当然也有用它来写不那么苛求性能的服务端程序;而网站,PHP和JS就不用多说了,70%的网站依然是用PHP写的。

Go2009年正式版本离发布还有两年就掀起了一阵子热潮,正如Go语言的之父所说,创造了另外一种角色,在Python/Ruby需要性能时的一种可选角色;而相对于Java,它创造了更轻量级更高效率的一种角色,为撬动史前巨兽Java提供了敲门砖,但是语言、标准库和工具链的成熟度牵扯到关键的生产力,这方面它还未准备,而在性能方面,作为新语言,它的调度器也未准备好,还有诸多性能陷阱,看另外一篇文章单独论述。

4、行业应用

对于Java、C、C++,前面已有说明,在生产力方面,Java已经无所不包的航空母舰了,而在苛求性能方面,C/C++依然占据着牢固的地位。对于Go,的确已经证明了它在需要性能时是Python与Ruby这些脚本语言的一个选项,而这些动态语言脚本基本应用在管理域:环境资源应用的监控和部署等,也有些把它们拿来做服务端开发,而在苛求性能时,这些语言的确就不擅长了;在Java/C/C++所擅长的领域,成功的应用太多太多,Go在某些场景下,比如数据分析或HTTP应用方面,它是一种可选的角色,而在通用和复杂应用业务域,无论语言、生态和成熟度,都未准备好。Go要做的工作还很多,还需要更多地迭代。

其它业界主流语言简要

Python/JavaScript/C#近十年,也是最流行的语言之一,与Java/C/C++/PHP语言一样在各自领域独领风骚,而这些语言在部门也或多或少有应用,但由于非业务模块,重视度没那么高,其实页面、工具和管理域,涉及到重要体验问题,还是需要引起足够重视,否则积累的代码多了,可维护性和体验都会带来越来越大的负担。

1、Shell/Python

历史遗产及其惯性,安装、部署、升级和监视管理任务等方面,基本还在使用cshell或bshell脚本,shell的语法深晦,可读性极差,同时编辑调试环境都是最原始的,开发和维护效率基本都是最低的,而这些非业务部件,平时都是三不管的,积累的代码也不少,要专人熟悉shell的维护。而Python在处理字符串、容器和环境方面,是本文所列的语言中,最简洁生产力最高的语言。

建议作业域的脚本尽量用Python,在管理域,胶水语言的名号无出其右,而Python基本也是排行榜前五的语言。

2、JavaScript/Typescript

JavaScript可以说是最流行的网页脚本语言了,但它的设计有两个一直被诟病的缺陷,一是太简单;二是弱类型,语法错误到运行时才会发现,应该没人没遇到过网页不知为啥跳出一个警告框的情况吧。当JS代码超过万行时,它的简单语法和弱类型会给维护人员带来巨大的负担,个人只写过几百行的JS页面,对弱类型基本无法忍受,以前也下载过新浪这样的复杂门户网站看JS代码,说实话,深入不下去,直接放弃。Typescript出现,刚好是为了解决JavaScript这两个设计缺陷。

对于Typescript,或许习惯JavaScript会拒绝它的面向对象等增强表达力的语言特性,觉得是让简单变复杂。但另外一个特性,也就是免费为JavaScript增加编译时的类型检查,相信没有人会拒绝这样的特性,就跟写文章指出错误的做法。所以写JS页面的,还是切换到TS这个超集。

3、C#

C#在华为就更小众了,但它也是最流行的语言之一,而真真能挑战Java地位就是C#,可惜微软把它禁锢在windows系统,也限制了世界最顶尖的语言和编译器专家丹麦人AndersHejlsberg的影响力,C#目前正在逐步走向开源,同时它依附于目前最强大的集成环境.net也在走向开源。

(稿源:华为开发者社区)

http://www.oschina.net/news/78737/go-java-c

作者:巴音郭楞蒙古自治州演讲稿
------分隔线----------------------------
专业代写演讲稿
  • QQ号:1367771518
  • 微信:yjgfw_51yjg
  • 邮箱:51yjg@163.com
  • 手机:18911358095
热点演讲稿
推荐演讲稿
演讲稿排行榜
专业代写演讲稿
  • QQ号:1367771518
  • 微信:yjgfw_51yjg
  • 邮箱:51yjg@163.com
  • 手机:18911358095