2023年,柯潔對戰alphago,讓我們了解到在人工智慧面前人類智力的渺小。更讓從事開發工作的我感到興奮,我深深地感覺開發的萬能性,程式幫助很多的行業釋放腦力。但是每乙個開發人員的開發工作卻很不智慧型,完全用自己的腦力去開發,這不免是乙個極大的諷刺。既然人工智慧應用範圍這麼廣,為什麼不把他應用到開發過程中呢。第一次了解到元程式設計的概念時,我的頭腦一下被點燃了,我當時就萌生了乙個想法,用程式去寫程式一定是未來。
我在從事php開發過程中,遇到了很多純粹「體力型」的開發工作
廣告進行更替,但是又沒有經歷去做廣告後台,只能手動去更換**。
資料庫表字段增加,要給對應的後台增加對應的輸入框。
某個php介面要淘汰,需要整個**庫去找呼叫,然後替換成新的推薦方法。
細細想來,真的是大量的工作修改的結果是固定的。如果這部分工作改為用人工智慧去幫助我們寫一部分**,那麼我們的腦力就可以提煉出來去做更重要的事情。
我打算拿我最熟悉的語言php入手,開發乙個開發php**的php引擎。
metaphp是乙個php元程式設計的引擎,用於用php語言生成php**。
那麼我們以乙個最常用的helloworld的demo來作為開始。
專案**在上
首先引入metaphp引擎,在自己的**中載入metaphp引擎的include.php檔案就引入了metaphp
<?php部署好了metaphp,那麼我們就可以開始demo了。include './metaphp/include.php';//
引入metaphp
$metaapi = new phpinterpreter('');//引數的含義後面會具體講解
以乙個輸出helloworld舉例,php**應該是
<?php雖然只有**很簡單,但是我們仔細審視這段**,就自然可以拆解出更加詳細的結構echo 'hello world';
首先這段**,是由乙個php**開始符
和乙個echo語句組成,echo可以理解為呼叫echo函式,引數是乙個字串,字串的值是hello world
<?php每乙個結構都包含乙個type欄位,代表了這個**的型別,每一種**結構都必有type屬性,正如剛才說的,**層次一層一層的樹形結構組成。最頂層是type=window,代表php執行時。include './metaphp/include.php';//
引入metaphp
$metaapi = new phpinterpreter('');
//輸出hello world的**的結構,可以理解為下面的復合陣列形式$metaapi->codemeta = array
( 'type'=>'window',
'child'=>array
(
array
( 'type'=>'phpbegin'),
array
( 'type'=>'echo',
'value'=>array
( 'type'=>'string',
'data'=>'hello world',),)
),);
print_r($metaapi->getcode());//
獲得生成的php**
window執行時會由多個子**組成(php開始符、和echo語句)。所以有乙個child陣列來定義下一級的語句。具體的語法後面的章節會講到。
$metaapi->codemeta = array執行這個php程式,會輸出getcode函式的結果。( 'type'=>'window',
'child'=>array
(
array
( 'type'=>'phpbegin'),
array
( 'type'=>'echo',
'value'=>array
( 'type'=>'string',
'data'=>'hello world',),)
),);
這是乙個生成php**的php**,所以結果是乙個php**,接下來你可以把**寫入檔案系統,就得到了乙個可執行的php檔案。
當然元程式設計中介**如果想執行,也是有對應的方式直接執行,而不必必須儲存檔案再去執行。這種方式常用於測試、資料驗證等中間步驟
需要使用的就是evalmetacode類
include './metaphp/include.php';$metaapi = new phpinterpreter('');
$metaapi->codemeta = array
( 'type'=>'window',
'child'=>array
(
array
( 'type'=>'phpbegin'),
array
( 'type'=>'echo',
'value'=>array
( 'type'=>'string',
'data'=>'hello world',),)
),);
//接收元**(陣列化的**),然後直接run執行
$evalobj = new
evalmetacode($metaapi->codemeta,array
());//使用evalmetacode類來接收資料化的**,然後執行run就可以直接執行
恭喜你已經開始了metaphp自動**編寫之旅
目錄元**結構
metaphp陣列的使用
函式的使用
類的定義和使用
雜七雜八的
修改已有**
也歡迎進行qq聯絡本人 ,交流我在開發metaphp過程中的經驗
模板元程式設計入門詳解
引述 當我們在程式中要用到乙個需要計算出來的常數,但是又不想在程式中寫表示式 因為影響程式速度 還不想用計算器先算出來再直接用結果,怎麼辦?答 可以考慮用define或const。例如我要用到一天有多少秒,我會定義巨集 define day sec 24 60 60 或者定義常量 const uns...
C 模板元程式設計 入門簡介
範例引入 主模板template struct fib 完全特化版 template struct fib 1 完全特化版 template struct fib 0 int main 主要思想 利用模板特化機制實現編譯期條件選擇結構,利用遞迴模板實現編譯期迴圈結構,模板元程式則由編譯器在編譯期解釋...
C 模板元程式設計 入門簡介
最近一直在看stl和boost,原始碼裡邊好多涉及到模板元程式設計技術,簡單了解一下,備忘 boost python中的涉及模板元的部分重點關注一下 範例引入 主模板template struct fib 完全特化版 template struct fib 1 完全特化版 template stru...