预处理器和转换器有什么区别?

时间:2017-04-17 21:03:04

标签: css coffeescript preprocessor css-preprocessor transpiler

我正在撰写我的论文,并且无法真正找到任何一个问题的明确答案。
预处理器和转换器(或转换器)之间有什么区别?

在搜索答案时,我已经找到了difference between compiler and transpiler的内容。

例如CSS预处理器(sass,less)和JS转换器(coffee script,typescript)。它们是一样的吗?我的意思是,他们做同样的事吗?

在某些地方,它被称为“JS预处理器”,但是当我谷歌那时,我找不到任何有价值的信息。

现在,我在想,预处理器只是将sass转换为CSS,对浏览器更具“可读性”。并且转换器编译整个过程,从咖啡脚本语言到javascript语言。

所以我就在这里,转换器只是编译整个事物(这是更大的过程),预处理器只是转换为更“可读”?

或者Sass,例如,就像CSS中的不同语言一样,咖啡脚本来自javascript?

提前谢谢!

3 个答案:

答案 0 :(得分:6)

预处理程序

术语预处理器在wikipedia article中定义为:

  

在计算机科学中,预处理器是一个程序,它处理其输入数据以产生用作另一个程序输入的输出。输出被称为输入数据的预处理形式,通常由编译器等后续程序使用。

这是一个用于准备要编译的代码的软件。一个很好的例子是C预处理器。

根据documentation of gcc provided by gnu的C预处理器是:

  

C预处理器,通常称为cpp,是一个宏处理器,C编译器会在编译之前自动使用它来转换程序。

例如,它会查找以#开头的行,并执行以下操作:将其替换为其他文本。

Transpilers

根据this wikipedia文章,转发者是:

  

源到源编译器,转编译器或转换器是一种编译器,它将用一种编程语言编写的程序的源代码作为其输入,并以另一种编程语言生成等效的源代码。

一个例子是巴别塔。 Babel是一个JavaScript转换器,可以将边缘JavaScript转换为可以在任何浏览器(甚至旧版本)中运行的普通旧ES5 JavaScript。

它可以帮助您利用边缘javascript并让它在仍然不支持它的环境中运行,方法是将其转换为它理解的javascript版本。

以下摘自Babel's github page

  

Babel是一款可以帮助您在最新版本的JavaScript中编写代码的工具。当您支持的环境本身不支持某些功能时,Babel将帮助您将这些功能编译为支持的版本。

希望这有帮助!

答案 1 :(得分:0)

我搜索了电子书,并找到了澄清这一点的东西,或者至少我认为是这样。

  

预处理器和转换器是作为HTML的抽象引入的,   CSS和JavaScript作为添加非功能的手段   以源语言提供,保持代码DRY(不要重复   你自己),使代码更易于维护,并节省你的时间。   浏览器无法执行此抽象代码,但构建系统可以   编译成他们可以的东西。

这是来自: 第1章,Stryjewski,T。&毛泽东,J。2016年。发展了一个丰富的优势,第二版。出血边缘按。加利福尼亚州圣罗莎。

答案 2 :(得分:0)

下面引用的史蒂夫·贝克(Steve Baker)的

This answer对此进行了很好的解释。

通常,预处理器以X语言输入代码-以某种方式对其进行转换-并输出X语言代码。

通常,编译器以语言X输入代码-并以机器代码(或可能的汇编语言)输出。

第三类是“编译器”,它以X语言输入代码,并以Y语言(另一种人类可读语言)输出代码。

预处理器的一个很好的例子是C语言预处理器。对C语言了解不多-除了注释和以“#”字符开头的行。

因此,在C语言中,您可以这样说:

#define HW “Hello World”

…之后看到HW的任何地方,都将其替换为“ Hello World”。

还知道诸如

    #ifdef HW 
    ….stuff… 
    #endif 

…这表示如果“ HW”的#define存在,则包括直至#endif的行-否则将其删除。

因此,C预处理器的输入是C代码(一串以“#”开头的行),输出是带有一串替换的C代码,删除了一些代码-其他文件中包括了其他代码,等等。