0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MetaCode ,可以用自然语言编程

WpOh_rgznai100 来源:lq 2019-07-18 11:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

周六晚上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。”

对类进行打包

把文件从一个地方复制到另外一个地方

运行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 < ApplicationRecord has_many :books, dependent: :destroyend

“当你这么写了以后,神奇的事情发生了,按照约定,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写的,名称就叫做《领域特定语言》!”

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DSL
    DSL
    +关注

    关注

    2

    文章

    61

    浏览量

    39186
  • 数据库
    +关注

    关注

    7

    文章

    4083

    浏览量

    68538
  • 自然语言
    +关注

    关注

    1

    文章

    292

    浏览量

    14026

原文标题:我发现了一个非常酷的软件,用自然语言编程!

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    安霸AI SoC放大招:深度适配OpenClaw,驱动机器人自主进化

    “AI 大模型落地需要端侧算力的支持,时间的节点已经到来。现在的人形机器人需要自主决策的能力,可以用自然语言和人类交互,并且理解人类布置的任务,自主做决策。”安霸半导体研发总监钱豪表示,到底硬件层面
    的头像 发表于 03-17 16:07 8205次阅读
    安霸AI SoC放大招:深度适配OpenClaw,驱动机器人自主进化

    自然语言处理NLP的概念和工作原理

    自然语言处理 (NLP) 是人工智能 (AI) 的一个分支,它会教计算机如何理解口头和书面形式的人类语言自然语言处理将计算语言学与机器学习和深度学习相结合来处理语音和文本数据,这些数
    的头像 发表于 01-29 14:01 592次阅读
    <b class='flag-5'>自然语言</b>处理NLP的概念和工作原理

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

    什么方法可以用最少的引脚,接最多的按键?
    发表于 01-20 07:08

    请问串口接收可以用scanf接收吗?

    串口接收可以用scanf接收吗?
    发表于 01-15 08:20

    为什么单片机还在用C语言编程

    说起单片机我们就会想到C语言,单片机为什么还在用C语言编程?现在有很多很好用的高级语言,如VC、PYTHON、PHP等等,为什么这些语言不能
    发表于 11-28 07:37

    C语言编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

    云知声论文入选自然语言处理顶会EMNLP 2025

    近日,自然语言处理(NLP)领域国际权威会议 ——2025 年计算语言学与自然语言处理国际会议(EMNLP 2025)公布论文录用结果,云知声提交的《面向门诊病历生成的高质量医患对话合成技术
    的头像 发表于 11-10 17:30 903次阅读
    云知声论文入选<b class='flag-5'>自然语言</b>处理顶会EMNLP 2025

    不只有AI协作编程(Vibe Coding):生成式系统级芯片(GenSoC)将如何把生成式设计推向硬件层面

    但是否能将这种生成式的、目标驱动的方法从软件层向下延伸呢?这一理念是否可以直接应用于硬件本身呢?通过GenSoC,开发者可用自然语言或高级模型描述系统行为,XMOS的工具链将自动生成确定的、实时的、可重构的SoC,并可即刻直接部署在XCORE® GenSoC芯片平台上。
    的头像 发表于 11-07 14:04 660次阅读

    HarmonyOSAI编程自然语言代码生成

    安装CodeGenie后,在下方对话框内,输入代码需求描述,将根据描述智能生成代码,生成内容可一键复制或一键插入至编辑区当前光标位置。 提问示例 使用ArkTs语言写一段代码,在页面中间部分
    发表于 09-05 16:58

    北斗生态环境监测站:读懂自然的 “语言

    北斗生态环境监测站:读懂自然的 “语言”柏峰【BF-BDQX】当生态监测遇上北斗技术,一场关于 “精准守护自然” 的变革正悄然发生 ——北斗生态环境监测站以北斗定位导航系统为核心
    的头像 发表于 09-04 10:59 628次阅读
    北斗生态环境监测站:读懂<b class='flag-5'>自然</b>的 “<b class='flag-5'>语言</b>”

    HarmonyOSAI编程页面生成

    支持通过自然语言对话,生成应用/元服务可用的页面代码,生成结果支持实时预览,帮助开发者快速完成页面搭建。 点击页面右侧菜单栏CodeGenie图标,完成登录后在输入框输入\"/\"
    发表于 08-29 15:50

    【HZ-T536开发板免费体验】5- 无需死记 Linux 命令! CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板

    )真香,是不是可以没有YOLO和OCR了? - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛!已经详细介绍了,这里不再赘述。 四、测试验证:自然语言控制开发板 启动服务器
    发表于 08-23 13:10

    收银机的电源适配器坏了,可以用其他产品的替代使用吗?

    在日常的商业运营中,收银机作为门店管理的核心设备,其稳定性和可靠性至关重要。然而,当原装收银机电源适配器坏了的话,我们是否可以用其他产品的电源适配器来临时替代收银机的原装电源适配器呢?答案是不能
    的头像 发表于 08-02 10:03 1060次阅读
    收银机的电源适配器坏了,<b class='flag-5'>可以用</b>其他产品的替代使用吗?

    云知声四篇论文入选自然语言处理顶会ACL 2025

    近日,第63届国际计算语言学年会ACL 2025(Annual Meeting of the Association for Computational Linguistics,简称ACL)论文接收
    的头像 发表于 05-26 14:15 1456次阅读
    云知声四篇论文入选<b class='flag-5'>自然语言</b>处理顶会ACL 2025

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 7次下载