比較したベンチマークはこちらです。多くのアプリケーションにとって、プログラミング言語は、単にアプリとデータベースを繋ぐものにすぎません。言語そのもののパフォーマンスは通常あまり重要ではありません。等を長年最適化していますが、だんだん使用している言語の限界に近づいています。ような用途に関して、パフォーマンスがかなり悪いです。それをオブジェクトに変換するのにさらに10ミリ秒費やす、というようなパフォーマンス問題にしばしば出くわしました。コードを見てください。初心者なら、このコードを読んだ時に大して驚くことはないでしょう。ライブラリを示しています。進んだ機能を使うのが好きでした。創造的にコードを書くことができました。デコレータを使って関数をプロパティとして使うこれらの機能は使うのが楽しい反面、多くのプログラマーが同意するように、他人の書いたコードを理解するのがより難しくなります。あなたを基本に忠実にしてくれます。他人のコードがとても読みやすくなり、書いてあることがすぐに理解できます。どのくらい「簡単」かは、もちろんあなたのユースケースに依存します。物事をシンプルに保とうと試みています。新しいコンセプトは導入していません。焦点を置いているのは、信じられないほど速く、作業がしやすいようなシンプルな言語を作ることです。コンセプトを100%正しくしておくために、古いアイデアへのより多くの新たなアプローチがあります。間で通信するための方法です。作るのがとても簡単で、メモリを数キロバイトしか消費しません。軽いので、同時に何百もしくは何千も動かすことが可能です。間の通信が可能になります。ランタイムが並列処理に必要な複雑な処理を代わりに担ってくれます。扱うことを大変簡単にします。最小限のコードしか必要としません。いうキーワードを関数に付け加えるだけです。並列処理はとても簡単です。簡単に扱うことができます。これは、非同期コードの中に複数のスレッドによる同時アクセスで起こるデータの競合があった場合に、簡単に発見できるものです。始めるのに良い情報源です。書かれた私たちの一番大きなマイクロサービスのコンパイル時間は現在6秒です。ような言語と比較して大きく優れています。するとその時間がなくなりました。自分が書いたコードが何のためだったのか憶えているうちに物事が片付く方がはるかに素晴らしいです。開発者の数は多くありません。データも同様の傾向を示しています。シンプルで習得しやすい言語です。基本的な機能を提供するだけで、他には何もありません。これらのコンセプトを実装した最初の言語ではなく、これらを普及させた最初の言語ということです。使えるようになるでしょう。開発者のチームを構築するのが容易であることに気が付きました。ような競争が激しい地域で採用活動をしているなら、これは重要な利点です。強いエコシステム20人程度までのチームの話です。全ての小さな機能まで再実装しなければならないとしたら、顧客に対して価値を提供することはできません。我々が使うライブラリ(Redis、RabbitMQ、PostgreSQL、テンプレートのパース、タスクスケジューリング、語句解析、RocksDB)をすでに用意していました。ような他の新しい言語と比較して優れています。ほど良くはありませんが、高品質のパッケージの中からあなたの必要なものを見つけることができるでしょう。何かというところから始めましょう。コードを整形のためにコンパイラに入っている素晴らしいコマンドラインユーティリティです。我々のほとんどはタブとスペースについての議論が好きではありません。フォーマットが一貫していることは重要ですが、実際のどのフォーマットを使うのかはそれほど重要ではありません。コードをフォーマットするための公式ツールを用意することで、この議論を回避しています。サポートが素晴らしいです。経由で通信する必要のあるマイクロサービスに対して非常に機能します。自動的に作成されます。作成されたコードは共に速く、非常に小さなネットワーク帯域で、使い易いです。クライアントコードを作成することができます。エンドポイントも必要ありません。ような主要なフレームワークがありません。コミュニティの中でも激論となっています。いくつかのユースケースについては、この考えが正しいことに全面的に賛成です。使った方がはるかに簡単です。フレームワークは存在します。ユースケースではフレームワークを利用しないことを選んでいます。提供しようとしているプロジェクトではフレームワークの欠如は深刻な問題でしょう。関数がエラーを返し、呼び出す側のコードがそのエラーを制御してくれる前提でエラーハンドリングしています(もしくはそれをスタックに返す)。このアプローチは有効ですが、ユーザーに対して具体的なエラー内容を伝えることはできません。加えることによってこの問題を解決します。一つの問題は、エラーハンドリングを忘れてしまうことです。ような静的分析ツールはこれらのミスを手軽に防ぐことができます。これらの方法はうまく機能しますが、それが正しいとは思いません。言語自身の適切なエラーハンドリングのサポートを期待しましょう。パッケージ管理は決して完璧ではありません。デフォルトでは、依存パッケージのバージョンを指定することができないので、再現可能なビルドを作成する方法もありません。良いパッケージ管理のシステムを持っています。パッケージ管理は極めてうまく機能します。使うことで、バージョンを指定し、依存関係を管理することができます。呼ばれるオープンソースツールもあります。再実装するという実験をしました。実装するには以下の処理が必要です。出力で返す関数に変換したい。設定に基づいた部分関数を作成する。減衰係数の尺度で生成したい。得るため、ステップ1から関数を使う。バージョンの開発には約3日かかりました。それにはコードの生成、ユニットテストとドキュメントの作成が含まれます。次に、コードを最適化するのに約2週間かかりました。抽象構文木に変換することでした。事前に計算するようなキャッシュロジックを実装しました。バージョンの開発は、約4日かかりました。パフォーマンスとしてはそれ以上の最適化は必要ありませんでした。ベースのほうが圧倒的に少なくなりました。コードよりも約40倍速くなりました。移行したことで経験したパフォーマンスに関する1つの例です。書かれた最初のプロジェクトでした。コードよりも後に開発されたので、ユースケースは良く理解されていました。語句解析のライブラリは非常に優れていました。比べて実質的に時間がかかりました。開発は若干努力が必要です。パフォーマンスのためにコードを最適化する時間は圧倒的に少ないでしょう。仮想マシン上でビルドされます。多く経験しているので、やってみることになりました。素のパフォーマンスのほうが遥かに上でした。何千もの並行処理のリクエストをこなすでしょう。ユースケース上、実質的に速いです。選ぶもう一つの理由は、エコシステムです。ライブラリは本番運用の準備が整っていませんでした。作業する開発者をトレーニングしたり見つけたりするのが難しいのです。採用することにしました。フレームワークは素晴らしいように見えますし、見る価値はあります。並列処理をサポートするとても効率の良い言語です。ような言語とほぼ同じくらい速いです。比べて開発するのに少し時間がかかりますが、コードを最適化するのにとても多くの時間を節約できるでしょう。2億人以上のエンドーユーザー向けにニュースフィードを提供する小さな開発チームです。は素晴らしい選択肢といえるでしょう。書かれることになるでしょう。ついてもっと知りたければ、下記のブログ記事をチェックしてください。ついてもっと知るために、このチュートリアルが素晴らしい出発点になります。移行したのかPythonGolangバックエンド原著者の許諾を得て翻訳・掲載しています。海外で話題の記事を翻訳して届けるエンジニアのためのメディアです。