動態

詳情 返回 返回

PHP核心開發者Nikita的首次提交,就實現了個寂寞啊 - 動態 詳情

Nikita Popov 曾是 PHP 社區中備受尊敬的核心開發者之一。幾年間,他深度參與了性能優化工作,一邊不斷實現新功能,一邊修復歷史遺留的大量錯誤,是把 PHP 從“老舊腳本語言”推動為“現代編程語言”的關鍵人物之一。

Nikita 可謂年輕有為,據説還在高中時期就開始參與 PHP 開發,首次貢獻是在 PHP 5.5 版本中。

我們不禁好奇,這位才華橫溢的開發者第一次會向 PHP 代碼庫提交哪些內容?​下面,我們就來看看 Nikita 的首秀吧,瞭解他是如何開啓這段非凡的開源旅程的。

以郵箱為關鍵詞在提交日誌中進行搜索,可以發現他首次提交的時間是 2012 年 5 月 20 日。不知道當時高中畢沒畢業。

這次提交主要新增了 2 個文件 zend_generators.czend_generators.h,並對 Makefileconfigure 等構建腳本文件做了相應的修改。從註釋來看,Nikita 的首次提交只是添加了沒有任何功能的、一個名為 Generator 的內置類。文件 zend_generators.c 中的代碼也驗證了這一點。

#include "zend.h"
#include "zend_API.h"
#include "zend_generators.h"

ZEND_API zend_class_entry *zend_ce_generator;

static const zend_function_entry generator_functions[] = {
       ZEND_FE_END
};

void zend_register_generator_ce(TSRMLS_D) /* {{{ */
{
       zend_class_entry ce;

       INIT_CLASS_ENTRY(ce, "Generator", generator_functions);
       zend_ce_generator = zend_register_internal_class(&ce TSRMLS_CC);
       zend_ce_generator->ce_flags |= ZEND_ACC_FINAL_CLASS;
}
/* }}} */

換句話説,Nikita 的首次提交,只是讓我們可以在代碼中寫出 <?php new Generator(); —— 僅此而已,new 出來的對象沒有任何作用。

如果你對 PHP 擴展開發稍有了解,會發現這幾行代碼是模板化的“公文格式”:定義一個類、註冊類名、綁定方法,這套流程任誰來寫都是這樣。真正透露出一點“作者痕跡”的,只有兩個地方:一個是類名 "Generator",另一個是 zend_ce_generator->ce_flags |= ZEND_ACC_FINAL_CLASS;,表明 Generator 這個類無法被繼承。

儘管這次提交看起來非常樸素,甚至可以説簡陋,卻悄然拉開了一個重要特性的序幕——生成器(generators)。這項特性隨着 yield 關鍵字在 PHP 5.5 中正式落地,大大豐富了語言的表達力。

正如所有偉大的旅程都始於第一步,Nikita 的這次“空提交”似乎也預示着他在 PHP 語言演進中的關鍵角色。

Nikita Popov 目前是 Red Hat 的高級軟件工程師,主要從事 LLVM、Clang 和 Rust 編譯器的開發工作。


user avatar nixideshatanku 頭像 smartbidashuju 頭像 ai4ai 頭像 49u7s8yz 頭像 morpheusdong 頭像 wangjingyu_5f58472234cff 頭像 hex 頭像 wanglizhi_5dd4059a702d2 頭像
點贊 8 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.