3 ポイント 投稿者 GN⁺ 2024-11-27 | 2件のコメント | WhatsAppで共有
  • 著者はカモノハシ

    • 批判を無視するために著者を無能だと決めつけるのは怠惰なやり方である。
    • ジュニア開発者は新しい視点で問題を見ることができ、これは採用の重要な理由である。
    • 著者はジュニア開発者ではなく、多様な経験を通じて言語設計への理解を持っている。
  • 母親がタバコを吸っているから大丈夫

    • 他社が使っている技術を無条件に追随するのは非効率である。
    • 技術ブログには会社のイメージをよく見せようとする目的がある。
    • Tailscaleのブログは率直だが、Goの問題を解決するには多くの努力が必要である。
  • 良い点

    • Goは非同期ランタイムとガベージコレクタが優れている。
    • パッケージ管理、リファクタリング、クロスコンパイルなどのツールが使いやすい。
    • しかしGoの欠点は無視できず、言語の設計が偶然の産物である点が問題である。
  • Goは島である

    • Goは他の言語との相互運用性が乏しい。
    • Goのツールチェーンは独特で、既存のアセンブリ言語やデバッガを使えない。
    • ネットワーク境界を通じてGoと統合するのが最も簡単な方法である。
  • すべてか無か(だから何もしない)

    • Goでは初期化されていない構造体フィールドが残りうる。
    • ゼロ値に意味があるというのは素朴な考えであり、多くの場合は問題になる。
    • Goの文化は問題を解決するよりも、注意しろという姿勢である。
  • 「Rustは完璧で、お前らはみんなバカだ」

    • Rustは段階的に導入でき、他の言語ともよく統合される。
    • Rustの成功は部分的には安全な言語への移行が可能だという点にある。
    • Rustにも問題点は存在するが、それらは段階的に解決されつつある。
  • Goをプロトタイプ/スターター言語として使う

    • Goは学びやすい言語だと思われているが、実際には多くの経験が必要である。
    • コードが間違っていることを明確に知らせる機能が不足している。
    • Goの欠点は時間とともに表れ、簡単には移行できない言語である。
  • 私たちがGolangを使い続ける理由についての嘘

    • 他の人たちが使っているのだから、自分たちにも良いはずだという考え
    • 言語設計の欠陥を個別または集団として許容できると考えること
    • 注意深くやれば問題を乗り越えられるという考え
    • 書きやすいのだから、本番用ソフトウェアの開発も簡単だという考え
    • 言語が単純なのだから、すべてが単純だという考え
    • あとでいつでも書き直せるという考え

2件のコメント

 
tsboard 2024-11-28

Go言語を集中的に触っている期間はほんの一瞬のようなものですが、そんなアマチュアが文章を書いてよいのかとも思います……。ただ、Go言語は長所と短所が本当にはっきりしているので、選ぶ人にも避ける人にも明確な理由があるように見えます。個人的にはRustと比較するものではなく、Kotlin(Java)と比較するのが適切な気がします。

Goのgoroutineは本当に素晴らしいですが、魔法ではありません。特にバックエンドでMySQLを1つだけ使う小さなプロジェクトでは、この並行性というものを管理するのが本当に厄介です。JS/TSランタイムではそこまで気にしなくてもよいMySQLのリソース枯渇やプール管理が、思った以上に難しいんです。結局この状況ではDBがボトルネックになるので、Go言語の並行性の利点は一部薄れてしまいます。(JS/TSランタイムの非同期I/Oやイベントループのほうが、むしろ適しているかもしれません)実際、heyのようなツールで -c 100 と流し込んでみれば分かります。

それから優れたGCはありますが、だからといってむやみにオブジェクトをポインタだけ渡して使い、後始末は知らないというわけにはいきません。何事にもトレードオフはありますが、Go言語でも可能なら小さなオブジェクトは単に値コピーで渡して使い、関数が終わればすぐ処理されるようにしたほうがよいです。自分が古い考えに縛られているのかもしれませんが、C/C++のように効率の観点だけでポインタへ気軽に手を伸ばすべきではありませんでした。

関数のreturn時に error をほぼ毎回返し、それを毎回 if err != nil {} でチェックしなければならないのは本当に面倒ですが、これは長所です。try catch よりコストが低いからです。そして finally {} のような役割をしてくれる defer キーワードも素晴らしいです。リソース解放のタイミングを悩む必要がないのはよいですね。標準ライブラリだけで優れたバックエンドサーバー構成がすぐ可能な点も良いです(1.23以上)。何より、ターゲットOSに合わせてビルドすれば、他のランタイムや事前インストールが必要ない点が一番良いです。

Go言語を長く使ってきたわけではないのに、あまりに個人的な意見を長々と書いている気がするので、この辺でやめておきます。笑 私はGo言語も好きですし、ほかの言語も好きです!

 
GN⁺ 2024-11-27
Hacker Newsのコメント
  • Go言語の欠点については多くの指摘があるが、明示的なエラー処理はその一つではない。例外処理は、あまりにも簡単にミスできてしまう「魔法」のような層を追加する。個人プロジェクトではRustを好むが、さまざまなレベルの開発者が参加する大規模プロジェクトでは、Goの哲学が現代世界で最も合理的なエラー処理アプローチだ。

    • Goはシンプルさのおかげで、他の「新しい」言語よりも広く採用されている。最高の言語ではないが、多くの組み込みの意見を持つため、汎用言語としてはしばしば最良の選択になる。
  • RustとGoは大きく異なっており、人々が望む中間地点は今のところ存在しない。

    • Rustの型システムに似た型システムを持つ、比較的シンプルな言語が必要だ。
    • GleamとKotlinは少し近いが、完全にはそうではない。Rustは複雑すぎて、非専攻者や非専門家には難しい。
    • 完璧な言語は存在しないが、GoとRustは驚くべきものをもたらした。両言語から着想を得た、広く利用可能なシンプルなプログラミング言語が生まれてほしい。
  • シンプルな言語が好きだ。技術には常にトレードオフがあるため、バランスの取れた批判が重要だ。

    • Goを選んだ理由についてのブログリンクを共有している。
  • 言語を批判することがなぜそんなに重要なのか不思議だ。批判は建設的なスタイルで書かれていない。

    • どの言語も批判されうる。Goは「より洗練された」言語との違いがあるにもかかわらず、プロジェクトでは見事に機能する。
    • Goチームにフィードバックを送り、言語のゆっくりとした進化を見守りながら、コミュニティで引き続き貢献していく。
  • Goへの批判を読むたびに、それでもGoを使い続けるだろうと思う。

    • 理論上は多くの問題があるが、実際には依然として良いプログラミング言語だ。
    • 明示的なエラー処理が好きだ。他の言語の欠点もあまり気にしない。
    • Goの欠点に敏感な人たちは不満を言い続けるだろう。自分に合った言語を選べばよい。
  • 他の言語を使うたびにGoに戻りたくなる。

    • Goはインストールして、コードをダウンロードして書けばそれで終わりだ。バージョン、ランタイム、設定、ビルドツール、パッケージマネージャーなどを気にする必要がない。
    • Rustも似た体験を提供できる。Python、Typescript、Javaを使うときは、設定まわりの問題のせいでプログラミングが怖くなる。
  • より良いPythonを探していた。Goは明らかな選択だったが、文法が嫌いだ。

    • Rustは特殊文字を多用し、Lispは括弧と逆ポーランド記法のため嫌いだ。
    • PythonコードをNuitkaでコンパイルしてバイナリを提供している。C#のAOTコンパイルに関心がある。
    • NimとCrystalは好きだが、小さなコミュニティが障壁になっている。Nimは小さなコミュニティにもかかわらず素晴らしい言語だ。
  • GoとRustがしばしば比較される理由がわからない。Javaと比較するほうが適切だ。