久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

10 個(gè)最終編譯成 JavaScript 的腳本語(yǔ)言

瀏覽:4日期:2023-11-12 10:17:15

與簡(jiǎn)單的網(wǎng)站相比,現(xiàn)代應(yīng)用程序有更多 不同的需求 。但是,瀏覽器是一個(gè)擁有(大部分)固定技術(shù)的平臺(tái),而且JavaScript仍然是web應(yīng)用程序的核心語(yǔ)言;需要在瀏覽器中運(yùn)行的任何應(yīng)用程序都必須用該語(yǔ)言實(shí)現(xiàn)。

我們都知道JavaScript并不是實(shí)現(xiàn)所有任務(wù)的最佳語(yǔ)言,當(dāng)遇到復(fù)雜的應(yīng)用時(shí),它可能就不太適合。為了避免這個(gè)問題,已經(jīng)創(chuàng)建了幾種新的語(yǔ)言和現(xiàn)有語(yǔ)言的變體,它們都生成可以在瀏覽器中運(yùn)行的代碼,而無需編寫任何JavaScript代碼,也不用考慮語(yǔ)言的局限性。

文中介紹了10個(gè)有趣的語(yǔ)言,這些語(yǔ)言都可以轉(zhuǎn)換成JavaScript代碼在瀏覽器中執(zhí)行,也可以在Node.js這樣的平臺(tái)上執(zhí)行。

Dart 是一種經(jīng)典的面向?qū)ο笳Z(yǔ)言,其中所有事物都是對(duì)象,任何對(duì)象都是類的實(shí)例(對(duì)象也可以充當(dāng)函數(shù))。它專門用于構(gòu)建瀏覽器、服務(wù)器和移動(dòng)設(shè)備的應(yīng)用程序。它由谷歌維護(hù),并且是 驅(qū)動(dòng)下一代 AdWords 用戶界面的語(yǔ)言 , 而 AdWords 是給谷歌創(chuàng)造收入的最重要的產(chǎn)品,這本身就是在證明其大規(guī)模的力量。

該語(yǔ)言可被翻譯成 JavaScript ,以便在瀏覽器中使用,或者由 Dart VM 直接解釋執(zhí)行,這也允許你構(gòu)建服務(wù)器應(yīng)用程序??梢允褂?Flutter SDK 創(chuàng)建移動(dòng)應(yīng)用程序。

復(fù)雜的應(yīng)用程序還需要一組成熟的庫(kù)和專門為此任務(wù)而設(shè)計(jì)的語(yǔ)言特性,而 Dart 包含所有這些庫(kù)和特性。一個(gè)流行的庫(kù)的例子是 AngularDart ,Angular 的 Dart 版本。

它允許你編寫類型安全的代碼,而不會(huì)太有侵入性;你可以編寫類型,但你不需要這樣做,因?yàn)樗鼈兛梢员煌茢喑鰜?。這允許創(chuàng)建快速原型,而不必過度考慮細(xì)節(jié),但一旦你的原型可以工作,你可以添加類型以使其更加健壯。

關(guān)于虛擬機(jī)中的并發(fā)編程,Dart 使用所謂的 Isolates 連同它們自己的內(nèi)存堆,來代替共享內(nèi)存線程(Dart 是單線程的),使用消息實(shí)現(xiàn)通信。 在瀏覽器中,這個(gè)事件稍有不同:你并不是創(chuàng)建新的 isolates, 而是創(chuàng)建新的 Workers 。

// Example extracted from dartlang.orgimport ’dart:async’;import ’dart:math’ show Random;main() async { print(’Compute π using the Monte Carlo method.’); await for (var estimate in computePi()) { print(’π ? $estimate’); }}/// Generates a stream of increasingly accurate estimates of π.Stream<double> computePi({int batch: 1000000}) async* { var total = 0; var count = 0; while (true) { var points = generateRandom().take(batch); var inside = points.where((p) => p.isInsideUnitCircle); total += batch; count += inside.length; var ratio = count / total; // Area of a circle is A = π?r2, therefore π = A/r2. // So, when given random points with x ∈ <0,1>, // y ∈ <0,1>, the ratio of those inside a unit circle // should approach π / 4. Therefore, the value of π // should be: yield ratio * 4; }}Iterable<Point> generateRandom([int seed]) sync* { final random = new Random(seed); while (true) { yield new Point(random.nextDouble(), random.nextDouble()); }}class Point { final double x, y; const Point(this.x, this.y); bool get isInsideUnitCircle => x * x + y * y <= 1;}

開始使用Dart

TypeScript

TypeScript 是 JavaScript 的超集;有效的 JavaScript 程序也是有效的 TypeScript 程序,但后者添加了靜態(tài)類型。其編譯器也可以充當(dāng)從 ES2015+ 到當(dāng)前實(shí)現(xiàn)的轉(zhuǎn)譯器,所以你總能獲得最新的功能。

不同于許多其他語(yǔ)言,TypeScript 保持 JavaScript 的精神完好無缺,只增加了功能來提高代碼的可靠性。這些是類型注釋,以及其他類型相關(guān)的功能,使得編寫 JavaScript 更加愉快,這得益于啟用了靜態(tài)分析器等專門的工具來幫助重構(gòu)過程。另外,類型的添加改進(jìn)了應(yīng)用程序不同組件之間的接口。

類型推斷受到支持,因此你不必從一開始就編寫所有的類型。你可以編寫快速解決方案,然后添加所有的類型以獲取對(duì)代碼的信心。

TypeScript 也支持高級(jí)的類型,如 intersection(交集) 類型 、 union(并集、聯(lián)合) 類型、 類型別名、 可區(qū)分聯(lián)合(discriminated union)和類型保護(hù)。你可以在 TypeScript 文檔 站點(diǎn)的 高級(jí)類型 頁(yè)面中查看所有這些類型。

如果你使用 React,則還可以通過添加 React 類型來支持 JSX。

class Person { private name: string; private age: number; private salary: number; constructor(name: string, age: number, salary: number) {this.name = name;this.age = age;this.salary = salary; } toString(): string {return `${this.name} (${this.age}) (${this.salary})`; }}

Elm 是一種純粹的函數(shù)編程語(yǔ)言,它編譯成 JS、 HTM L和 CSS。 你可以只使用 Elm 構(gòu)建一個(gè)完整的站點(diǎn)。這使之成為 JavaScript 框架如 React 的一個(gè)很好的替代方案。用它構(gòu)建的應(yīng)用程序會(huì)自動(dòng)使用虛擬 DOM 庫(kù),使其速度非常快。其一大優(yōu)點(diǎn)是內(nèi)置的體系結(jié)構(gòu),它使你忘記了數(shù)據(jù)流,而將重點(diǎn)放在數(shù)據(jù)聲明和邏輯上。

在 Elm 中,所有函數(shù)都是純粹的,這意味著它們將總是對(duì)給定輸入返回相同的輸出。除非你指定,否則它們不能做任何其他事情。例如,為了訪問遠(yuǎn)程 API,你將創(chuàng)建 command (命令)函數(shù)來與外界通信,以及創(chuàng)建 subscription (訂閱)以偵聽響應(yīng)。純粹性的另一點(diǎn)是,值是不可變的;當(dāng)你需要某樣?xùn)|西時(shí),你創(chuàng)建新值,而不是修改舊值。

Elm 的采用可以是漸進(jìn)式的;可以使用 ports (端口) 與 JavaScript 和其他庫(kù)進(jìn)行通信。雖然 Elm 尚未達(dá)到版本 1,但它正被用于復(fù)雜和大型的應(yīng)用程序,使其成為復(fù)雜的應(yīng)用程序的可行的解決方案。

Elm 最具吸引力的功能之一是初學(xué)者友好的編譯器,不是生成難以閱讀的消息,而是生成代碼,可以幫助你修復(fù)你的代碼。如果你在學(xué)習(xí)該語(yǔ)言,編譯器本身就可以大有助益。

module Main exposing (..)import Html exposing (..)-- MAINmain : Program Never Model Msgmain = Html.program{ init = init, update = update, view = view, subscriptions = subscriptions}-- INITtype alias Model = Stringinit : ( Model, Cmd Msg )init = ( 'Hello World!', Cmd.none )-- UPDATEtype Msg = DoNothingupdate : Msg -> Model -> ( Model, Cmd Msg )update msg model = case msg ofDoNothing -> ( model, Cmd.none )-- VIEWview : Model -> Html Msgview model = div [] [text model]-- SUBSCRIPTIONSsubscriptions : Model -> Sub Msgsubscriptions model = Sub.none

開始使用 Elm

PureScript

PureScript 是由 Phil Freeman 創(chuàng)建的純函數(shù)式強(qiáng)類型的編程語(yǔ)言。它旨在給可用的 JavaScript 庫(kù)提供強(qiáng)大的兼容性,在精神上類似于 Haskell,但保持 JavaScript 的核心。

PureScript 的一個(gè)強(qiáng)項(xiàng)是它的極簡(jiǎn)主義。它不包括在其他語(yǔ)言中被認(rèn)為是必需的功能的任何庫(kù)。例如,不是編譯器本身包含生成器和 promises,而是你可以使用特定的庫(kù)來完成任務(wù)。你可以為所需功能選擇想要的實(shí)現(xiàn),這樣可以在使用 PureScript 時(shí)實(shí)現(xiàn)高效和個(gè)性化的體驗(yàn),同時(shí)保持生成的代碼盡可能小。

其編譯器的另一個(gè)顯著特征就是能夠在保持與 JavaScript 的兼容性的同時(shí), 用庫(kù)和工具生成整潔和可讀的代碼。

像其他語(yǔ)言一樣,PureScript 有自己的構(gòu)建工具叫做 Pulp,可以與 Gulp 進(jìn)行比較, 但是用于以這種語(yǔ)言編寫的項(xiàng)目。

關(guān)于類型系統(tǒng),與 Elm不同,即另一種 ML 式的語(yǔ)言,PureScript 支持高級(jí)類型的功能,如取自 Haskell 的 higher-kinded types(高級(jí)類類型) 以及 type classes(類型類), 從而允許創(chuàng)建復(fù)雜的抽象。

module Main whereimport Preludeimport Data.Foldable (fold)import TryPureScriptmain = render $ fold [ h1 (text 'Try PureScript!') , p (text 'Try out the examples below, or create your own!') , h2 (text 'Examples') , list (map fromExample examples) ] where fromExample { title, gist } = link ('?gist=' <> gist) (text title) examples = [ { title: 'Algebraic Data Types', gist: '37c3c97f47a43f20c548'} , { title: 'Loops', gist: 'cfdabdcd085d4ac3dc46'} , { title: 'Operators', gist: '3044550f29a7c5d3d0d0'} ]

開始使用 PureScript

CoffeeScript

CoffeeScript 是一種語(yǔ)言,旨在公開 JavaScript 的良好部分,同時(shí)提供更整潔的語(yǔ)法并保留語(yǔ)義。雖然該語(yǔ)言的流行度近年來一直在減弱,但它正在改變方向,現(xiàn)在正在獲得一個(gè)新的主要版本,為 ES2015+ 的功能提供支持。

你用 CoffeeScript 編寫的代碼被直接翻譯為可讀的 JavaScript 代碼,并保持與現(xiàn)有庫(kù)的兼容性。從版本 2 開始,編譯器將產(chǎn)生與最新版本的 ECMAScript 兼容的代碼。例如,每次你使用一個(gè)類,你就獲得一個(gè) JavaScript 類。另外,如果你使用 React,也有好消息: JSX 與 CoffeeScript 兼容。

來自:https://www.oschina.net/translate/10-languages-compile-javascript

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 偷拍自拍第一页 | 欧美在线播放一区 | 天堂免费在线观看视频 | 国内外成人在线视频 | 狠狠色综合色综合网络 | 国产精品第一区第27页 | 国产精品美女久久久久aⅴ国产馆 | 久久久久国产视频 | 亚洲精品一区二区三区四区高清 | 久久久精品视频免费观看 | 中文字幕在线观看精品视频 | 99中文字幕 | 国产伦精品一区二区三区在线 | 91在线精品视频 | 在线免费中文字幕 | 亚洲欧洲精品一区二区 | 国产高清精品一区 | 欧美一区在线观看视频 | 日韩成人av在线 | 久久精品视频免费看 | av在线日韩 | 亚洲网站免费观看 | 亚洲h视频在线观看 | 国产精品一二区 | 国产精品成人一区二区三区夜夜夜 | 久久久中文字幕 | 久久久久国产亚洲日本 | 国内精品99 | 日韩精品在线一区 | 国产网站视频 | 一区二区三区久久 | 美女h在线观看 | 日韩视频在线观看 | 国产一区二区在线电影 | 国产精品不卡视频 | 国厂黄色片 | www国产亚洲精品久久网站 | 欧美性一区二区三区 | 国产精品久久久久久久久 | 在线国产一区 | 杨门女将寡妇一级裸片看 |