こんにちはプログラミング言語

この記事から、新しいプログラミング言語Hiの実装の概念の公開を開始します。



新しい言語を開発する必要があり、既存の一般的なプログラミング言語の構文をコピーしない必要があるのは、今日お話しする一種の独自の概念によるものです。私たちの意見では、新しい言語の概念を作成して実装するプロセス自体が、言語の実用性に関心のあるすべての人にとって魅力的で有益な話です。



提示された資料を理解するために、読者はいくつかの一般的な汎用プログラミング言語の構文とセマンティクスに精通していることを前提としています。


指を噛まないで、私が指している場所を見てください。

ウォーレンS.マッカロック、1960年代


問題の最初の声明



最初に、人間の知性の開発のためのインタラクティブなタスクの自律生成のテクノロジーを実装するタスクを設定しました。これは、彼の成功と失敗に適応します。つまり、人が一連のパズルをうまく解き、ゲームをプレイするのに効果的である場合、このテクノロジーはアルゴリズムを再構築して、新しい、より複雑な条件と、正確に繰り返されることのない予測できないバージョンのゲームでパズルを解くことができるようにします。失敗した場合、このテクノロジーは、新しい知的上昇を実行するための彼の能力と準備のプログラムを再構築するために、すでに慣れ親しんだ位置に人を戻します。基本的に、アダプティブプログラムは、スポーツの経験豊富なパーソナルトレーナーと同じ仕事をします。



一般的には、いくつかの制限と、このタスクはによって2018年に戻って解決したHelius'アプリケーションの人生のフル- で見つけることができるのApp Store



Heliusのコンセプトを実装する過程で、次のステップに進み、アーキテクチャを完全に変換して人間の能力に適応できる、根本的に新しいクラスの適応アプリケーションを実装するには、組み込みのアルゴリズムスクリプト言語が必要であることに気付きました。アプリケーション自体と人の両方によってテキスト形式で同様に正常に生成されるか、初期プロトタイプとして提供されたコードに基づいて人または別のプログラムによって変更できます



私たちは主な要件を形成し、開発者の創造的なニーズを表現することに焦点を当てた概念は、ある程度の冗談を言って、コンピューターではなく人をプログラミングすることを目標としているため、一般的な言語ではあまりモデル化されていないとすぐに結論付けました。



適切に設計された知的システムがあらゆる形式の一貫した言語の構文を生成することも同様に「便利」であるため、「人工」インテリジェンスと「自然」インテリジェンスの間の通信言語を使用するために、従来のアルゴリズムコードを使用することは論理的であり、人間の思考パターンに可能な限り便利になります。祖先がアルゴルであった主流の言語に精通している。それらは、Pascal(Ada、Modula)およびC(C ++、Java、Swift)のラインに沿った子孫です。ただし、抽象化を構築し、括弧に注意を払うという私たちの概念は、Scheme(Lisp)の精神に近く、プログラミング環境コマンドを言語の表現手段に統合することは、スクリプト言語、最初のマイクロコンピューター用のビンテージBASIC、およびOberonプロジェクト(Niklaus Wirthのシステム)のアイデアに対応します。



私たちの当初の目標には、1〜2時間の初心者開発者の学習曲線で、マインドゲームやパズルをすばやくプログラミングするためのシンプルで使いやすいアルゴリズム言語を提供することも含まれています。同時に、Scratchの精神に基づいたアプリケーションオブジェクトのビジュアルデザインや、スクリプトおよびビジュアルエディタでのゲームのプロトタイピングは基本的に脇に置いておきました。私たちの意見では、これは自分のアイデアの創造性と表現の邪魔になります。なぜなら、創造的な努力は、[グラフィック]オブジェクトの綿密な研究と変換に置き換えられるからです。将来的には、インテリジェントエージェントのアルゴリズムのトレーニングとしてこの作業を提供することを提案します。



その結果、言語の目的を次のように定式化します。人工知能と自然知能の間のアルゴリズムの交換、自分と他の人のためのタスク(ゲームとパズル)の共同プログラミング、プログラムテキストの無料交換。



こんにちは、世界よ



言語の構文を構築するための要点を説明する前に、3つの短いコードスニペットを示します。従来のウェルカムメッセージプログラムから始めましょう。



PRINT “Hello world!”


速い解釈を前提として、私たちの言語にはスクリプトの特徴があることがわかります。printコマンドは大文字であり、組み込み関数引数の後に括弧はありません。



さらに2つの興味深い例を示しましょう。必須スタイルで2つの整数の最大の共通除数を見つけ、再帰を使用します。



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ステートメントを持つもの)は、コマンドを高レベルのインタープリターに直接変換するというアイデアを成功裏に継続しました。こんにちはプログラミング言語は、人間といくつかの設計されたシステムの抽象的なインテリジェンスとの間の通信のためのコマンドとアルゴリズムの言語になることを目的としています。



論理的な結果として、プログラムコードはコンパイルされたマシンコードではなく、仮想マシンのバイトコードではなく、ソースコードです。(リスト)コメントを含む。したがって、コードの内部実装は決して標準化されておらず、インタプリタまたはコンパイラの実装の裁量に任されています。



したがって、私たちの主な目標は、正式な言語を使用して意見を交換することです。3つの主な要件を紹介しましょう。



  1. 言語は人が学びやすいものでなければなりません
  2. 言語は使用するのに信頼できるものでなければなりません
  3. 言語は、非常に複雑なソフトウェアシステムを編成できる必要があります。


これらの基本的な要件について詳しく見ていきましょう。



言語は習得しやすいものでなければなりません



1)現代の教育を受けた人なら誰でも知っている読みやすい構文の書き方を使用します。たとえば、APL言語で行われているように、読みやすさを損なうような簡潔な実験は避けます。



したがって、LOOP…REPEATではなくこの種の構成を使用します{…}。素晴らしいボーナスとして、次のような中括弧を使用します。

s = {1, 2, 3}変数sの3つの整数のセットへの割り当てを示します。

a = [1, 2, 3]変数aの3つの整数の配列への割り当てを示します。



よく考えられた簡潔な言語構造を使用すると、環境のコンテキストを使用せずに、言語のセマンティクスと構文をより論理的に接続することもできます。この論文については、後で特定の言語構成を検討するときに詳しく説明します。



2)算術式の場合、LISPファミリのように、ではa + b + cなく:の形式の表記を使用し(+ a b c)ます。



3)スクリプト言語の性質上、外部フレームワークを必要とせずに、言語の環境で必要なすべての機能の組み込みライブラリが必要です。



4)思考パターンにはネイティブアルゴリズムを使用します。再帰関数および関数計算の要素の可能性がある必須言語です。例の1つを使用することをさらに検討するため、必須スタイルは、SwiftUIのように、宣言的な方法でイベント処理のアーキテクチャに基づいてアプリケーションをプログラミングする場合に非常に便利です。言い換えれば、「必須」および「宣言的」という用語は、ある意味で私たちに与えられた現実ではなく、むしろ観察者の立場を反映しています。



5)構文構造の冗長性の欠如とコード文字の入力の人間工学を監視します。区切り文字としてnewlineを使用します。ただし、Swiftと同様に、「;」を使用できます。複数の式の区切り文字として1行に。同時に、私たちの工学教育は、以前は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


コードの実行時間を最適化するためではなく、開発者が制御するオブジェクトの目的を十分に理解できるように、定数と変数を区別します。



非常に複雑なソフトウェアシステムを構築するための言語



ユニバーサル言語のアーキテクチャは、1つのソースで最大250のLOCなど、小さな自律的な部分から複雑なプログラムを構築するという思慮深い可能性を提供する必要があります。読者の皆様、ご容赦ください。スキャナーとパーサーだけが、あらゆる複雑なソーステキストを簡単に処理でき、人は3桁の数を掛けることさえできます。計算機なしでは整数は難しい。



とりあえず、Hi言語での複雑なシステムのアーキテクチャの実装は脇に置き、クラスの編成の概念(プロトコル、クラス間の通信、階層の構築方法)のプレゼンテーションの後半で、これらの問題を詳細に分析します。複雑なアプリケーションのアーキテクチャは、小さな自律的で、読みやすく、変更可能なフラグメントから構築されることに注意してください。ここでは、コンピュータサイエンスの研究からではなく、生物の細胞と器官の相互作用のアーキテクチャからインスピレーションを得ました。普通の人の体は約50兆個の生細胞であり、困難な環境条件、多くの寄生虫の存在、数百万の微小成分への恒久的な損傷にもかかわらず、正常に機能します。コンピュータシステムの作成者、存在しない配列インデックスへの1回の呼び出しが原因で完全に機能しなくなるため、ここで学ぶことがたくさんあります。



小さなパズルをすばやく楽しくプログラミングするのに便利なスクリプト言語から始めますが、プラットフォーム上でサードパーティのソリューションを使用せずに単純なソフトウェアコンポーネントを開発すると、将来的には無制限の複雑さの実行可能なシステムを構築できることを開発者に完全に確信させる必要があります。



制限事項



実際には、システムの設計に要件を適用するときはいつでも、何かを犠牲にするか、何かに注意を払わないようにする必要があります。私たちにとって、Hi言語の構築において、それは基本的に重要ではありません。



  • 他のプログラミング言語との正確な構文互換性
  • 既存の外部コードライブラリを使用したり、他のソフトウェアシステムと統合したりする機能
  • c n-
  • /
  • — ,


結論として、プログラミング言語HI、Hi、またはhiの親しみやすい名前の由来について考えてみましょう。それはしてみましょうH elius'私は言語やプログラミングnteractive H UMAN I ntelligenceプログラミング言語。私たちの言語のすべての構造とは異なり、これは明確なセマンティクスを持たない唯一のメタ識別子です。



次の記事では、Hi Basic Programming Languageの説明を「1つの」ページに示し、次に、上記の要件に従って構文構築ロジックを分析します。



All Articles