91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MetaCode ,可以用自然語(yǔ)言編程

WpOh_rgznai100 ? 來源:lq ? 2019-07-18 11:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

周六晚上10點(diǎn)半, 張大胖興沖沖地在微信上找我:“欣哥,我發(fā)現(xiàn)一個(gè)編程軟件,非??幔 ?/p>

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

“真的非??幔@個(gè)軟件叫MetaCode ,可以用自然語(yǔ)言編程,你看看!”

自然語(yǔ)言編程?難道我之前故事中杜撰的X語(yǔ)言,Z語(yǔ)言真的實(shí)現(xiàn)了?

X語(yǔ)言:我在這兒-> 《當(dāng)世界上只剩下一個(gè)Java程序員

Z語(yǔ)言:我在這兒-> 《Z語(yǔ)言傳奇》

我放下了《破冰行動(dòng)》,打開了張大胖發(fā)給我的連接:

https://metacode.app/。

DSL

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

“啥是DSL?”

“就是領(lǐng)域特定語(yǔ)言(Domain Specific Language)“

“啥是領(lǐng)域?”

“領(lǐng)域...... 這個(gè)......” 這家伙把我問住了。

“比如說,UI編程就是一個(gè)特定領(lǐng)域,Web自動(dòng)化測(cè)試也是個(gè)領(lǐng)域,還有些業(yè)務(wù)相關(guān)的,稅務(wù)邏輯處理,金融邏輯處理,都是特定的領(lǐng)域。” 我通過舉例做了一個(gè)解釋。

“那這個(gè)軟件就是針對(duì)UI編程領(lǐng)域的DSL嘍?”

“是的,你看這個(gè)軟件,當(dāng)你輸入 view controller #TestVC的時(shí)候,它就會(huì)生成一個(gè)名稱為TestVC的Controller類, 當(dāng)你輸入add stackview #stack constrained的時(shí)候,它就會(huì)自動(dòng)加上一個(gè)名稱為stack的View。注意這里的關(guān)鍵字,view, controller , add ,stackview,都是人家預(yù)先定義好的關(guān)鍵詞,還有那個(gè)#號(hào),你是不能亂來的?!?/p>

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

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

DSL案例

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

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

“當(dāng)然算了,你看Ant中定義的任務(wù),專門是用來做Build的,你只要用XML描述一下Build的過程,根本不用寫具體代碼, 所以它是Build領(lǐng)域的DSL?!?/p>

對(duì)類進(jìn)行打包

把文件從一個(gè)地方復(fù)制到另外一個(gè)地方

運(yùn)行JUnit

...

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

“對(duì)啊,Maven充分利用了約定終于配置的思路, 簡(jiǎn)化了Ant中很多不必要的Task,只要你把目錄結(jié)構(gòu)安排好,Maven就能運(yùn)行。”

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

“Ruby on Rails(簡(jiǎn)稱)中的Active Record是DSL的一個(gè)典型?!?/p>

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

“Active Record是一種數(shù)據(jù)源架構(gòu)模式, 一個(gè)對(duì)象表示數(shù)據(jù)庫(kù)表的某一行數(shù)據(jù),這個(gè)對(duì)象不但有領(lǐng)域邏輯,還封裝了對(duì)數(shù)據(jù)庫(kù)的訪問。想了解細(xì)節(jié)的話,可以看看Martin Fowler寫的《企業(yè)應(yīng)用架構(gòu)模式》,這是一本很老,但是又很經(jīng)典的書了?!?/p>

“那RoR是怎么用DSL來實(shí)現(xiàn)Active Record的?”

“舉個(gè)例子,你有兩個(gè)業(yè)務(wù)相關(guān)的類,一個(gè)是Author, 另外一個(gè)是Book, 現(xiàn)在你想把他們之間建立關(guān)聯(lián), 也就是說一個(gè)作者可以有多本書,DSL可以這么寫:”

class Author < ApplicationRecord has_many :books, dependent: :destroyend

“當(dāng)你這么寫了以后,神奇的事情發(fā)生了,按照約定,RoR會(huì)得知在數(shù)據(jù)庫(kù)表中下圖所示的關(guān)系,然后你的Author類突然擁有了很多有用的新方法?!?/p>

#創(chuàng)建一個(gè)Author對(duì)象author = Author.new(name: "Andy")#創(chuàng)建一個(gè)Book對(duì)象,這個(gè)對(duì)象和Author是關(guān)聯(lián)的book = author.books.create(title: "xxxx")#刪除這個(gè)Author,注意,所有相關(guān)的Book也會(huì)刪除author.destroy

張大胖說:“果然是厲害,就通過has_many這么簡(jiǎn)簡(jiǎn)單單的一句話,框架就可以獲取這么多信息,自動(dòng)生成這么多代碼。RoR的ActiveRecord相當(dāng)于一個(gè)ORM領(lǐng)域的DSL,對(duì)吧?”

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

DSL的實(shí)現(xiàn)

“對(duì)了,你也可以發(fā)掘下你工作的領(lǐng)域,看看有沒有可能創(chuàng)建一個(gè)屬于自己的DSL。但是我必須得提醒你,不能為了DSL而DSL。”

“嗯,我下周上班了仔細(xì)考慮下, 可是如果想創(chuàng)建自己的DSL,該怎么辦?。俊?/p>

“因?yàn)镈SL本質(zhì)上是一個(gè)語(yǔ)言,所以你首先的定義自己的語(yǔ)法,然后再考慮怎么實(shí)現(xiàn)這個(gè)語(yǔ)法, 一種辦法是你用Lex,YACC,ANTLR等工具自己把這個(gè)語(yǔ)言給實(shí)現(xiàn)了,這叫外部DSL?!?/p>

“自己實(shí)現(xiàn)語(yǔ)言?這太難了!”

“還有一種辦法就是‘寄生’在別的語(yǔ)言中,利用別的語(yǔ)言(Ruby ,Python)的動(dòng)態(tài)特性,構(gòu)建你自己的語(yǔ)法,像剛才的has_many就是這么做的,這種方式叫做內(nèi)部DSL?!?/p>

"好麻煩!" 張大胖已經(jīng)開始打退堂鼓了。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • DSL
    DSL
    +關(guān)注

    關(guān)注

    2

    文章

    61

    瀏覽量

    39143
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    4022

    瀏覽量

    68383
  • 自然語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    292

    瀏覽量

    13996

原文標(biāo)題:我發(fā)現(xiàn)了一個(gè)非??岬能浖?,用自然語(yǔ)言編程!

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    自然語(yǔ)言處理NLP的概念和工作原理

    自然語(yǔ)言處理 (NLP) 是人工智能 (AI) 的一個(gè)分支,它會(huì)教計(jì)算機(jī)如何理解口頭和書面形式的人類語(yǔ)言。自然語(yǔ)言處理將計(jì)算語(yǔ)言學(xué)與機(jī)器學(xué)習(xí)和深度學(xué)習(xí)相結(jié)合來處理語(yǔ)音和文本數(shù)據(jù),這些數(shù)
    的頭像 發(fā)表于 01-29 14:01 ?416次閱讀
    <b class='flag-5'>自然語(yǔ)言</b>處理NLP的概念和工作原理

    什么方法可以用最少的引腳,接最多的按鍵?

    什么方法可以用最少的引腳,接最多的按鍵?
    發(fā)表于 01-20 07:08

    請(qǐng)問串口接收可以用scanf接收嗎?

    串口接收可以用scanf接收嗎?
    發(fā)表于 01-15 08:20

    為什么單片機(jī)還在用C語(yǔ)言編程

    說起單片機(jī)我們就會(huì)想到C語(yǔ)言,單片機(jī)為什么還在用C語(yǔ)言編程?現(xiàn)在有很多很好用的高級(jí)語(yǔ)言,如VC、PYTHON、PHP等等,為什么這些語(yǔ)言不能
    發(fā)表于 11-28 07:37

    C語(yǔ)言編程技巧

    設(shè)計(jì),分層開發(fā)代碼,便于理解和維護(hù)。 ?8、避免使用GOTO語(yǔ)句?:盡管GOTO語(yǔ)句在某些情況下仍然有用,但現(xiàn)代編程更傾向于使用函數(shù)和循環(huán)控制結(jié)構(gòu),以提高代碼的可讀性和維護(hù)性。 ?9、利用C語(yǔ)言的靈活性
    發(fā)表于 11-27 06:46

    云知聲論文入選自然語(yǔ)言處理頂會(huì)EMNLP 2025

    近日,自然語(yǔ)言處理(NLP)領(lǐng)域國(guó)際權(quán)威會(huì)議 ——2025 年計(jì)算語(yǔ)言學(xué)與自然語(yǔ)言處理國(guó)際會(huì)議(EMNLP 2025)公布論文錄用結(jié)果,云知聲提交的《面向門診病歷生成的高質(zhì)量醫(yī)患對(duì)話合成技術(shù)
    的頭像 發(fā)表于 11-10 17:30 ?824次閱讀
    云知聲論文入選<b class='flag-5'>自然語(yǔ)言</b>處理頂會(huì)EMNLP 2025

    HarmonyOSAI編程自然語(yǔ)言代碼生成

    安裝CodeGenie后,在下方對(duì)話框內(nèi),輸入代碼需求描述,將根據(jù)描述智能生成代碼,生成內(nèi)容可一鍵復(fù)制或一鍵插入至編輯區(qū)當(dāng)前光標(biāo)位置。 提問示例 使用ArkTs語(yǔ)言寫一段代碼,在頁(yè)面中間部分
    發(fā)表于 09-05 16:58

    北斗生態(tài)環(huán)境監(jiān)測(cè)站:讀懂自然的 “語(yǔ)言

    北斗生態(tài)環(huán)境監(jiān)測(cè)站:讀懂自然的 “語(yǔ)言”柏峰【BF-BDQX】當(dāng)生態(tài)監(jiān)測(cè)遇上北斗技術(shù),一場(chǎng)關(guān)于 “精準(zhǔn)守護(hù)自然” 的變革正悄然發(fā)生 ——北斗生態(tài)環(huán)境監(jiān)測(cè)站以北斗定位導(dǎo)航系統(tǒng)為核心
    的頭像 發(fā)表于 09-04 10:59 ?540次閱讀
    北斗生態(tài)環(huán)境監(jiān)測(cè)站:讀懂<b class='flag-5'>自然</b>的 “<b class='flag-5'>語(yǔ)言</b>”

    HarmonyOSAI編程頁(yè)面生成

    支持通過自然語(yǔ)言對(duì)話,生成應(yīng)用/元服務(wù)可用的頁(yè)面代碼,生成結(jié)果支持實(shí)時(shí)預(yù)覽,幫助開發(fā)者快速完成頁(yè)面搭建。 點(diǎn)擊頁(yè)面右側(cè)菜單欄CodeGenie圖標(biāo),完成登錄后在輸入框輸入\"/\"
    發(fā)表于 08-29 15:50

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】5- 無需死記 Linux 命令! CangjieMagic 在 HZ-T536 開發(fā)板上搭建 MCP 服務(wù)器,自然語(yǔ)言輕松控板

    )真香,是不是可以沒有YOLO和OCR了? - 北京合眾恒躍科技有限公司 - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論壇!已經(jīng)詳細(xì)介紹了,這里不再贅述。 四、測(cè)試驗(yàn)證:自然語(yǔ)言控制開發(fā)板 啟動(dòng)服務(wù)器
    發(fā)表于 08-23 13:10

    收銀機(jī)的電源適配器壞了,可以用其他產(chǎn)品的替代使用嗎?

    在日常的商業(yè)運(yùn)營(yíng)中,收銀機(jī)作為門店管理的核心設(shè)備,其穩(wěn)定性和可靠性至關(guān)重要。然而,當(dāng)原裝收銀機(jī)電源適配器壞了的話,我們是否可以用其他產(chǎn)品的電源適配器來臨時(shí)替代收銀機(jī)的原裝電源適配器呢?答案是不能
    的頭像 發(fā)表于 08-02 10:03 ?881次閱讀
    收銀機(jī)的電源適配器壞了,<b class='flag-5'>可以用</b>其他產(chǎn)品的替代使用嗎?

    云知聲四篇論文入選自然語(yǔ)言處理頂會(huì)ACL 2025

    近日,第63屆國(guó)際計(jì)算語(yǔ)言學(xué)年會(huì)ACL 2025(Annual Meeting of the Association for Computational Linguistics,簡(jiǎn)稱ACL)論文接收
    的頭像 發(fā)表于 05-26 14:15 ?1336次閱讀
    云知聲四篇論文入選<b class='flag-5'>自然語(yǔ)言</b>處理頂會(huì)ACL 2025

    單片機(jī)c語(yǔ)言編程實(shí)例大全

    單片機(jī)c語(yǔ)言編程實(shí)例大全_18
    發(fā)表于 04-30 16:11 ?7次下載

    自然語(yǔ)言處理的發(fā)展歷程和應(yīng)用場(chǎng)景

    你是否曾經(jīng)對(duì)著手機(jī)說:“嘿,Siri,今天天氣怎么樣?”或者在出國(guó)旅行時(shí),打開翻譯軟件,對(duì)著菜單說:“請(qǐng)把這道菜翻譯成英文”。
    的頭像 發(fā)表于 04-17 11:40 ?1344次閱讀

    自然語(yǔ)言提示原型在英特爾Vision大會(huì)上首次亮相

    在英特爾Vision大會(huì)上,Network Optix首次展示了自然語(yǔ)言提示原型,該方案將重新定義視頻管理,為各行各業(yè)由AI驅(qū)動(dòng)的洞察和效率提速。
    的頭像 發(fā)表于 04-09 09:30 ?987次閱讀