日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我发现一个新的软件,用自然语言编程!非常酷!

發布時間:2025/3/21 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我发现一个新的软件,用自然语言编程!非常酷! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

周六晚上10點半, 張大胖興沖沖地在微信上找我:“欣哥,我發現一個編程軟件,非常酷!”

我:“別煩我!我忙著追劇呢。”

“真的非常酷,這個軟件叫MetaCode ,可以用自然語言編程,你看看!”

自然語言編程? 難道我之前故事中杜撰的X語言,Z語言真的實現了??

X語言: 我在這兒-> 《當世界上只剩下一個Java程序員》

Z語言: 我在這兒-> 《Z語言傳奇》

我放下了《破冰行動》,打開了張大胖發給我的連接:https://metacode.app/。

DSL

看了一分鐘,不僅啞然失笑:“大胖,這哪里是自然語言編程?分明是DSL編程!”

“啥是DSL?”

“就是領域特定語言(Domain Specific Language)“

“啥是領域?”

“領域...... 這個......”? 這家伙把我問住了。?

“比如說,UI編程就是一個特定領域,Web自動化測試也是個領域,還有些業務相關的,稅務邏輯處理,金融邏輯處理,都是特定的領域。” 我通過舉例做了一個解釋。

“那這個軟件就是針對UI編程領域的DSL嘍?”

“是的,你看這個軟件,當你輸入 view controller #TestVC的時候,它就會生成一個名稱為TestVC的Controller類, 當你輸入add stackview #stack constrained的時候,它就會自動加上一個名稱為stack的View。 注意這里的關鍵字,?view, controller , add ,stackview,都是人家預先定義好的關鍵詞,還有那個#號,你是不能亂來的。”

“有點明白了,也就是說,這個Metacode自定義了一個更加高層的語言,程序員可以用這個語言中的指令來寫程序, 然后Metacode再把他們轉化成實際代碼。”

“對啊,就是這個意思,但是這個Metacode的DSL并不是一個通用的編程語言,你不能用它來做別的事情,你想想,你還用過哪些DSL?”

DSL案例

我看到張大胖的微信一直顯示“正在輸入”, 又撿起了破冰行動。?

過了一會兒,張大胖的消息來了:“Ant算不算?”

“當然算了,你看Ant中定義的任務,專門是用來做Build的,你只要用XML描述一下Build的過程,根本不用寫具體代碼, 所以它是Build領域的DSL。”

對類進行打包

<jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>

把文件從一個地方復制到另外一個地方

<copydir src="${src}/resources"? ? dest="${dist}"/>

運行JUnit

<junit fork="yes">

? <jvmarg value="-Djava.compiler=NONE"/>

? ...

</junit>

“照欣哥這么說, Maven也算是DSL嘍?”

“對啊,Maven充分利用了約定終于配置的思路, 簡化了Ant中很多不必要的Task,只要你把目錄結構安排好,Maven就能運行。”

“還有哪些知名的DSL?”? 張大胖繼續問。

“Ruby on Rails(簡稱)中的Active Record是DSL的一個典型。”

“又一個新詞!什么是Active Record? ”? 隔著屏幕,我都能感受到張大胖有點兒不滿。?

“Active Record是一種數據源架構模式, 一個對象表示數據庫表的某一行數據,這個對象不但有領域邏輯,還封裝了對數據庫的訪問。想了解細節的話,可以看看Martin Fowler寫的《企業應用架構模式》,這是一本很老,但是又很經典的書了。”

“那RoR是怎么用DSL來實現Active Record的?”

“舉個例子,你有兩個業務相關的類,一個是Author, 另外一個是Book, 現在你想把他們之間建立關聯, 也就是說一個作者可以有多本書,DSL可以這么寫:”

class?Author?<?ApplicationRecordhas_many?:books,?dependent:?:destroy end

“當你這么寫了以后,神奇的事情發生了,按照約定,RoR會得知在數據庫表中下圖所示的關系,然后你的Author類突然擁有了很多有用的新方法。”

?

#創建一個Author對象 author?=?Author.new(name:?"Andy") #創建一個Book對象,這個對象和Author是關聯的 book?=?author.books.create(title:?"xxxx") #刪除這個Author,注意,所有相關的Book也會刪除 author.destroy

張大胖說:“果然是厲害,就通過has_many這么簡簡單單的一句話,框架就可以獲取這么多信息,自動生成這么多代碼。 RoR的ActiveRecord相當于一個ORM領域的DSL,對吧?”

“可以這么說,你看,這DSL是不是很有用,可以讓我們拋棄細節,在一個更高的層面的編程,能極大地提升編程的效率。RoR剛誕生的時候,號稱比Java編程快10倍呢!”

DSL的實現

“對了,你也可以發掘下你工作的領域,看看有沒有可能創建一個屬于自己的DSL。但是我必須得提醒你,不能為了DSL而DSL。”

“嗯,我下周上班了仔細考慮下, 可是如果想創建自己的DSL,該怎么辦啊?”

“因為DSL本質上是一個語言,所以你首先的定義自己的語法,然后再考慮怎么實現這個語法, 一種辦法是你用Lex,YACC,ANTLR等工具自己把這個語言給實現了,這叫外部DSL。?”

“自己實現語言?這太難了!”

“還有一種辦法就是‘寄生’在別的語言中,利用別的語言(Ruby ,Python)的動態特性,構建你自己的語法,像剛才的has_many就是這么做的,這種方式叫做內部DSL。”

"好麻煩!" 張大胖已經開始打退堂鼓了。?

“這樣,你先看看一本書吧,也是Martin Fowler寫的,名稱就叫做《領域特定語言》!”

總結

以上是生活随笔為你收集整理的我发现一个新的软件,用自然语言编程!非常酷!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。