资料来源: Ward Cunningham翻译是代码从一种语言到另一种语言的转换。 使用特殊的编译器(transcompiler),可以将一种通用编程语言转换为任何其他通用编程语言。
如果您需要切换到另一种语言,则编译器将帮助开发人员保存大多数现有代码,而无需手动重写整个代码。 例如,将程序从Python 2转换为Python 3时,或将软件从旧API迁移到新API时。
术语“反编译器”和“反编译器”通常可以互换使用,但仍
认为存在差异。 例如,要将C ++代码转换为C,您需要一个编译器,而要转换Python-Ruby,则需要一个反编译器。
Babel for JavaScript是一种编译器,而
TypeScript是一种经编译的语言。
有时,在由运输商进行转换之后,为了正确执行代码,需要进行手动配置,而在反编译语言中,代码必须能够正常工作而无需更改。 今天,我们将讨论这些以及其他内容,但是最重要的是,我们将讨论开发人员可以在日常工作中使用的流行跨项目。
前端翻译
转换是前端开发的重要组成部分:随着新功能在浏览器中缓慢出现,已经创建了具有实验功能的语言,这些语言可以转换为与浏览器兼容的语言。
在每个项目中使用自己的JavaScript引擎的浏览器开发人员还负责蓬勃发展的JavaScript跨语言。 结果,浏览器具有不同的性能,实现自己的JavaScript函数集,并以不同的速度完全符合规范。
Sass ,
Less和
Stylus使创建CSS代码
变得容易。 因此,Sass具有灵活的语法,逻辑(每个@@),数学(可以添加数字,线条和颜色),因此,所有丰富的代码都转换为常规的CSS红宝石程序。
更少(Leaner样式表)看起来与CSS相同,但具有便捷的添加方式:变量,mixin,算术运算(如Sass)等。
手写笔是用Node.js编写的,与Sass和Less的语法有所不同。 但是实际上,这三种语言彼此非常相似,因此,只要选择其中任何一种,都不会弄错。
在CoffeeScript中说“你好,世界!”,这可能更简单:
alert "Hello, World!"
长期以来,
CoffeeScript一直是
最受欢迎的 JavaScript项目。 这不足为奇:将可访问性(文档适合放在一页上),功能功能(括号,缩进等)和纯Ruby启发的语法相结合,该语言为开发人员提供了许多自由度,并使JS更具表达能力。
主TypeScript:
let message:string = "Hello World" console.log(message)
TypeScript是JavaScript的竞争项目,JavaScript是一种脚本语言,并带有可选的静态类型。 与JS不同,它使您能够更全面地描述对象和类的属性和方法,从而无需验证方法或函数中包含的所有参数。
有一种观点认为JavaScript是一种具有基本缺陷的语言。 否则,很难解释专门纠正其缺陷的跨语言的流行。 除了上述项目之外,还有一种灵活的Web编程语言
Dart ,JavaScript
Closure Compiler中的JavaScript
编译器以及许多其他解决方案,您可以在“
在JS中编译的语言列表 ”页面上找到这些内容。
转换为C
2006年,出现了
Vala项目,该项目由两种语言组成:Vala和Genie,它们翻译最常见的C代码,然后将其编译成可执行文件或库。
Vala语法与C#非常相似,但为了与GObject系统更好地兼容而进行了修改,而Genie与Python有很多共同之处。 现在,第一语言比Genie更常见,因此让我们仔细看一下。
您为什么需要这样的项目? 许多开发人员希望使用高级语言为GNOME编写应用程序和库,但是由于种种原因,我们不能或不想使用C#或Java。 使用Vala,您可以快速创建复杂的面向对象的代码,并支持标准C API和具有低内存需求的ABI。
C#和Java库不能与C语言和其他语言的本机GObject库以相同的方式使用,也不能将它们视为GNOME平台的一部分。 Valac,Vala转编译器,从Vala源文件创建C文件,就像您直接在C中编写库或应用程序一样。从C应用程序使用Vala库与使用任何其他基于GObject的库没有什么不同。
我们将文件读写到Vala:
voidmain () { try { string filename = "data.txt";
您可以在
站点上熟悉其他代码示例。
从Flash到多平台
Haxe与Vala同时创建,但旨在在Flash,JavaScript和Neko中进行转译。 有了这样的技能,该语言注定要灭绝,但它不仅得以幸存,而且获得了极大的普及。
成功的秘诀是多平台。 随着时间的流逝,Haxe已发展成为功能强大的工具集,可支持反编译成各种语言和平台,包括JavaScript,C ++,C#,Java,JVM,Python,Lua,PHP和Flash。
Haxe是一种现代的高级强类型编程语言。 同时,它非常简单和实用,因此编译可以适应各种目标平台。 它的语法基本上是ECMAScript标准,但是如果需要可以更改。
Haxe上的“ Hello World”:
class Main { static public function main():Void { trace("Hello World"); } }
在JavaScript中,这些代码行将如下所示:
haxe -main HelloWorld -js HelloWorld.js
在Java中,如下所示:
haxe -main HelloWorld -java path/to/java/out
大多数Haxe代码被组织为类和函数,使其成为类似于Java,ActionScript 3和C#的OOP语言。 但是,Haxe的设计注重实用性和语法易用性。
关于转译者
- C2Rust和Corrode是从C迁移到Rust的两个绝好的机会。
- VOC是从Python 3.4+到Java的传输器,它将帮助您基于Python代码创建Android应用程序。
- 对于不喜欢Java或只喜欢Java的人来说, Lombok是一个有趣的解决方案。 这是一个编译器插件,可以向Java添加新的“关键字”,并将注释转换为Java代码,从而减少了开发工作并提供了附加功能。 例如,它允许在常规Java代码中使用val关键字(C#中的var的类似物)。
- Bridge.NET允许您在JavaScript中使用C#性能,以及强大的VisualStudio IDE和标准.NET工具(例如msbuild,重构,单元测试,静态分析,代码可视化,FxCop)。
- Grumpy将Python代码转换为Go表示形式,并允许您在Go运行时环境中无缝运行Python程序。 该项目消除了解释器的全局锁定问题,该问题不允许并行执行多个代码线程。
当然,还有许多其他编译器。 传统上,您可以在评论中谈论自己喜欢的工具。
结论
还有很多其他语言,因此对于您的项目,您始终可以选择最合适的一种。 但是,需要代码到代码转换的情况并不少见,因为从C ++到C,从PHP到C ++以及“ JavaScript中的任何内容”转换都经常发生。
从一种语言到另一种语言的“翻译”是一个好主意,但前提是可以清楚地预测和使用结果而没有风险。 因此,从COBOL到Java的转换非常困难,因为在JDK 1.4之前的Java中
,没有 内存映射文件 。 输出中的文章中提到的C2Rust和Corrode提供了一个非惯用的代码,标记为不安全并填充了原始指针。