那六枚 F 級片段在接下來兩天裡被慢慢吸收,消化期比 D 級快,但品質也確實更低——整合進去之後沒有明顯的能力提升,只是代碼底層的密度稍微厚實了一點點,像是往一個空架子上加了幾根橫樑,架構還是那個架構,只是稍微穩了些。
謝鳴山說這是正常的,F 級的作用是「打底」,不是「拔高」,積累到一定量才有效果。
第四天下午,謝鳴山宣布開始教「讀法之後的事」。「讀是被動的,」他說,把那本古玩店的遺留代碼書放在陸離和林曉晴面前,「你現在能讀世界的代碼,能看見它的結構,能預測它的行為,但你還做不了一件事。」
「修改,」陸離說。
「不,」謝鳴山說,「修改是三境以後的事,你現在做不到。但在讀和改之間,有一個中間步驟。」
「什麼?」
謝鳴山把那本書打開,翻到某一頁,放在桌上,「修改系統。但不是修改世界的代碼——而是修改自己的。」
他指著書頁上的一段文字,是遺留協議的一個章節,陸離努力往二境感知的深處推,才能勉強讀出它早期版本的格式:
[Legacy Protocol Chapter 3 — Self-patching]
A entity that can read the system
may write instructions for itself.
Not to change the world —
but to change the lens through which it reads the world.
讀系統的實體,可以為自己寫指令。不是改變世界,而是改變讀世界的鏡頭。
「覺醒者不只是在讀外部世界的代碼,」謝鳴山說,「他們本身也是運行在這個系統裡的程序,也有自己的代碼結構,也可以自我修改。這叫『打補丁』——在你自己的代碼架構上打一個補丁,讓某個特定的能力運作得更有效率,或者擴展一個原本不存在的功能。」
「但我不是工程師在維護外部系統,」陸離說,「我的代碼——我的代碼結構我能讀嗎?」
「能,」謝鳴山說,「但讀起來很不舒服。」
讀自己的代碼比讀外部環境難得多,原因不是技術上的——在二境的感知下,他把視線轉向自己的身體,確實能看見自己的代碼層,能看見那些屬性欄位,能看見自己的值在即時更新(心跳在更新 Heart_rate,呼吸在更新 Respiratory_rate,體溫在更新 Body_temperature)——但看見自己的代碼有一種非常奇妙的不適感,就像試著用眼睛看自己的眼睛,總有一種你在追一個永遠差一點點追到的東西的錯位感。
謝鳴山沒有讓他直接打補丁,而是先讓他做一件更基本的事:找到他自己代碼架構裡的一個「介面」。
「每個覺醒者的代碼架構裡,都有幾個對外的介面,」謝鳴山說,「這些介面是你跟這個世界的代碼層進行互動的入口——你讀幽靈代碼,通過的是感知介面;你之前用幽靈代碼頻段藏匿信號,用的是另一個介面。你需要找到你的介面在哪裡,才能往介面上加功能。」
陸離花了大約半小時,在自己的代碼架構裡摸索,試著找那些「對外連接的接口」。
它們不像外部物體的標籤那麼清晰,更像是在看一個複雜的程序架構圖,每個模組之間的關係不是一眼就能看出來的,需要追蹤調用鏈,看哪些功能在調用哪些底層邏輯,哪些底層邏輯在向外發出信號。
他找到了三個。
一個是感知介面,他的觀察者能力從這裡向外延伸。一個是信號介面,他的代碼身份信號從這裡向外廣播(也是他之前能把信號藏進幽靈頻段的那個介面)。第三個……第三個介面不是他預期的東西。
它的格式跟前兩個不一樣,像是一個被人加進來的外部模組,而不是他本來就有的功能,標籤顯示:
Interface_03: [LOCKED]
Type: Write_Permission_Bootstrap
Status: Dormant — awaiting activation condition
Activation_key: Ghost_Read Lv.3+
寫入許可權引導程序。休眠狀態,等待幽靈感知三級才能激活。
跟古玩店那本書的訪問密鑰一樣的條件。
謝鳴山在旁邊聽他描述,沉默了一段時間,說:「那個介面是後加進去的。不是你覺醒時自然生成的,是某個時間點被人從外部寫入你的代碼架構的。」
「我的版本記錄被刪掉的那段時間,」陸離說。
「很可能,」謝鳴山說,「你現在不能激活它,但你現在能做的是:把前兩個介面用好。先在信號介面上打一個簡單的補丁——讓你的信號強度可以主動調節,而不是只能被動地往幽靈頻段藏。」
這是陸離第一次真正地,試著寫一段代碼,給自己用。
不是用鍵盤,不是用任何外部工具,是把一段邏輯用意識的方式構建出來,然後把它附加到信號介面上。
謝鳴山給他提示了邏輯框架:
signal_output.strength = variable (range: 0.0 ~ 1.0)
default: 1.0
manual_override: enabled
把輸出強度從固定值改成一個可調整的變數。聽起來很簡單,但在意識層面去構建這個邏輯——讓那段邏輯精確,讓它不模糊,讓它在附加上去之後能正確執行,而不是在執行時產生語法錯誤——需要一種陸離形容不太出來的精神集中感,就像用思維雕刻一個非常精密的東西,稍微手抖一點,整個形狀就歪了。
他試了三次,前兩次都失敗了。
第一次失敗的方式是:那段邏輯附上去之後立刻崩潰,因為他把 range 的邊界值寫反了,最小值寫成了最大值,邏輯矛盾,系統拒絕執行,直接回滾。
第二次失敗的方式比較微妙:邏輯本身是對的,但他把它附加的介面節點選錯了,接的是一個下游函數而不是介面本身,結果是補丁確實跑起來了,但只影響了部分功能,調節的是一個次級輸出,不是主輸出。
第三次,他慢下來,把整個邏輯結構在腦子裡先走了一遍,確認每個節點都是他想要的,然後才開始構建。
成功了。
那個補丁掛上去的感覺很輕,像把最後一塊拼圖放進去,發出一個細小的「咔哒」聲,然後一個新的控制項出現在他的意識介面裡——一個可以調節信號強度的滑桿,從 0 到 1。
他把它調到 0.1。
外面的代碼環境立刻有了細微的反應——原本被動廣播的代碼身份信號變弱了,林曉晴的監控軟體上他的光點亮度降低了,她往螢幕上看了一眼,說:「你的信號降了。」
「我知道,」陸離說,把滑桿調回 0.5,「控制成功了。」
謝鳴山看著他,點了點頭,「這是你的第一個補丁。以後你能打的補丁會越來越複雜,但基本邏輯不變——讀清楚架構,定義清楚你要改什麼,然後把那段邏輯精確地寫進去,不模糊,不歪曲,不讓系統產生矛盾。」
「像軟體工程,」陸離說。
「就是軟體工程,」謝鳴山說,「只不過你的軟體是你自己。」
然後他說了一句陸離沒想到的話:「你第二次失敗的方式,選錯了介面節點,但你知道嗎,那個你選錯的節點——被動接受你的補丁之後,沒有崩潰,而是繼續運行,只是效果不是你想要的。這說明那個節點的架構有一個特性,叫做『柔性接收』——它可以接受外部寫入而不拒絕,只要格式大致正確。」
「我的代碼架構有柔性接收特性?」
「不是所有節點,」謝鳴山說,「大多數人的架構在不適當的節點上會直接拒絕外部寫入,但你那個節點沒有。」他停了一下,「這是另一個不尋常的地方。」
陸離把這個說法在腦子裡放了放,沒有說什麼。
第三個介面,休眠的寫入引導程序。第二個失敗裡那個柔性接收的節點。他的代碼架構裡有不屬於自然覺醒的東西,有被人後來加進去的結構,而且那個人對他的架構做了相當細緻的設計,不是粗暴的清除和重置,而是一種精心的「保留與等待」。
就像有人替他種了幾棵樹,然後把他的記憶清空,等他自己再走回那片樹林。
傍晚,林曉晴從外面回來,帶著補丁市集的最新消息:
「衛澤明在找一個能提供你行蹤的線人,」她說,把筆電放下,臉色不太好,「在市集裡放消息,用 B 級片段換你的確切位置。」
余浩然在角落裡說,沒有抬頭:「在市集放消息說明他們還沒有找到任何有價值的線索,否則直接清除就好了,不必這樣。」
「這也意味著,市集裡有人可能動心,」林曉晴說,「一枚 B 級片段,這個價格很高。」
「誰會賣?」陸離問。
「不確定,但有人會。」她說,「市集不是鐵板一塊,每個人都有自己的立場,有人跟 SMD 之間有灰色地帶。」
謝鳴山閉著眼說:「我已經準備換地方了。這個節點用了三個月,差不多了。」
陸離把信號強度的調節補丁往下調了一格,讓自己的信號廣播降到了 0.3。
他把第一個補丁用起來了,早了半天,比他預計的更快。
不管是因為好運,還是因為世界在很努力地配合他的修煉節奏,他都選擇把它理解為前者。