Go言語の責任者が辞任した後、国産言語が誕生
イベントレビュー
先週、GoogleのGo言語プロジェクト責任者であるスティーブ・フランシア氏が辞任を発表した。理由としては、Go プロジェクトの作業が停滞しており、それが彼を不快に感じさせたということでした。興味深いことに、国内の Gopher (Go 言語愛好家の自称) の中には、Go 言語について新しいアイデアを持っている人もいます。たとえば、中国で最初の Go 言語愛好家の 1 人である Chai Shushan や、世界の Go 貢献者のトップ 50 に長年ランクされている Shi Bin などの Gopher は、Go 言語をベースにした新しいプログラミング言語を立ち上げることを決定しました。 Ao Language™ (Ao)。「ワ」と発音します。
現在、Concave Language™ のコードは Github でオープンソース化されており、簡単な実行可能サンプルが提供されています。ウェアハウスの紹介によると、WaGo Language™ の設計目標は次のとおりです。 1. Go および Rust 構文で覆われた C 言語 2. Wago Language™ のソース コード ファイルの接尾辞は .wa3 であり、凹型言語™ コンパイラは、WaGo 構文と互換性があります。Concave 文法は、AST レベルで WaGo 文法と一致します (2 つは同じ AST を生成し、ロスレスで相互に変換できます)。 4. Concave Language™ は、中国語/英語のバイリンガル キーワード、つまり任意のキーワードをサポートします。中国語版と英語版があり、この 2 つは文法レベルでは同等です
concave language™ 表示、画像ソース @GitHub
Chai Shushan 氏、Shi Bin 氏らによると、Go 言語の「抑制された」スタイルが、プログラミング言語の美しさの最大公約数です。したがって、Concave Language™ プロジェクトが立ち上げられたとき、Go の設計アイデアと具体的な実装が大きく活用されました。
もちろん、初期の青写真として Go 言語を選択することは、限られた投資の中で妥協しなければならないことだとも言いました。彼らは、プロジェクトが発展するにつれて、より独創的なデザインを蓄積し、独立したイノベーションの傾向に貢献することを望んでいます。 Chai Shushan 氏や Shi Bin 氏などは上級 Gopher であるため、彼らが Go 言語を好むことを理解するのは難しくありませんが、彼らをそこまで Go 言語に魅了するほどの Go 言語はどれほど魔法のようなものなのでしょうか?
Go 言語を選ぶ理由
Go 言語を使用した多くの開発者による Go の評価を見ると、Goこの言語はデザイン上以下の4つの特徴を持っています。
1. シンプルで使いやすい
他のものとは異なります。常に新しい機能を追加する主流のプログラミング言語 (C、Java など) を利用する Go の設計者は、言語設計の初期段階で言語機能統合の道を選択することを拒否し、「」を選択しました。引き算。」
彼らは、複雑さについては言語自体の設計と実装、つまり Go コア開発チームに任せ、シンプルさ、使いやすさ、わかりやすさについては、ほとんどの開発者は Go 言語を使用します。したがって、Go 言語は次のようになります:
- 簡潔で従来の構文 (シンボル テーブルを解析する必要なし)、キーワードはわずか 25 個;
- ヘッダー ファイルなし;
- 明示的な依存関係 (パッケージ);
- 循環依存関係なし (パッケージ);
- 定数は単なる数値です;
- 最初の文字の大文字と小文字が可視性を決定します;
- どの型にもメソッドを持つことができます (クラスはありません) );
- #サブタイプ継承なし (サブクラスなし);
- #算術変換なし;
- #コンストラクターやデストラクターはありません;
- 代入は式ではありません;
- は代入と関数呼び出しで定義されています 評価順序 (概念はありません) "シーケンス ポイント");
- ポインタ演算なし;
- メモリは常にゼロ値に初期化されます;
- 型注釈構文はありません (C の const、static など)
- ......
- #2. 好みの組み合わせ
C や Java などの主流のオブジェクト指向言語は、巨大なトップダウン型システム、継承、明示的なインターフェイス実装、その他のメカニズムを通じてプログラムのさまざまな部分を結合しますが、Go 言語では次のようになります。古典的なオブジェクト指向の構文要素、型システム、継承メカニズムはありません。 では、Go 言語はプログラムのさまざまな部分をどのように結合するのでしょうか?それは組み合わせです。 言語設計レベルでは、Go は Go 言語の型なしシステムを含む、直交する文法要素を使用します。型は独立しており、サブタイプの概念はありません。各型には独自のものを持たせることができます。メソッドのセット、型定義とメソッド実装は直交しており、独立しています。 これは Go 言語の革新的な設計です。インターフェイスは単なるメソッドのコレクションであり、実装者との関係は暗黙的であるため、言語のさまざまな部分間の結合を減らすことができます。プログラムを一番下まで。 Go 言語デザイナーに関する 3 つのことロブ・パイク、ロバート・グリーズマー、ケン・トンプソンはかつて、C 標準委員会は近視眼的な考え方をしていると信じていました。ハードウェアは今後 10 年間で大きな変化が起こる可能性が高く、言語とハードウェアを緊密に結び付けるのは非常に賢明ではないからです。開発者が大規模な同時実行プログラムを作成する場合、これはあまり役に立ちません。 Go 言語の同時実行性のネイティブ サポートの設計哲学は、次の 2 つの点に反映されています。 # Go 言語のデザイナーGo 言語の初期設計段階では、工学的問題の解決が Go の設計原則の 1 つとみなされ、その後 Go の文法、ツールチェーン、標準ライブラリの設計が検討されました。研究指向のプログラミング言語、これが大きな違いです。 つまり、言語レベルでのシンプルさにより、Go は C/Java などに劣らない表現力を得ることができ、同時に可読性と柔軟性も向上します。高い開発効率など、ソフトウェアエンジニアリングの分野でより重要な要素。 現在でも、優れたパフォーマンスで Go 、主流のプログラミング言語の 1 つになりました (75%#CNCF プロジェクト (Kubernetes## を含む) 以上) # と Istio は両方とも Go で記述されています。 ## も主要なクラウド アプリケーション言語の 1 つです)、Go 言語も中国では非常に人気がありますが、## から生まれた言語であることを依然として心配せずにはいられません。 #Go の concave language™ には明るい未来があるでしょうか? #未来を予測することは常に困難でしたが、幸いなことに、Concave Language™-Go 言語の前には先駆者が存在します。 Go の開発に基づいて、Concave Language™ の将来について大まかに推測するのもよいでしょう。 Go は、Qiniu Cloud CEO Xu Shiwei によって発明されたプログラミング言語です。2020 年 7 月に正式にリリースされ、2021 年 10 月にバージョン 1.0 がリリースされました。現在、最新バージョンは 6 月 13 日にリリースされています。今年、バージョン 1.1 をリリースしました。つまり、正式リリースから現在までに 2 年近くが経過していますが、Go はまだ初期段階にあり、大規模なアプリケーションにはほど遠い状況にあり、Concave Language™ が市場に投入されるまでには長い時間がかかることが予想されます。大多数の開発者の目から見ると、 さらに、ECUG Con 2022 カンファレンスでの Xu Shiwei の見解によれば、誰もがプログラミング言語のパフォーマンスにより注意を払っていますが、パフォーマンスの観点だけで見ると、Xu Shiwei は Python が優れていると信じています。はスクリプト言語の 1 つですが、Python は二流としか考えられず、実際には高速ではありません。 Go が選んだターゲットは国民全体であり、許世偉氏は Go を「子供でも習得できる言語」と呼んでいます。ユーザーベースを築きます。 Go のこれらの特性により、一部の開発者は Go の将来について楽観的になります。 Go に対する前向きな期待は、Go のさらなる発展に役立ちます。 この原則は Concave Language™ にも当てはまります: Concave Language™ の開発の焦点はパフォーマンスではなく、どのグループをターゲット ユーザーとして選択するかにあるかもしれません。シード ユーザーを取得する方法。 Ao Language™ のプロジェクトチームが今後このようなニュースを発表してくれるのであれば、Ao Language™ の今後がまだまだ楽しみです。
型間の型埋め込みを通じて、既に実装されている関数が新しい型に埋め込まれ、新しい型の機能要件を迅速に満たします。新しい型のインスタンスでメソッドを呼び出す場合、メソッドの一致は型ではなくメソッド名に依存します。
さらに、インターフェイスの動作の集約は、インターフェイスの定義にインターフェイスの型を埋め込んで大規模なインターフェイスを形成することによって実現されます。この方法は、特に、標準ライブラリであり、Go言語のイディオムとなっています。
3. 同時実行性と軽量
そのため、彼らはマルチコア指向のネイティブ組み込み同時実行サポートを新しい言語の設計原則の 1 つとみなしています。
# (1) Go 言語は軽量のコルーチン同時実行モデルを採用しており、マルチコア ハードウェアに直面する場合に Go アプリケーションのスケーラビリティを高めます。 (2) Go 言語は、同時実行をサポートする構文要素とメカニズムを開発者に提供します。
#4. エンジニアリング志向
#これにより、Go 言語の仕様はシンプルかつ柔軟になり、他の言語の基礎を持つプログラマーでもすぐに使い始めることができます。さらに重要なことは、Go には完全なツール チェーンが付属しており、これによりチームのコラボレーションの一貫性が大幅に向上します。たとえば、Gofmt は Go コードを自動的にフォーマットするため、さまざまな人々が作成したコードのフォーマット スタイルが一貫していないという問題が大幅に解消されます。アーカイブの編集時に Gofmt を自動的に実行するようにエディターを構成すると、コードを記述するときに Gofmt をどこにでも配置でき、アーカイブ時に自動的に正しくフォーマットされたコードになります。さらに、Gofix や Govet などの非常に便利なツールもあります。
凹型言語の未来™
以上がGo言語の責任者が辞任した後、国産言語が誕生の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go では、gorilla/websocket パッケージを使用して WebSocket メッセージを送信できます。具体的な手順: WebSocket 接続を確立します。テキスト メッセージを送信します。 WriteMessage(websocket.TextMessage,[]byte("message")) を呼び出します。バイナリ メッセージを送信します。WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) を呼び出します。

Go と Go 言語は、異なる特性を持つ別個の存在です。 Go (Golang とも呼ばれます) は、同時実行性、高速なコンパイル速度、メモリ管理、およびクロスプラットフォームの利点で知られています。 Go 言語の欠点としては、他の言語に比べてエコシステムが充実していないこと、構文が厳格であること、動的型付けが欠如していることが挙げられます。

Go では、正規表現を使用してタイムスタンプを照合できます。ISO8601 タイムスタンプの照合に使用されるような正規表現文字列をコンパイルします。 ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ 。 regexp.MatchString 関数を使用して、文字列が正規表現と一致するかどうかを確認します。

メモリ リークは、ファイル、ネットワーク接続、データベース接続などの使用されなくなったリソースを閉じることによって、Go プログラムのメモリを継続的に増加させる可能性があります。弱参照を使用してメモリ リークを防ぎ、強参照されなくなったオブジェクトをガベージ コレクションの対象にします。 go coroutine を使用すると、メモリ リークを避けるために、終了時にコルーチンのスタック メモリが自動的に解放されます。

Go の関数にマップを渡すと、デフォルトでコピーが作成され、コピーへの変更は元のマップには影響しません。元のマップを変更する必要がある場合は、ポインタを介してそれを渡すことができます。空のマップは技術的には nil ポインターであり、空ではないマップを期待する関数に空のマップを渡すとエラーが発生するため、空のマップは慎重に扱う必要があります。

Golang では、エラー ラッパーを使用して、元のエラーにコンテキスト情報を追加することで新しいエラーを作成できます。これを使用すると、さまざまなライブラリまたはコンポーネントによってスローされるエラーの種類を統一し、デバッグとエラー処理を簡素化できます。手順は次のとおりです。errors.Wrap 関数を使用して、元のエラーを新しいエラーにラップします。新しいエラーには、元のエラーのコンテキスト情報が含まれています。 fmt.Printf を使用してラップされたエラーを出力し、より多くのコンテキストとアクション性を提供します。異なる種類のエラーを処理する場合は、errors.Wrap 関数を使用してエラーの種類を統一します。

Go 言語で優先度のゴルーチンを作成するには、カスタム ゴルーチン作成関数の登録 (ステップ 1) と優先度の値の指定 (ステップ 2) の 2 つの手順があります。このようにして、異なる優先度を持つゴルーチンを作成し、リソース割り当てを最適化し、実行効率を向上させることができます。

並行関数の単体テストは、同時環境での正しい動作を確認するのに役立つため、非常に重要です。同時実行機能をテストするときは、相互排他、同期、分離などの基本原則を考慮する必要があります。並行機能は、シミュレーション、競合状態のテスト、および結果の検証によって単体テストできます。
