まず第一に、これはTJの別れのnode.jsから翻訳された記事です。この記事を読んだ後、私は確かに何らかの影響を受けましたが、著者の見解のいくつかには同意しません。たとえば、node.jsのパッケージレジスタは多くの利点の1つであると思いますが、この点でGOはわずかに不足しています。個人的なレベルのため、翻訳する際に多くのことを理解していません。また、著者のブログとStackoverflowに行き、答えを得るためにいくつかの質問をしました。翻訳にはまだ多くのことがありますが、私は視点を得たいと思っています。
詩Node.jsの初心者として、TJの努力に感謝し、ずっと進んでください。
文章:
Node.jsに別れを告げます
node.jsレルムを離れる
私はこの仕事に取り組むことを楽しんでいないので、少なくとも現時点では、私の公式の別れです。それは私の公式の別れです。さらに重要なことは、メンテナーが必要です。
ノードはいくつかの点で非常に優れていますが、結局、私が最近興味を持っているソフトウェアの種類には適したツールではありません。私はまだNodeをWebサイトとして使用する予定ですが、プロジェクトの維持に興味がある場合は、githubユーザー名、NPMユーザー名、およびプロジェクト名を書き留めるためにメッセージを残してお知らせします。通常、私が尋ねるのは、既存のAPIを完全に変更しないことです。本当にこれをやりたいなら、新しいプロジェクトを開始することをお勧めします。
KOAは私が維持し続けるプロジェクトです。 (COや友達と)
聖杯の物語
私は常にCを愛していましたが、C開発で働く人は誰でもそれが価値があるがエラーになりやすいことを知っています。それはまさに最速の仕事ではないので、日常の仕事で言語の選択を証明することは困難です。シンプルさは、それが常に賞賛されてきた理由でもありますが、多くのテンプレートなしではあまり遠くに行くことはありません。
より多くの人々が分散システムの開発に参加するにつれて、使いやすさと堅牢性に対するノードパフォーマンスの開発動向により、私はよりイライラしました。過去1週間にわたって、GOの比較的大きな分散システムを書き直しました。これは、堅牢でパフォーマンスが向上し、メンテナンスが容易であり、一般的な美しさと同期コードの開発が容易なため、テスト可能なカバレッジが優れています。
Goは聖杯であると言っているのではなく、完璧ではありませんが、今日存在する多くの言語に対する私にとっては素晴らしい答えです。 RustやJuliaのようなこれらの「次世代」の言語は、自分の場所と成熟しているので、もっと素晴らしい解決策があると確信しています。
個人的に、私はその反復速度のためにGoに非常に興奮しています。彼らがバージョン2.0に到達することに熱心であることに非常に興奮しています。それが本当なら、私は幸せです。なぜなら、それがこの言語にとって本当に有益であるならば、私はすでにそこにあるものをすぐに分解すべきだと信じているからです。しかし、私は多くのシステムを実行しているソフトウェアの巨人でもありません。 :d
編集者:提出メーリングリストを誤って解釈している必要がありますが、いつでも破壊的な変更を加えることに熱心ではありません。 @enneff
なぜ行くの?
ノードがあなたのために働いていて、あなたが心配することは何もないなら、それはまだ素晴らしいツールです。しかし、何かがあなたを悩ませている場合は、箱から飛び出して箱の外にあるものを見ることを忘れないでください - 私は最初に製品を構築するためにGoを使用して数時間以内にそれに惹かれました。
繰り返しになりますが、私はそこにいるのではなく、Goは間違いなく最高の言語であり、あなたはそれと一緒に行かなければなりません。しかし、その年齢については、それは非常に成熟して堅牢です。 (ノードとほぼ同じ年齢)。タイプの再構築は楽しくてシンプルで、Goが提供する宿題とデバッグツールは素晴らしいものであり、コミュニティにはドキュメント、フォーマット、ベンチマーク、APIデザインに関する非常に強力な規制があります。
非常にモジュール式ノードに非常に慣れており、Rubyの腐った標準ライブラリを経験したことがありますが、Goについて最初に聞いたとき、標準的なライブラリはひどいと思いました。この言語に分割した後、圧縮、JSON、IO、バッファリングIO、文字列操作など、この段階で標準ライブラリのほとんどが必要であることに気付きました。これらのAPIのほとんどは、明確に定義された強力です。これらの標準ライブラリを使用するだけで、プログラム全体を簡単に記述できます。
サードパーティGOパッケージ
ほとんどのGOライブラリは似ていますが、私がこれまでに使用していたサードパーティのコードのほとんどは高品質であり、JavaScriptがさまざまなスキルレベルで開発者を引き付けるため、これらをノードで見つけるのは困難です。
GOパッケージにはレジストリがないため、通常、同時に5つまたは6つの同じパッケージが表示されます。ある時点で、これはいくつかの混乱を引き起こす可能性がありますが、興味深い副作用があり、各パッケージを慎重に確認することで最良の選択肢を決定する必要があります。ノードを介して、通常、「redis」、「mongodb-native」、「zeromq」などの仕様パッケージがあります。したがって、そこで停止して、それらが最高のものであると推測します。
分散作業を行っている場合、Goの印象的な同時基礎となるデータ型が非常に役立つことがわかります。ノード内のジェネレーターで似たようなものを得ることができますが、私の意見では、ジェネレーターは半分しか完成していません。独立したエラー処理がなければ、たとえ最適であっても、レポートスタックは依然として普通です。これらのソリューションがうまく機能する場合、私はコミュニティが3年間再編成するのを待ちたくありません。
私の意見では、Goのエラー処理は際立っています。ノードは、すべての間違いについて考えなければならないことの点で優れており、それを行う方法を決定します。ただし、ノードは次のとおりです。
コールバックを繰り返すことができます
コールバックをまったく行い、不安定な状態で迷子になる可能性があります(たとえば、コールバックを処理するためにエラーを渡すのを忘れてください。エラーが発生した場合、ノードはフィードバックなしでエラーを飲み込みます)
テイクアウトエラーが発生する可能性があります
エミッターは複数の間違ったイベントを取得する場合があります
それに対処するために間違った出来事を忘れてしまうとすべてが台無しになるでしょう
多くの場合、エラーを処理するために必要なものがわかりません
エラー処理は非常に冗長です
コールバックはひどいです
Goでは、私のコードが終了すると、それは終了し、声明で再解消することはできません。これはノードでは不確かです。プログラムは、ライブラリが予期せずコールバックを複数回呼び出すか、ハンドラーを正しくクリアせずにコードを再度実行するまで完全に実行されると思います。実際の生産コードでこれらの理由を見つけることは非常に困難ですが、なぜこれらを悩ませるのですか?他の言語では、これらの痛みを経験することはできません。
未来のノード
Nodeが良い仕事をすることを願っています。多くの人が彼に多大な投資をしており、それにはその可能性があります。 Joyentとチームはユーザビリティに集中する必要があると思います。アプリケーションが壊れやすく、デバッグ、リファクタリング、開発が困難な場合、パフォーマンスは無意味です。
4〜5年で、この曖昧なエラー「エラー:getaddrinfo eaddrinfo」がまだあります。この事実は、ノードの開発優先順位がどこにあるかを示しています。当然のことながら、システムのコアの構築に焦点を合わせると、これらのことを見逃すのは簡単です。ユーザーは何度も何度もそのようなことについて意見を表明したが、結果は見られないと思います。私たちは通常、私たちが持っているものがすでに完璧であると主張するためのいくつかの回答を得ます。実際には、そうではありません。
ストリームは中断され、コールバックは使いやすく、エラーは不明であり、ツールは使いやすく、コミュニティの規制が存在しますが、GOに比べて不足しているようです。それにもかかわらず、Webページの作成や断片化されたAPIやプロトタイプなど、特定のタスクにノードを使用し続けることがあります。 Nodeがその基本的な問題の一部を修正できる場合、関連性を維持するチャンスがありますが、より高いパフォーマンスとより高い可用性の引数があまりにも進んでいないときに、可用性よりも高いパフォーマンスを発揮する別のソリューションがある場合。
ノードコミュニティがジェネレーターを採用し、非常にコアノードにそれらを実装し、エラーを適切に渡すことを決定した場合、これを参照可能にする機会があります。これにより、ノードの使いやすさと堅牢性が完全に向上します。
良いニュースは、私が少し前にStrongloopでコアコードを提供した偉大で才能のある男と話をしたことです。彼らは、これらの問題を修正するための正しい方法を明示的に採用しており、プラットフォームに対する開発者の応答を聞き、これらの問題を修正する正しい方法を見つけることを計画して、将来のノードを作業しやすくしています。コアパートの同時開発に関する複数の企業間の対立がどのように終了するかはわかりませんが、開発者ドライバーが勝つことを願っています。
これは、それが個人への攻撃であるという意味ではなく、多くの本当に才能のある人々がノードで働いている、またはノードで働いていますが、これはもはや興味のあるものではありません。ノードコミュニティで素晴らしい時間を過ごし、本当に興味深い人々に会いました。
物語の意味は、あなたがあなた自身のサークルによって制限されるべきではないということです!他の場所を見てください、そしてあなたは再びプログラミングを楽しむかもしれません。これ以外には多くの驚くべき解決策がありますが、私が犯した間違いは、私がそれらと遊ぶのに長すぎたということです!