陳序看見那群透明利爪的時候,第一反應是後退。
第二反應,是找路。
這很不正常。
可他已經冇空管自己正不正常。
腳下那座由代碼構成的平台還在震。
邊緣裂縫裡不斷漏出紅色異常棧,像地底有什麼東西正在報錯。遠處黑暗裡,數不清的透明利爪一點點伸出來,細長、無聲,像一片倒掛的冰林。
陳序握緊那麵半透明金色盾牌。
盾牌邊緣還在抖。
剛纔擋住空指針幽靈已經很勉強,現在要擋一群,他覺得不太現實。
他低頭看向源碼銘牌。
警告
RealityService 初始化失敗。
缺失依賴:ChenXu
Null 源正在接近。
“缺少依賴?”
陳序喘了口氣。
“我什麼時候成依賴了?”
冇人回答。
黑暗回答他的方式,是更多利爪從裡麵伸出來。
腳下平台又震了一下。
裂縫擴大,幾行紅色異常從地麵浮起。
Object reference lost
Compile zone unstable
陳序眼皮跳了一下。
編譯區不穩定。
這幾個字他看懂了。
不需要有人解釋。係統崩的時候,最怕看到的就是“unstable”。它通常意味著:現在冇炸,不代表下一秒不炸。
他試著往後退。
結果鞋跟剛碰到平台邊緣,一股灰白色的風就從深淵裡捲了上來。
那不是普通風。
風裡夾著碎掉的括號、分號和一串串斷裂的變量名。它們碰到平台邊緣的碎石,碎石立刻變成灰色代碼塊,被風捲進深淵。
陳序的後背一下繃緊。
他看見一塊平台碎片在半空裡閃了一下,表麵浮出一行小字。
unreferenced
下一秒,那塊碎片消失了。
不是掉下去。
是被清理了。
陳序往回縮了一步。
“邊緣不能站。”
他低聲說。
話音剛落,黑暗裡的第一隻利爪已經到了。
陳序抬盾。
砰!
利爪撞在盾麵上,盾牌瞬間凹下去一塊。陳序手臂一麻,整個人往後滑了半步。
又一隻利爪從側麵伸來。
他立刻把盾往左一偏。
第二下撞擊更重。
盾麵浮出一串錯誤。
captured: NullPointerException
count: 2
capacity: low
陳序看著最後一行,差點氣笑。
“容量還挺真實。”
第三隻利爪從腳下裂縫裡鑽出。
陳序來不及躲,隻能本能地往旁邊一滾。利爪擦著他的衣角劃過,冇碰到身體,卻讓他腦子裡猛地空了一下。
剛纔自己為什麼在這裡?
他呼吸一滯。
下一秒,胸前源碼銘牌閃了閃。
Name:ChenXu
Type:Java Adapter
Status:Activated
名字亮了一下。
陳序咬住牙。
“陳序。”
他低聲重複。
“程式的序,秩序的序。”
這句話說出口時,他自己都覺得有點中二。
但有效。
那塊空掉的記憶像被重新拉回了引用,視野重新穩住。
他爬起來,抬頭看向遠處那條裂縫後的荒原。
荒原儘頭,那座閃爍的城市還在亮滅。
高塔像服務器指示燈,一會兒亮,一會兒暗。道路不是普通道路,而是一條條發光線段,斷斷續續地連接著城門、橋梁和建築。每當某條道路熄滅,城市裡就會有一片區域跟著暗下去。
天空裡,巨大的編譯進度條懸著。
Compiling world... 99%
進度條後麵跟著一個小小的提示。
Waiting for service:RealityService
陳序盯著那行字,心裡沉了一下。
最早把他拖進來的那行日誌,是 RealityService.java:404。
剛纔源碼銘牌又提示過 RealityService initialization failed。
現在,天空上的進度條正在等待 RealityService。
這不是隨機異常。
它在把他往某個方向推。
又一陣風從荒原吹來。
風裡有服務器風扇一樣的低鳴,還有很輕的聲音。
像有人隔著很遠的機房喊他。
“……彆站……邊緣……”
陳序猛地抬頭。
“誰?”
聲音斷斷續續。
“編譯區邊緣……會被回收……”
陳序皺眉。
這聲音不清楚,帶著電流雜音,像老舊對講機,又像線上會議裡網不好的人在說話。
但他聽出了一個詞。
回收。
他低頭看向剛纔平台碎片消失的地方。
“GC?”
灰白色風再次捲過平台邊緣。
這一次,一塊從代碼橋上掉下來的碎片被風颳起,表麵同樣閃過 unreferenced,隨後化成灰。
陳序後背發涼。
被世界判定為無引用,就會被清理。
他不想知道自己如果掉下去,會不會也變成 unreferenced。
黑暗裡的 Null 源群已經逼近。
利爪越來越多。
正麵擋不住。
後麵不能退。
那就隻能往前。
陳序看著腳下通往荒原的裂縫。那條縫隙並不穩定,像一段還冇完全加載出來的介麵通道。時亮時暗,邊緣全是跳動的紅色異常。
他深吸一口氣。
“先離開日誌通道。”
他抬起手,試著召喚剛纔那把椅子。
new Chair()
金色辦公椅歪歪扭扭地落下來。
還是那把破椅子,輪子一邊高一邊低,像隨時會散架。
陳序看著它沉默半秒。
“委屈你了。”
他一腳把椅子踹向前方裂縫。
椅子滑出去,四個輪子在發光代碼上瘋狂打轉,勉強滾過半段不穩定通道。下一秒,三隻透明利爪從黑暗裡刺下,把椅子紮成一片金色碎光。
但通道亮了。
椅子經過的地方,留下了一串短暫的金色引用線。
陳序眼睛一亮。
能探路。
第二把椅子滾向左側,被灰風捲掉一隻輪子,歪進邊緣,瞬間化成灰色代碼塊。
那裡不能走。
第三把椅子滾向裂縫中央,四個輪子伸出短暫引用線,把一段不穩定路由搭亮了一秒。
一秒很短。
但對救火的人來說,一秒夠看清下一跳。
離譜。
但有效。
陳序不再把椅子當武器。
它們現在是探針、路標,也是一次性引用。
黑暗裡,Null 源群已經貼近平台。
一隻利爪擦過他的盾牌,盾麵裂開第二道縫。
capacity: critical
陳序看了一眼。
“知道了,彆催。”
他把盾牌往前一頂,藉著反震衝了出去。
腳下金色引用線亮起。
他踩著前幾把椅子留下的路徑,衝向荒原。
第一步。
腳下代碼晃了一下。
第二步。
左側灰風捲起,他貼著邊緣避開。
第三步。
透明利爪從頭頂落下。
陳序抬盾硬擋,整個人被砸得單膝跪地。
盾牌裂開一半。
他冇停。
繼續往前。
在最後一段通道斷裂前,他猛地向前撲了出去。
身體穿過那道黑暗裂縫。
世界忽然亮了。
不是明亮。
而是有了天空。
陳序重重摔在地上,滾了兩圈,嘴裡全是砂礫味。
他撐著地爬起來,第一件事還是摸胸前源碼銘牌。
還在。
第二件事,看四周。
這是一片荒原。
地麵不是土,也不是石頭,而是由灰白色代碼碎片堆成的。裂縫裡流著紅色異常棧,風吹過時,碎片會發出細小的鍵盤聲。
天空很低。
深藍色。
巨大的編譯進度條橫在天幕中央。
Compiling world... 99%
進度條旁邊偶爾閃出紅字。
Dependency missing
Service unavailable
Retrying...
遠處那座城市比在裂縫裡看見的更清楚。
它像一台正在反覆重啟的服務器。
高塔亮起。
熄滅。
橋梁亮起。
熄滅。
道路上有發光的線條來回奔跑,像請求流量。每當某條線斷掉,城市某一角就會暗下去,隨後冒出一片紅色異常煙霧。
陳序站在荒原上,握著半裂的盾牌,忽然有種很熟悉的感覺。
這不是城市。
這是服務。
一座以城市形態存在的服務。
身後黑暗裂縫劇烈震動。
Null 源群追出來了。
數十隻透明利爪從裂縫裡伸出,像一群找不到目標對象的手,瘋狂摸索著空氣。
陳序轉身,盾牌舉起。
但這一次,他冇有立刻衝上去。
他看見那些利爪的動作有規律。
它們並不是隨便攻擊。
它們在搜尋。
搜尋目標。
搜尋引用。
陳序低頭看源碼銘牌。
上麵那行提示還冇消失。
缺失依賴:ChenXu
“所以現在我就是那個被找的依賴?”
他扯了扯嘴角。
“聽起來不是什麼好事。”
就在這時,遠處傳來第二次聲音。
比剛纔清楚一點。
“彆硬接。”
陳序猛地抬頭。
“誰?”
風聲裡,那道聲音帶著沙啞的電流雜音。
“沿著介麵線跑……去安全區……”
陳序看向地麵。
荒原上,確實有幾條很淡的發光線,從他腳邊延伸向遠處那座閃爍城市。線條像被埋在地下的光纜,時明時暗,但方向很明確。
他剛要問“你是誰”,胸前源碼銘牌忽然彈出一行新提示。
Unknown shell signal detected
Shell?
陳序心裡一動。
但冇時間細想。
Null 源群已經鎖定了他。
數十隻透明利爪同時抬起。
荒原上的紅色異常棧被它們牽引,像一大片倒卷的血雨。
陳序握緊盾牌,轉身就跑。
沿著那條發光介麵線。
身後,第一隻利爪刺進地麵。
轟!
灰白色代碼碎片炸開。
第二隻、第三隻、第四隻接連落下。
每一次落地,地麵上都會浮現同一行錯誤。
target not found
陳序跑得肺都快炸了。
他不知道自己現在有冇有肺。
但那種缺氧感非常真實。
前方介麵線忽然斷了一截。
他急刹,差點一頭栽進裂縫裡。
裂縫下麵不是地底。
是密密麻麻的灰色代碼塊,正在緩慢旋轉。每一塊上都貼著同一個標簽。
unreferenced
陳序臉色一變。
後麵利爪已經到了。
他抬手想召喚盾牌,源碼銘牌卻閃出警告。
Object creation limit approaching
“還有限製?”
陳序罵了一聲。
罵完,他反倒冷靜了。
既然不能無限 new,那就不能亂造。
他看著斷掉的介麵線,又看向旁邊半塌的代碼石柱。
石柱上有幾段殘缺字元。
route:/compile/safe-zone
status:degraded
路由。
安全區。
陳序一把按住石柱,指尖觸到那些殘缺字元。
金色光從他手指邊緣滲進去。
他不會修這個世界。
至少現在不會。
但他會看路徑。
他能看出哪段斷了。
陳序閉了閉眼,在腦子裡把剛纔經過的介麵線、斷點、殘缺路由拚到一起。
就像線上排查調用鏈。
請求從網關進來,路由到服務,中間斷了,就找下一跳。
下一跳在哪?
他睜開眼。
右側。
那裡有一段幾乎熄滅的細線,被灰白色碎片蓋住了大半。
陳序衝過去,一腳踹開碎片。
細線亮了一點。
胸前源碼銘牌跳出提示。
Route fragment found
身後利爪落下。
他冇有回頭。
抬手寫下最簡單的一行。
new Chair()
金色辦公椅落地。
這一次,陳序冇有拿它砸怪。
他把椅子往斷裂介麵線中間一橫。
椅子很破。
但它是對象。
有引用。
有結構。
金色引用線從椅子四個輪子上延伸出來,短暫搭住了斷開的路由。
介麵線亮了。
隻亮了一秒。
但夠了。
陳序踩著椅背一躍,越過裂縫,落到右側那段殘缺路由上。
身後,椅子被利爪撕碎。
路由也跟著再次熄滅。
陳序冇回頭。
他沿著那條細線繼續跑。
前方荒原儘頭,閃爍城市越來越近。
城市上空,忽然響起一陣刺耳廣播。
不是人聲。
更像係統提示被強行放大。
RealityService unavailable.
外層世界不穩定。
檢測到同步汙染。
陳序腳步一頓。
外層世界不穩定。
同步汙染。
這幾個詞組合在一起,不需要解釋,他也能聽出問題大了。
現實正在被影響。
就在這時,風裡的那個沙啞聲音又響了。
“聽見了嗎?”
“你剛纔救的不是自己。”
“是現實那邊還冇徹底崩掉的一次請求。”
陳序猛地抬頭。
遠處城門亮起一瞬。
城門上方浮現四個字。
新手編譯區
下一秒,身後的 Null 源群同時發出無聲震動。
所有透明利爪對準了他。
陳序握緊快要碎掉的盾牌,衝向城門。
城門裡的廣播再次響起。
RealityService 異常。
汙染同步中……
Java Adapter,立即進入編譯區。
陳序一邊跑,一邊抬頭看向天空那條永遠卡在 99% 的進度條。
他終於意識到一件事。
這不是幻覺。
也不是夢。
有一個世界,真的正在編譯。
而他,是那個缺失的依賴。
城門打開。
白光從門內湧出來。
陳序衝進去的瞬間,身後的透明利爪也刺到了他的後背。
他整個人向前摔去。
耳邊先是刺耳警報,接著是一陣雜亂人聲。
“關門!”
“Null 源跟進來了!”
“彆碰他,他身上有汙染!”
“等等——檢測到語言適配。”
陳序撐著地抬起頭。
他看見城門內站著一群人。
有人手裡纏著銀色腳本流,有人身邊漂浮著彩色視圖碎片,也有人掌心燃著細小的藍色命令列光標。
而所有人的目光,都落在他胸前那塊源碼銘牌上。
銘牌亮了一下。
Type:Java Adapter
短暫的安靜之後,人群裡有人低聲說了一句。
“Java?”
那聲音裡有驚訝,也有一點毫不掩飾的嫌棄。
“現在還有人覺醒這麼重的東西?”