国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

編程語言的支撐體系:構建系統、IDE 和依賴管理

開發 前端
年關(annual review)將近,這一段時間,我在梳理 2020 年做的一些事情,并試著制定下一年的計劃。

 [[357633]]

年關(annual review)將近,這一段時間,我在梳理 2020 年做的一些事情,并試著制定下一年的計劃。過程中,我發現我做的一些事情,或是工作相關,或是興趣上的探索,還都可以繼續總結出一些文章。在工作上,很多一部分做的事情就是編程語言的支撐體系。外加業余時間里,和同事一起花了一些時間在研究編程語言。在這幾部分的結合之下,我對于整個體系的端到端實現有一個整體的認識。

作為一個職業的程序員,在我們的職業生涯里,不可避免地要學習一個又一個的編程語言。雖然多數情況下,我們對于使用什么語言并沒有太多的選擇權。但是,當我們選擇一門語言時,都要考慮一系列的要素,比如:

  1. 構建系統
  2. IDE/Editor 支撐
  3. 依賴管理
  4. ……

PS:當然了,對于那些使用 C/C++ 的人來說,這些可能都是例外:他/她覺得自己不需要這些工具,需要的時候可以自己創造一個。所以,這些語言在很長的一段時間里,都缺乏良好的依賴管理工具。

故事開始之前,讓我們讓 Android 使用的開發和構建來講述這個過程。

從 Android 應用的開發與構建說起

在移動端開發上,雖比不上這個行業的諸多大佬,但我也算是頗有經驗的。而恰好一年中有一半的時間,都在相關的項目上。所以,我從宏觀上了解了整體的體系。

當我們開始一個新的移動應用時,會從 IDE 里通過模板創造一個嶄新的應用,又或者是從某個地方(如 GitHub)尋找合適的模板。而后,為驗證模板的有效性,我們通過執行 Gradle 的相關命令,完成一個應用的過程,運行這個 Demo。(PS:這一點與我們使用 Java 開發應用時,并沒有太大區別)。

這個過程中,發生了這么一些事情:

  1. IDE 通過某種通訊機制,與 Gradle 進行通訊,以執行對應的命令,如 build。
  2. Gradle 接收到 IDE 的指令后,解析 build.gradle 相關的內容,尋找是否存在對應的 Task,如這里的 build。
  3. 執行 build 時,首先要去解決依賴關系,如從對應的 Maven 倉庫中下載依賴。
  4. 隨后,真正地執行對應的構建任務,如調用 javac。

這個過程看上去非常簡單,但是背后還藏著諸多的細節問題。

構建與依賴管理

當我用 CLOC 工具統計了一下 Gradle 工具的源碼時,我才發現這個工具并不簡單。而進一步地,在半深入源碼之后,我發現構建系統還是頗為復雜的。一個簡單的 Java 應用就分為這么一些步驟:

  1. :compileJava UP-TO-DATE 
  2. :processResources UP-TO-DATE 
  3. :classes UP-TO-DATE 
  4. :run 

而當我們有依賴的時候,需要添加上 classpath,即將依賴添加到編譯的路徑中。而對于一些非 .jar 類型的依賴而言,如 .war,構建工具還要支持對他們的解析。因此,整體的過程就是:

  1. 判斷是否存在本地的依賴,如果沒有的話,從遠程獲取。如果有依賴沖突的話,解決這些沖突,或者報錯。
  2. 獲取依賴后,根據需要對依賴進行處理。如 Android 中的 aar 包的解壓等。
  3. 結合依賴,對源碼進行編譯
  4. 將所需要的 Java Resources 從依賴的 Jar 拷貝到指定目錄
  5. 打包構建后的產物到一個新的 jar 包中

這些只是表面上的一些工作。而為了更好地表述這個過程,需要抽象出一個 task 的概念,在這個概念里,一個 task 有輸入和輸出。如

  1. 解析依賴里。它的輸出是 build.gradle 文件,輸出是處理完的依賴路徑。
  2. 編譯任務里。它的輸入是源碼,輸出是 .class 文件。
  3. 打包任務里。它的輸入是一堆文件夾或者文件,輸出是一個 .jar 包。
  4. ……

于是,在有了這些基礎之后,為了加快構建,還需要緩存的機制。它對輸入和輸出進行計算,當兩者發生變化的時候,再進行編譯。否則就跳過這個任務。

而這些只是核心功能,在非核心的功能區里,還有諸如于 SDK 版本、多輸入多輸出的變體等等。

IDE 與構建系統

在那篇《編程語言的 IDE 支持》中,我們已經介紹了編程語言所需要的 IDE 功能,諸如于:

  1. 語法高亮
  2. 子系統關聯與集成
  3. 跳轉與引用分析
  4. 智能感知
  5. 重構
  6. 快速修復
  7. 結構化視圖
  8. ……

在這篇文章中,大概再回顧一下它與構建系統之間的關系。IDE 與構建系統一般會存在這種關聯:

  1. 解析構建系統中的任務。如 Gradle 提供的 task,又或者是 package.json 中的 scripts,并將它們顯式地展示出來,如 IDEA 中的 line marker,又或者是獨立的 Gradle pannel。
  2. 執行構建任務。即在 IDE 中的 UI 與構建命令相綁定,典型的如 IDEA 中的 Android 應用的構建。
  3. 動態修改構建系統(可選)。如 IDEA 中的更新依賴版本,它依賴于解析構建系統的 DSL,并更新對應的 DSL。

對應的有兩種機制可以與構建系統通訊:

  1. 由構建系統提供構建 API。如 Gradle Tooling API,在那篇《Gradle IDEA 的項目模型》中,我們實際上介紹了由構建系統主動向 IDE 提供模型的方式。
  2. 由 IDE 構造一遍構建系統。如 IDEA 對于 Node.js 的處理方式。

簡單來說,就是復雜的系統應該由構建系統提供機制,而簡單的構建系統則就不會有這樣的問題。

依賴管理的基礎設施

不同語言對于依賴的管理機制都有所不同,但是它們的原理都是相似的:

  1. 源碼包。即將源碼打包,并以特定的格式發布,適用于腳本語言
  2. 倉庫源。方式類似于源碼包,唯一不同的地方是借助于版本管理工具,如 Golang。
  3. 類二進制包。典型的是 Java
  4. 其它包。如 Maven 可以支持其它自制的包

最有意思的是Maven 的機制,我可以自制依賴,并上傳上去。而整個倉庫并不關心這個包的內容,我們只需要依賴于它定義的格式即可。如果我們考慮圍繞語言來設計依賴管理體系,那么可以考慮的是類似的方式,并借助于 Git 這樣的版本工具。這樣一來,我們就可以去中心化。

本文轉載自微信公眾號「 phodal」,可以通過以下二維碼關注。轉載本文請聯系 phodal公眾號。

 

責任編輯:武曉燕 來源: phodal
相關推薦

2017-03-07 10:46:00

2016-03-21 17:53:43

道普網

2020-10-13 06:34:15

編程語言IDE

2023-06-29 18:12:12

2016-04-01 10:47:27

浪潮

2018-08-31 19:36:03

2009-07-01 11:55:00

國家部委IT運維管理體系

2023-11-06 12:07:10

生成式人工智能生成式 AI

2017-12-12 17:53:59

數字化轉型CIO

2012-11-20 10:20:57

Go

2014-08-05 14:38:59

移動互聯網

2021-03-09 10:06:34

大數據畫像數據采集

2023-10-17 19:37:34

昇騰

2017-03-21 12:45:36

5GMEC網絡

2015-09-15 13:52:33

2024-02-23 09:00:00

編程語言編譯器工具

2024-07-04 12:10:50

2017-08-23 11:51:42

優锘眼鏡猴

2023-10-07 15:49:09

RustIDE工具
點贊
收藏

51CTO技術棧公眾號

在线视频观看你懂的| 精品久久久久久久久久| 精品剧情在线观看| 欧美日韩另类丝袜其他| 亚洲图片你懂的| 成人av.网址在线网站| 99色在线观看| 亚洲午夜免费电影| 青草青青在线视频| 在线视频精品| 91av在线视频观看| 蜜桃av成人| 亚洲欧美日韩天堂| 九色porny在线观看| 亚洲国产精品一区| 欧美jizz18性欧美| 亚洲视频免费在线观看| 亚洲第一会所| www.日日操| 亚洲精品女人| 日本人成精品视频在线| 女人天堂av在线播放| 精品福利免费观看| 第四色亚洲色图| 成+人+亚洲+综合天堂| 欧美人xxxxx| 成人av国产| 欧美激情亚洲综合一区| 欧美亚洲人成在线| 亚洲视频在线看| 超碰成人av| 日韩精品高清在线| 最新中文字幕在线播放| 欧美哺乳videos| 91在线中文| 日韩欧美激情四射| av网站在线免费看推荐| 欧美精品日韩一本| 日本中文字幕在线观看| 日本高清不卡在线观看| 偷拍自拍在线| 欧美在线999| 欧美另类极品| 欧美精品乱码久久久久久| 3p视频在线观看| 欧美网站一区二区| 无遮挡亚洲一区| 欧美日韩加勒比精品一区| 一级黄色免费在线观看| 国产专区精品| 亚洲一区二区av电影| 日本福利在线观看| 成人教育av在线| 波多野结衣家庭教师在线| 99riav国产精品| 午夜久久久久| 欧美精品视频www在线观看| 国产精品 欧美在线| 激情另类小说区图片区视频区| 亚洲自拍小视频| 偷拍亚洲精品| 78色国产精品| 97超碰在线公开在线看免费| 97在线影院| 国产亚洲福利| 蜜臀久久99精品久久久酒店新书 | 最新国产一区| 亚洲不卡中文字幕| 一区二区在线观看不卡| 丁香六月综合| 国产成人aa精品一区在线播放| 精品1区2区3区4区| 国产av天堂无码一区二区三区| 国产精品国产自产拍在线| 91女主播在线观看| 国产精品一区二区久久精品| av在线免费不卡| 韩国成人免费视频| 97超碰在线播放| 欧美国产日韩在线观看| 欧美bbbxxxxx| 91久久久久久| caoporn国产精品| 中文在线免费视频| 欧美精品亚洲精品| 欧美日韩在线观看一区二区| 欧美裸体在线版观看完整版| 99久久国产综合精品五月天喷水| 精品一区二区三区电影| 理论片午午伦夜理片在线播放| 欧美国产日韩一区二区| 成人av电影在线观看| 在线观看欧美日韩电影| 男人天堂网站在线| 亚洲女人天堂成人av在线| 亚洲视频999| 日韩情爱电影在线观看| 国产精品永久免费视频| 国产精品你懂的在线欣赏| 成人亚洲免费| 韩国日本在线视频| 欧美性受xxxx黑人猛交| 亚洲精品大片www| 欧美日韩亚洲一区三区| 国产在线观看黄| 97人人干人人| 91免费精品国自产拍在线不卡| 欧美一级免费播放| 久久久久久久久久国产| 亚洲综合一区二区| 国产婷婷精品| 国产精品久久久久久久久久齐齐| 无码少妇一区二区三区芒果| 日韩**中文字幕毛片| 国产日产亚洲精品系列| 成人在线视频www| 亚洲最大成人免费视频| 国产精品亲子乱子伦xxxx裸| 不卡在线一区二区| 日韩欧美一起| 国产九九在线观看| 国产精品男人爽免费视频1| 国产精品99一区二区三区| 国产尤物91| 欧美理论片在线观看| 欧美特黄级在线| 九一九一国产精品| 欧美sss在线视频| 欧美9999| 亚洲第一图区| 亚州av电影免费在线观看| 视频免费观看| av在线www| 国产精品一二三区视频| 东凛在线观看| 美女视频免费一区| cao在线视频| 黑人精品视频| 9i看片成人免费高清| 欧美亚洲韩国| 日本免费一区二区视频| 国产96在线亚洲| 久久中文字幕av| 亚洲性人人天天夜夜摸| 欧美国产高清| 久久资源在线| 久久精品一区八戒影视| 亚洲日韩视频| 任你躁在线精品免费| 国产专区视频| 伊人av综合网| 不卡一区在线观看| 国产视频亚洲| 国产成人手机高清在线观看网站| 高清视频在线www色| 91a在线视频| 国产精品成人免费在线| 国产一区91精品张津瑜| 今天的高清视频免费播放成人| 欧美日本三级| 91成人精品在线| 老**午夜毛片一区二区三区| 亚洲人成人一区二区在线观看| 日韩亚洲国产中文字幕欧美| 国产精品久久久久影院日本| 日韩成人av电影在线| 日本在线免费观看视频| www.久久99| 99re这里只有精品首页| 欧美精品一区男女天堂| 久久久久成人精品免费播放动漫| 日本a√在线观看| 日韩视频一区二区三区四区| 国产一区二区成人久久免费影院| 91精品国产综合久久蜜臀| 91免费在线观看网站| 伊人网站在线| 久久影院一区| 婷婷成人激情在线网| 欧美激情三级免费| 免费久久一级欧美特大黄| 中文字幕一区二区三区免费视频| 欧美大陆国产| 国产高清在线精品| 欧美先锋影音| 一区在线不卡| 99久久精品免费观看国产| 人人干视频在线| 2019中文字幕免费视频| 欧美成人精品二区三区99精品| 婷婷综合久久一区二区三区| 一本一道久久a久久精品逆3p| 久久精品中文字幕一区二区三区 | 国产精品成人a在线观看| 97精品久久久久中文字幕| 亚洲伦理中文字幕| 中文字幕制服丝袜在线| 国产高清自产拍av在线| 国产大片一区二区| www日韩中文字幕在线看|