写点什么

老铁,东北话编程了解一下不?谷歌工程师新作!

  • 2020-02-06
  • 本文字数:2814 字

    阅读完需:约 9 分钟

老铁,东北话编程了解一下不?谷歌工程师新作!

如果说用文言文编程还是有些困难,那么,东北话呢?

项目介绍

文言文编程火了,但使用它需要有一定的古文功底,因此它对大部分开发者来说并不够友好。近日,一位谷歌的工程师琢磨出来一个更加接地气的编程语言项目:dongbei。


项目地址:https://github.com/zhanyong-wan/dongbei


dongbei,它的创造者这样介绍它:


一门以东北方言词汇为基本关键字的以人为本的编程语言。


简单来说就是:用东北话编程。项目的开发者又做了进一步的介绍:


dongbei 语言是基于 Python 3 二次开发的,适用于 Mac OS、Windows、Linux 等系统,安装也极其简单,通过指令:src/dongbei.py 安装即可。如果还没有安装 Python 3,可以通过以下链接安装:https://docs.python-guide.org/starting/install3/osx/


按照惯例,安装完成后要先进行测试,输入:test/dongbei_test.py 即可。


上述流程都验证完了,就可以正式开始编程了,老规矩,先上一句“hello world”。不过,这东北话的“hello world”可是与众不同。


首先创建一个名字叫 hello-world.dongbei 的文本文件,内容如下(已做和谐处理):


唠唠:“唉呀,这嘎哒真那啥!”。
复制代码


用 utf-8 编码保存。 要是编辑器显示编码错误,那就把文件内容改成:


# -*- coding: utf-8 -*-唠唠:“唉呀,这嘎哒真那啥!”。
复制代码


然后在命令行窗口运行:


src/dongbei.py hello-world.dongbei
复制代码


执行结果如下:


唉呀,这嘎哒真那啥!
复制代码


当然,如果是非东北程序员,那么理解东北话还是有点儿困难的,因此你需要对东北话进行一番“补习”,地址在此:


https://github.com/zhanyong-wan/dongbei/blob/master/doc/cheatsheet.md

语法规则

学习一门语言,要掌握“三要素”—词法、语法、语义,带有浓厚东北语言风格的 dongbei 编程语言的语法规则又有什么不一样呢?


先来看看 dongbei 语言词汇的构成。


词法:


字符串变量:


一行代码当中,要是出现配对的中文全角双引号,比如


...“我是一个字符串”...
复制代码


那么引号当中的内容(我是一个字符串)会被当成一个字符串常量。


注释:


一行代码当中,如果在字符串常量外面出现 # 字符,所有从 # 开始的字符都会被当成注释被忽略掉。 比如


唠唠:  # 我是一个注释。    “嘎哈#?”。  # 我还是一个注释。  
复制代码


跟:


唠唠:“嘎哈#?”。
复制代码


是一样的:


分词:为了避免歧义,很多西方语言在书写时要用空白字符或标点把单词隔开,但同时这也比较麻烦,dongbei 语言适应华人的书写习惯,*加不加空格换行无所谓。*所以,下面两种表达方式的效果是一样的。


      “嘎哈?”
复制代码


唠唠:“嘎哈?”。
复制代码


名字:在 dongbei 语言里面,除了关键词、标点符号和常数,剩下的都是名字。 比如,在“张三乘李四”这个 dongbei 语言表达式里,“乘”是一个关键词,“张三”和“李四”是两个不同的名字,dongbei 语言允许用中文全角方括号【】把一串字符标注为名字。


常数:除了用阿拉伯数字表示的十进制整数(比如 2、42、250,等等),0 到 10 的常数也可以用中文表达,二也可以写成两或者俩。 三也可以写成仨;


零一二三四五六七八九十
复制代码


例如五加二的意思是 5+2


五加二
复制代码


语句:一个 dongbei 程序是由一串语句组成的。 每个语句以句号(。)结束。 为了表达程序员炽热的感情,也可以用感叹号(!)结束,意思和句号是一样一样的。


变量:ongbei 语言允许使用任何字符串做变量名。只要记住两点:变量名里所有的空白字符都会被忽略;有歧义的时候要把变量名用【】括起来。


定义变量:dongbei 是一门以人为本的语言。 我们知道东北人都是活雷锋。 所以,要定义一个叫 XX 的变量,写成 :”XX 是活雷锋“, ”老王是活雷锋“ ,”老王是活雷锋!“ 都是可以的。


XX是活雷锋。
复制代码


老王是活雷锋。
复制代码


老王是活雷锋!
复制代码


给变量赋值:dongbei 语言不整“赋值”这种文绉绉的词儿。 咱们叫“装”。 比如:


老王装二。
复制代码


可以理解为 C 语言的


lao_wang = 2;
复制代码


要把一个活雷锋的值清空回到原始状态,可以用”削“:


削老王。
复制代码


增减变量:活雷锋除了会装,加加减减也是常见的操作。 按没病走两步的规矩,这些操作的名字叫做:走走、稍稍、走 X 步、稍 X 步。 比如:


老张装二。  # 现在老张等于2老张走走。  # 现在老张等于3老张走两步。  # 现在老张等于5老张稍稍。  # 现在老张等于4老张稍五步。  # 现在老张等于-1
复制代码


引用变量:变量,活雷锋定义以后就可以引用了。 引用的方法很简单:把活雷锋的名字写出来就成。 比如:


老张是活雷锋。老王是活雷锋。老张装250。老王装老张加13。
复制代码


定义了两个活雷锋:老张和老王。 老张值 250。 老王值 263。


输出:输出信息用“唠唠”来表示,假定输出信息是 YY,可以写:


唠唠:YY。
复制代码


字符串运算:顿号(、) 操作符可以把两个值当成字符串拼接起来。 假定活雷锋老王的当前值是字符串“NB”,那么表达式


老王、“A”
复制代码


上述代码的值就是字符串 NBA。


算术运算:基本的四则运算还是支持的,不过把符号换成了文字,+号用“加”来表示,-号用“减”来表示,*号用“乘”来表示,/号用“除以”来表示。作者特别强调,除法运算叫“除以”,不叫“除”。


乘除的优先级比加减高,相同优先级下,运算从左到右。比如:


3加2乘5
复制代码


最终结果是 13,不是 25


循环:我们一般编程使用的循环是 for、while 等,在 dongbei 项目中,循环语言非常方便、易懂:


变量名 从 X 到 Y 磨叽:  ...  # 需要重复做的事磨叽完了。
复制代码


判断(讲条件):当做某件事情,必须在某个条件成立下才可做时,在该项目中的表述为:


寻思: CCC ?要行咧就 XXX
复制代码


如果该条件不成立时需要执行其他操作,可以写:


寻思: CCC ?要行咧就 XXX要不行咧就 YYY
复制代码

简单演示

在熟悉了一些基本的语法规则后,作者也给出了一些简单的演示,比如,当我们需要定义一个方法(作者在项目中用“套路”来表达),可以这样表述(以“写九九表”为例):


写九九表咋整:  # 定义套路 写九九表。  老王从1到9磨叽:    老张从老王到9磨叽:      唠唠:老王、“*”、老张、“=”、老王乘老张。  # 打印 X*Y=Z    磨叽完了。    唠唠:“”。  # 空一行。  磨叽完了。整完了。  # 结束套路定义。
复制代码


如果需要运行该方法,可以使用整+套路名的方式,比如:


整写九九表
复制代码


这样就可以打印出结果了:


1*1=11*2=21*3=3...8*8=648*9=729*9=81
复制代码


这样的简单示例还有很多,此处仅列举这一个作为参考,对于复杂的递归题目,作者表示该编程语言同样有效,例如这道程序员都很熟悉的题目:


求 n 的阶乘 f(n) : 如果n是0,结果为1。如果n比0大,结果就是n * f(n-1)。递归(作者使用“自推”来表达)的精髓是在算 f(n) 时,先算 f(n-1),再从 f(n-1) 算出 f(n)。 
复制代码


如果把上面的思路用 dongbei 这个语言写出来,就是下述效果:


【阶乘】(那啥)咋整:  # 定义套路 阶乘,有一个参数 那啥。  寻思:那啥比一小? # 需要自推吗?  要行咧就 滚犊子吧 一。  # 不需要。  要不行咧就 滚犊子吧 那啥乘整【阶乘】(那啥减一)。  # 需要。自推吧。整完了。  # 定义结束。
复制代码

作者简介

Zhanyong Wan,谷歌资深软件工程师/技术主管经理,谷歌 C ++测试框架 googletest 和 googlemock 的原始作者。


2020-02-06 15:283443

评论

发布
暂无评论
发现更多内容

企业如何挑选适合自己需求的文件传输软件

镭速

文件传输软件

文心一言 VS 讯飞星火 VS chatgpt (73)-- 算法导论7.1 4题

福大大架构师每日一题

福大大架构师每日一题

智慧生活的下半场,从全屋智能4.0接入未来

这不科技

华为 鸿蒙系统

HarmonyOS系统级推送服务,打造消息通知新体验

Geek_2d6073

MRS大企业ERP流程实时数据湖加工最佳实践

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

低代码平台“高”效率开发的5个能力

高端章鱼哥

软件开发 低代码 提高效率 JNPF

面部表情识别技术的挑战与前景

来自四九城儿

HarmonyOS系统级推送服务,打造消息通知新体验

HarmonyOS SDK

软件测试/测试开发丨Python 内置库 正则表达式re

测试人

Python 正则表达式 程序员 软件测试 测试开发

浪潮海岳云原生平台技术分享丨轻松解决数据库备份痛点

inBuilder低代码平台

云原生 低代码平台

腾讯云ES:一站式配置,TKE容器日志采集与分析就是这么简单

腾讯云大数据

ES

Photoshop 2023 (ps 2023) for Mac v24.6/25.0beta激活版

mac

Photoshop 2023 PS2023 修图软件 苹果mac Windows软件下载

面部表情识别在社交媒体中的应用

来自四九城儿

火爆全球的AI艺术二维码到底是怎么做的?

Ricky

二维码 个性化推荐 二维码生成

龙蜥社区系统运维 MeetUp

乘云数字DataBuff

告别传统人肉运维,实现360°可观测!奇点云数据存算引擎DataKun R2.0发布

奇点云

产品发布 奇点云 数据安全引擎 数据存算引擎

2023年广州国际智能窗帘及智能门窗遮阳展会

秋硕展览

软件测试/测试开发丨Python 内置库 多线程threading

测试人

Python 程序员 软件测试 自动化测试 测试开发

Observable设计模式简介

树上有只程序猿

Java java-API Observable

RR有幻读问题吗?MVCC能否解决幻读?

王磊

Java Java 面试题

关于低代码解放程序员这件事儿

互联网工科生

低代码 可视化开发 企业级应用程序开发 JNPF

时序数据库 TDengine SQL 查询语法规则汇总,官方教程奉上!

爱倒腾的程序员

数据库

基于Pair-wise和CrossEncoder训练单塔模型

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

数字时代的生产力工具:低代码开发平台

力软低代码开发平台

洛基:北欧怪奇之旅 Röki for Mac(冒险解谜游戏)

mac

mac游戏 苹果mac游戏 洛基北欧怪奇之旅 冒险解谜游戏 Röki

瓴羊Quick BI跻身Gartner魔力象限挑战者行列

夜雨微澜

超好用的数据可视化工具——Grafana

云原生应用市场

监控 数据 Grafana 告警

面部表情识别的未来发展趋势

来自四九城儿

HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

Geek_2d6073

软件测试/测试开发丨Python 内置库 pythonlogging

测试人

Python 程序员 软件测试 自动化测试 测试开发

老铁,东北话编程了解一下不?谷歌工程师新作!_AI&大模型_陈思_InfoQ精选文章