【文章內容使用 Gemini 1.5 Pro 自動翻譯產生】
Google Summer of Code 2022 成果
Google Summer of Code (GSoC) 計劃的重點是讓全球新的開發人員參與開源軟體開發。Google 贊助學生在夏季與一個指導性的開源組織合作,進行一個為期 12 週的程式設計專案。在過去的 17 年裡,已有超過 18,000 名貢獻者參與了 Google Summer of Code。
在 2022 年,Dart 連續第三年作為指導組織參與 Google Summer of Code。繼我們在 3 月份 徵求提案 之後,我們收到了來自世界各地潛在參與者的 50 份專案提案。今天,我們重點介紹了我們在今年夏天指導的一些專案。貢獻者在這篇文章中描述了他們的專案。
Dart 的 JNI 互通性
Mahesh Hegde
Android 平台使用 Java 作為其官方語言。從 Dart 存取其豐富的生態系統將會增加巨大的價值,因此我開發了一個 Java Native Interface (JNI) 與 Dart 的互通性作為我的 GSoC 專案。
package:jnigen
產生繫結,以便從 Dart 使用 Java 類別和方法。jnigen
產生包裝 Java 函式庫的 C 繫結,以及調用這些 C 繫結的 Dart 繫結。支援函式庫 package:jni
提供初始化和存取 JNI 的常用函數。
考慮到 Java 和 JNI 的複雜性,Dart 的 JNI 互通性仍然是實驗性的。互通性可以包裝 Java 語言的基本功能,例如建構函式、靜態和實例方法以及欄位 getter。Java 中的例外會在 Dart 中「重新拋出」,並帶有原始堆疊追蹤。互通性無法從 Dart 子類別化 Java 類別或傳遞回調。在 GSoC 之後,我們計劃改進繫結產生管道,並實作更多 Java 語言功能。
該專案的技術複雜性被證明具有挑戰性。我們知道以前沒有任何使用 JNI 的原生編譯高階語言嘗試過 Java 互通性。當某些東西沒有按預期工作時,我們經常不得不尋找解決方法,例如動態函式庫載入和 JNI 例外。我最終編寫了幾個工具來幫助這個專案。這些工具包括一個從 maven 獲取 Java 原始程式碼的工具,以及另一個建立共享函式庫的工具。我學到了很多關於時間管理、優先排序、測試以及編寫簡潔、可讀和易懂程式碼的知識。
Flutter 社群管理儀表板
Abdelrahman Amer
對於 GSoC’22,我設計並建立了一個 GitHub 上 Flutter 社群儲存庫的管理儀表板。該儀表板透過彙總儲存庫、維護者、存取級別等方面的最新活動來協助 Flutter 社群管理員。它包含一個觸發器來建構和部署到 pub.dev。我使用 Flutter 作為前端,Firebase 作為後端來實作該專案。
在專案期間,我開發了一些有趣的可重複使用的元件,包括:
- Firebase 抽象層
- MVC Widget 和相關的資料結構類別,用於顯示可按任何欄位排序的任何表格資訊
- MVC Widget 和資料結構類別,用於顯示圖形 2D 資料
管理儀表板缺少一些功能,但核心功能已經實作。我期待在 GSoC 時期之後繼續開發更多功能。
GSoC 經驗教會了我寶貴的開發技能,尤其是在 Flutter 方面。我非常感謝這個機會、良好的工作環境、我獲得的經驗以及我從 Majid 那裡獲得的指導。
偵測不正確的版本約束
Arseny Uskov
套件維護者必須為每個 Dart 套件版本分配適當的版本。他們必須決定是否根據依賴於其套件的使用者引入了重大變更。相依套件也假設每個 其 相依的適當版本範圍是什麼。
在這些方面的不正確假設可能會產生錯誤。我的專案旨在識別和調查這些錯誤的子集。
該專案提供了工具,可以彙總給定套件的給定版本的公共 API 的一部分。此摘要會識別任何依賴於給定套件的其他套件,這些套件可能有不正確的版本約束。我們涵蓋的使用案例是套件使用在其相依之一中定義的符號,但同一符號未包含該相依的最低允許版本。
公共 API 摘要模型允許一系列其他有趣的靜態分析應用程式。在 GSoC 期間,我們沒有時間探索它們。若要進一步了解,請參閱關於該專案的 API 分析部落格文章、我們面臨的挑戰、從對 pub.dev 生態系統運行分析收集的結果、在實際套件中發現的錯誤以及自行修改專案的起點。
非常感謝所有使用 Dart 申請 Google Summer of Code 2022 的人,感謝今年完成專案的貢獻者,以及感謝幫助使這個程式碼之夏變得精彩的導師。如果您有興趣進一步了解 Dart 在 Google Summer of Code 中的應用,請查看我們 2021 年的文章。
Google Summer of Code 2022 成果 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。