通用型的中文编程语言探讨之一: 高考

简介: 由高考开设编程科目说开去, 设想一种通用型的中文编程语言. As university entrace exam in China starts to include programming, here we discuss about a general-purpose programming language in Chinese.

在可预见的未来, 高考仍是最重要的也最有社会影响力的人才选拔机制. 很久没有关注, 最近得知高考自选科目中开始增加了编程一项(见如何评价2017浙江高考七选三科目中包含技术?). 虽然个人对编程是否应该进入高考仍有保留看法, 但至少全民(都应该可以)编程这一趋势已经很明显了. 这应该是中文编程兴起的另一个契机(前文中文编程兴起的必然性讨论了一些更技术性的原因).

看了2017年浙江的高考卷, 感觉算法/体系/基础知识比较少, 比较偏技术. 相信以后会逐渐调整. 毕竟技术更新快, 而前者更经得起时间考验也更有含金量. 个人觉得算法在短期内仍需要一个具体的编程语言作为载体, 毕竟教学实践中不可能作纯粹的纸上算法. 那么, 一个适合算法设计和实践的中文编程语言, 假如能在高考卷中使用, 相信会是一个中文编程的里程碑.

本文试图列出一些(当然绝不是全部)这一假想中的语言/开发环境的功能特性和示例, 希望抛砖引玉. 其中, 对每项功能的必需性按照一到三排列, 一最高.

版权/安全

  • [一] 必须从开始就理清所有依赖库的版权问题, 为商用扫清顾虑
  • [一] 杀毒软件不能误报

功能/API

  • [一] 可以实现所有现有语言能够完成的功能. (注: 评论指出'所有'一词有歧义. 这里原意是指它附带的API以及可使用的第三方库的功能能够覆盖大多数应用场景) 如果这一语言的主要用途只是教学(比如LOGO), 那么它应该很难被选择为教学用的语言, 毕竟现在大环境是实用至上. 因此, 即使它本身(核心库)的功能比较局限, 只要可以无缝集成其他通用语言 (比如可以调用Java库的wkgcass/Latte-lang)即可.
  • [一] 支持64位系统, 跨平台(Windows/Linux/Mac), 最好支持移动平台(即使不能, 最好提供基本的在线编程环境)
  • [二] 常用功能需要中文API, 即使是封装现有API也可. 在高考题中可以看到还是不少与UI和I/O有关, 中文化争取早日覆盖常用API.

语法设计

(将在program-in-chinese/overview持续改进和更新)

  • [一] 相对英文编程语言的直译, 语法应更接近中文自然语言语法, 并且包含的特殊符号尽量使用数学常用符号. 比如下面一种设想的语言(欢迎拍砖!), 与Python的二分查找对比.

    • 选择{}作为函数体边界, 因为数学定义中常用左大括号(如下). 暂时没有想到比添上右大括号更合适的设计. 至于{}是否允许省略, 倾向于不允许, 以规避歧义. 另一种可能是类似日语编程语言"抚子" - 第三版特色初探, 不用{}而是使用关键词作为结束标志("直到这里"之类)
    • 缩进量不改变语义, 仅为改进可读可选: 为避免意外的缩进错误导致的语义错误
    • 用'为'替代==, 为避免误写为=导致的无心之失. 在数学中, =的相等意义与赋值更接近. 数学中>, <作为判断条件使用, 与代码中意义相同, 适合沿用. 至于'大/小于等于', '不等于', 个人倾向于直接用≥, ≤, ≠符号. 而不用>=, <=, !=. 至少搜狗还算容易打出, 虽然效率挺低. (后得知易语言IDE也会自动将>=格式化为≥)
    • 避免//这种数学中没有的符号, 用'向下取整'是可读性优先于简短性
    • 数组/列表下标用(), 因为它们其实是索引/下标的函数, 类似Scala设计
    • [三] 是否用带空格设计, 个人认为不用强求(取决于技术可行性). 下面的语法如果不带空格, 也许会貌似自然语言而语法不够自然. 当然欢迎提出不带空格的示例程序!
    • 断句是否用换行或者特殊符号, 个人倾向于避免引入额外符号
    • 调用对象中的方法, 没有想到比"某实例.某方法(..)"之外的方案, 去掉"."分隔符同样会有不带空格设计类似问题, 从而间接添加了方法命名的限制
    • 支持全/半角. 选择有, 开发环境在编辑源码时就对源码自动转换到一种格式, 或者编译时自动转换到一种格式. 个人现在感觉前者更能使源码格式统一, 但开发环境和编译器的耦合度恐怕更高. 易语言好像采用前者, 日语编程语言"抚子"-第三版实现初探好像采用后者.
定义 二分查找(数组, 目标) {
  左索引 = 0
  右索引 = 取长度(数组) - 1
  位置 = -1

  当 左索引 ≤ 右索引 且 位置 为 -1 {
    中索引 = 向下取整((左索引 + 右索引) / 2)
    如果 数组(中索引) 为 目标 {
      位置 = 中索引
    } 否则 {
      如果 数组(中索引) > 目标 {
        右索引 = 中索引 - 1
      } 否则 {
        左索引 = 中索引 + 1
      }
    }
  }
  返回 位置
}

Python:

def binarySearch(array, key):
    left = 0
    right = len(array) - 1

    res = -1

    while left <= right and res == -1:
        mid = (left + right) // 2

        if array[mid] == key:
            res = mid
        else:
            if array[mid] > key:
                right = mid - 1
            else:
                left = mid + 1

    return res

性能

  • [一] 为了适合算法实践, 代码的运行能如实反映算法复杂度
  • [二] 绝对性能的优先级至少在前期不高, 最好做到与主流脚本语言性能在一个量级

开发环境

  • [一] 界面是中文
  • [一] 所有反馈信息首先有中文版
  • [一] 编辑辅助功能: 代码补全和自动格式化
  • [一] 调试功能: 断点调试
  • [一] 完备集成最新的语言和核心库文档, 并方便在开发过程中查阅
  • [二] 集成定制的输入法, 为中文代码输入进行特殊优化
  • [二] 开发环境/语言/核心库版本都可以在开发环境中直接更新
  • [三] 内置代码版本控制功能

项目开展与维护

  • [一] 开源. 除了像M$这样有历史积累的公司, 很难想象官方会倚靠一个刚起步的初创公司对这种需要中长期支持的语言/开发环境进行维护. 为了尽快完善语言和工具链, 也必需倚靠开源社区的力量.
  • [一] 源代码中尽量以中文命名, 因为目标受众是中文使用者, 自然开发社区也会以中文母语的开发者为主, 除了开发环境, 语言本身相关工具链对外部的依赖即使有也应该可以局限到独立模块, 因此中文命名的技术障碍不大.
  • [一] 用哪个语言实现, 需要结合功能特性综合考虑. 一些可能的选项: C#, Java, JavaScript/TypeScript

一些相关讨论和参考:

讨论: 适合中文用户的编程语言和IDE, 侧重于现有语言/IDE不具备的特性 · Issue #11 · program-in-chinese/overview

2018-01-05

相关文章
|
11月前
|
编译器 开发工具 C语言
C语言入门(一代小白被迫被拔苗助长)
C语言入门(一代小白被迫被拔苗助长)
|
缓存 搜索推荐 算法
玩转Python编程:打造自己的编程王国
如果你想自学 Python 编程语言,那么你来对了地方!Python 是一种非常流行的编程语言,具有广泛的应用场景,从 Web 开发到数据科学都能发挥作用。Python 也因为其简单易学和强大的功能而备受欢迎。
|
C语言 C++
C/C++语言入门——鸡兔同笼问题
C/C++语言入门——鸡兔同笼问题
870 0
|
存储 SQL JavaScript
他们发明了一门编程语言,名字叫:摇滚明星 Rockstar
  Rockstar 是一门图灵完备的动态编程语言。设计这门语言的目的是能够像写歌词一样开发计算机程序。它的歌词风格主要受 20 世纪 80 年代重摇滚和电力民谣的影响。   为什么会有 Rockstar?   如果我们让 Rockstar 成为一门真正的(虽然毫无意义)编程语言,招聘人员就不会在招聘时对“摇滚开发者”颇有微词。   另外,它很有趣,一门基于歌词编译的编程语言很值得我们一试。   我们还可以用它做贴纸,谁不想在自己的笔记本电脑上贴上“认证 Rockstar 开发者”这样的贴纸呢?   Rockstar 语言规范   注释   我们不建议在 Rockstar 程序中
354 0
|
程序员 开发者
一篇鞭策程序员的短文:我们这一代的汽车工人
译者按:Greg Baugues 把今日的程序员和 20 世纪 60 年代的底特律汽车工人作比较,阐述了在景气的行业下暗藏的威胁:开发者的需求越来越少,并且新开发者越来越多的现状。虽然国内外的环境有些不同,但也不难理解并深有同感的样子。
116 0
费曼康奈尔讲座老视频爆火:为什么说数学是自然界通用语言?
费曼康奈尔讲座老视频爆火:为什么说数学是自然界通用语言?
168 0
|
SQL Go Swift
2020年8月编程语言排行榜新鲜出炉 - 编程语言世界的假期
本月TIOBE指数没有多大变化。编程语言R继续它的高光时刻,并且有望按计划成为2020年年度编程语言。跟随其后的,Go,Swift和SQL在TIOBE索引中不断抢占第10名的争夺战也很有趣。
2352 0
2020年8月编程语言排行榜新鲜出炉 - 编程语言世界的假期
|
自然语言处理 Java 测试技术
重拾《 两周自制脚本语言 》- 支持中文标识符
为《 两周自制脚本语言 》添加中文标识符支持.
984 0
专栏一岁了-我为什么投身于普及用中文编程
在中文编程知乎专栏创立一周年之际, 对自己的相关历程作小结. Summary of my own relevant experience one year after starting "Programming in Chinese" column.
848 0
|
自然语言处理 Java 开发者
又见套路:如果计算机是用中文编程,你能成为计算机编程专家吗?
对质疑中文编程的一篇网文的逐条驳斥. Detailed response to a post that's questioning programming in Chinese.
1129 0

热门文章

最新文章