嗨,编程语言

从本文开始,我们开始发布新编程语言Hi的实现概念。



之所以需要开发一种新的语言,而不是复制任何现有的通用编程语言的语法,是由于一种原始概念,我们今天将讨论这一概念。我们认为,对于所有对语言的实用性感兴趣的人,创建和实施新语言的概念本身就是一个引人入胜且内容丰富的故事。



我们假设,为了理解所介绍的材料,读者熟悉几种通用通用编程语言的语法和语义。


不要咬我的手指,看看我指的是

沃伦·麦卡洛克(Warren S. McCulloch),1960年代


问题的初步陈述



最初,我们将任务的实现任务定为实施交互式任务的自主生成技术,以发展人类的智能,这将适应他的成败。就是说,如果一个人成功地解决了一系列难题并且有效地通过了游戏,那么该技术将重建其算法,以便一个人可以解决具有新的,更复杂的条件以及永远无法完全重复的不可预测版本的难题。在失败的情况下,该技术使一个人返回到已经熟悉的位置,以重组其能力和准备进行新的智力提升的程序。从根本上说,自适应程序在这里的工作与运动中经验丰富的私人教练相同。



通常,在一定的限制下,这项任务可以通过Helius充满生命的应用程序在2018年解决,该应用程序可以在App Store中找到



在实施Helius概念的过程中,我们意识到,为了进行下一步并实施一种全新的自适应应用程序,该类能够完全改变其体系结构,适应人类的能力,我们需要内置的算法脚本语言,其清单可以包括应用程序本身和人员都可以成功地以文本形式成功地生成,或者可以由人员或其他程序基于提供的代码作为初始原型对其进行修改。



我们形成了主要要求,并很快得出结论,专注于表达开发人员的创造性需求的概念在任何一种通用语言中都没有很好地建模,因为在某种程度上讲,我们的目标是对人员而非计算机进行编程。



由于精心设计的智能系统以任何形式生成任何一致的语言的语法都是“方便”的,因此为了使用“人工”和“自然”智能之间的交流语言,使用传统的算法代码是合乎逻辑的,从而使其尽可能地方便了人类的思维模式熟悉主流语言,其祖先是Algol。它们是Pascal(Ada,Modula)和C(C ++,Java,Swift)的后代。但是,我们构造抽象和注意括号的概念很接近Scheme(Lisp)的精神,并且将编程环境命令集成到该语言的表达方式中符合脚本语言,第一台微型计算机的老式BASIC和Oberon项目-Niklaus Wirth系统的思想。



我们最初的目标还包括提供一种简单便捷的算法语言,以使新手开发人员学习一到两个小时即可快速编程思维游戏和谜题。同时,我们本着Scratch的精神或脚本和视觉编辑器中游戏原型的精神,从根本上放弃了应用程序对象的视觉设计。我们认为,这会分散创意和表达自己的想法,因为创造性的工作已被艰辛的研究和图形对象的转换所代替。我们建议将来提供这项工作,作为对智能代理算法的培训。



结果,我们将语言的目的表述为在人工智能和自然智能之间交换算法,为自己和他人进行联合任务(游戏和拼图)编程,自由交换程序文本。



你好世界



在讨论构造语言语法的要点之前,我们先介绍三个简短的代码段。让我们从传统的欢迎消息程序开始:



PRINT “Hello world!”


我们看到,我们的语言具有脚本特性,并具有快速的解释能力。打印命令为大写,并且内置函数参数后没有括号。



让我们给出两个更有趣的示例:以命令式样式为两个整数找到最大公约数并使用递归:



FUN gcd
   INPUT a: INT
   INPUT b: INT
   WHILE a ~= b LOOP
      IF a > b THEN a -= b ELSE b -= a ENDIF
   REPEAT
   PRINT “gcd = “, a
RETURN

FUN gcd _ a: INT, _ b: INT -> INT
   IF b == 0 THEN RETURN a ENDIF
RETURN gcd b, (a % b)

PRINT gcd 6, 9 
#  3


喜语言要求



每种成功的语言都有特定的用途,这决定了其语法特征和语义。例如,ASSEMBLER被设计为以人类友好的助记符形式直接编码处理器指令。 BASIC(带有行号和GOTO语句的代码)成功地继续了将命令直接翻译为高级解释器的想法。嗨,编程语言旨在成为人类和某些设计系统的抽象智能之间进行通信的命令和算法的语言。



从逻辑上讲,程序代码不是已编译的机器代码,也不是虚拟机的字节码,而是源代码(列出),包括评论。因此,代码的内部实现没有以任何方式标准化,并由解释器或编译器实现自行决定。



因此,我们的主要目标是使用形式语言交流思想。让我们介绍三个主要要求:



  1. 语言应该易于学习
  2. 语言必须可靠使用
  3. 该语言必须能够组织非常复杂的软件系统。


让我们更详细地探讨这些基本要求。



语言应该易于学习



1)我们将使用任何受过现代教育的人都熟悉的易于阅读的句法写作。我们将避免进行简短的实验,以免损害阅读效果,例如APL语言。



因此,我们使用LOOP…REPEAT而不是的类型的构造{…}。作为一个不错的选择,我们将使用花括号,如下所示:

s = {1, 2, 3}我们将把变量s赋值给一三个整数。

a = [1, 2, 3]我们将表示将变量a分配给三个整数数组



使用经过深思熟虑的简洁语言构造,还可以使您在不使用环境上下文的情况下,在语言的语义和语法之间建立更逻辑的联系。当我们考虑特定的语言构造时,我们将在后面更详细地讨论该论文。



2)对于算术表达式,我们使用形式的符号:,a + b + c而不是(+ a b c)LISP系列中的形式。



3)我们的脚本语言的性质要求内置语言库,该库包含语言环境中所有必需的功能,而无需外部框架。



4)我们使用本机算法来思考模式:一种命令式语言,具有递归功能和功能计算元素。正如我们将进一步考虑使用示例之一一样,命令式样式对于以声明性方式(例如SwiftUI)基于事件处理架构的应用程序进行编程非常方便。换句话说,术语“命令性”和“声明性”宁可反映观察者的立场,而不是某种意义上给予我们的现实。



5)我们监视语法结构和输入代码字符的人体工程学的冗余性。我们使用换行符作为分隔符。但是,就像在Swift语言中一样,您可以使用“;” 一行上作为多个表达式的分隔符。同时,我们的工程教育强烈反对在程序文本中给缩进赋予句法含义,就像以前在Fortran中使用的,现在在Python中一样。



可靠的语言



及时存在复杂系统的必要条件是,在将来不可避免的语言发展和复杂化的情况下,必须对每个正确编写的程序具有完全的语义唯一性和可行性,而无需进行更正。在不可避免地发展壮大的情况下,如何解决程序可靠性问题?为了避免标识符和保留字的重合冲突,我们使用一种简单有效的方法,例如在Oberon中所做的。HI 语言保留所有标识符,这些标识符使用大写字母(不含数字)和一个以上字符作为服务标识符。因此,以下示例是程序员手工编写或由智能系统生成的有效标识符:



foo, Foo, f_001, F1, F, for


该语言保留的标识符示例:



FOO, FOR, HI, YES, EVERYRESTRICTIONMATTER


为了保证代码的可靠性,我们使用静态类型,并具有从形式的声明中自动推断类型的能力:



LET x = 6  #  x   INT
VAR boolean = TRUE  #   boolean  BOOL


我们区分常量和变量不是为了优化代码执行时间,而是使开发人员对他控制的对象的用途有很好的了解。



用于构建非常复杂的软件系统的语言



任何通用语言的体系结构都应该为从一个小的自治部分(例如,一个源中最多250 LOC)构建复杂程序提供一种深思熟虑的可能性,因为原谅我们亲爱的Reader,只有扫描仪和解析器才能轻松处理任何复杂的源文本,并且一个人甚至可以乘以两个三位数没有计算器,整数很难。



目前,我们将不使用Hi语言来实现复杂系统的体系结构,并且在将来提出组织类的概念时将详细分析这些问题-协议,它们之间的通信以及构造其层次结构的方法。我们仅注意到,复杂的应用程序的体系结构将由较小的自治,易于阅读和可修改的片段构建,并且在这里我们从计算机科学的研究中汲取灵感,而不是从生物体的细胞与器官相互作用的体系结构中汲取灵感。普通人的身体大约有50万亿个活细胞,尽管环境条件艰苦,存在许多寄生虫,并且不断损坏数百万个微组件,但它们仍能成功运行。计算机系统的创造者,由于仅调用了一个不存在的数组索引,该函数就完全停止运行,这里有很多东西要学习。



尽管我们从一种脚本语言开始,这种脚本语言便于对小难题进行快速而有趣的编程,但我们必须让开发人员充分相信,一旦平台上开发了简单的软件组件而无需使用第三方解决方案,将来他们就可以在平台上构建无限复杂性的可行系统。



局限性



实际上,每当我们对系统设计应用任何要求时,我们都必须牺牲某些东西或不注意某些东西。对我们来说,在Hi语言的构造中,它并不重要:



  • 与其他编程语言的语法完全兼容
  • 能够使用现有的外部代码库或与其他软件系统集成
  • c n-
  • /
  • — ,


最后,让我们谈谈编程语言HI,Hi或hi的友好名称的由来。让它成为^ h elius'nteractive编程语言或^ h乌曼ntelligence编程语言。与我们的语言中的所有构造不同,这是唯一没有明确语义的元标识符。



在下一篇文章中,我们将“在一个页面上”介绍Hi Basic编程语言,然后按照上述要求对语法构造逻辑进行分析。



All Articles