ホームページ バックエンド開発 Golang 話題のプログラミング言語をすべて試してみた

話題のプログラミング言語をすべて試してみた

Dec 16, 2024 am 10:14 AM

この投稿では、GoLang、Zig、Rust を比較してみます。そして、なぜこの比較では Rust が (私にとって) 勝っているのか。

ストーリータイム!

私は GoLang、Zig、Rust で 3 つのプロジェクトを書きました。これらのプロジェクトは、言語の基礎、欠点、言語、フレームワーク、エコシステムに問題があるかどうかについてよく理解するのに十分な規模です。

ヒント: 答えだけを知りたい場合は、自由に TLDR セクションにジャンプしてください。

GoLang

私は数か月前に、最初は GoLang を使って開発者ツールの構築を始めました。

最初のものは基本的なデータベース管理および移行ユーティリティ (dbdaddy) で、GoLang を使って作業するのは本当に楽しかったです。

Advent Of Code や 10 億行のチャレンジ問題よりも本格的なものを GoLang で構築するのは初めての試みでしたが、習熟するまでに 1 週​​間もかからなかったのには驚きました .

ジグ

この間ずっと、私は横でジグをいじっていました(それほど深刻なことはありませんでした)。 Redis がライセンスを「技術的には非オープンソース」ライセンスに変更したという話を聞きました。

そして私はこう思いました: zig で新しいオープンソース Redis を構築するのはどれほど難しいでしょうか?

I Tried Every Hot Programming Language

2 か月後早送り: くそー。

「GbCache」の背後にある基本的なアイデアは、LRU ベースのメモリ内キャッシュでしたが、実際の真実の情報源は、発生した特定のキー/値の変更に関する通知や、明らかにキーに割り当てられた TTL などの機能とともにディスクに保存されることでした。

Zig がいかに明示的であるかは印象的であり、そのおかげでさらにシンプルで扱いやすくなっています。

「明日 HyperScale™ になったら負荷に耐えられるか?」という観点から GbCache を始めました

この観点から、私は GoLang を除外することにしました。メモリ割り当てについて極めて確実に推論できなければ、速度を完全に制御できないからです。

この観点から物事を行うことは、本当に素晴らしい学習体験です。なぜなら、プログラム内の爆発、メモリ不足、またはボトルネックになる可能性のあるすべてのポイント (コード内のホット パス.

Zig の明示的なおかげで、メモリをいつどこに割り当てるのかが正確にわかりました

しかし...Zig は結局のところメモリセーフな言語ではありませんし、私はエベレスト級のスキルの問題を抱えた人間です。

サビに入ります

過去 2 年間で、私は Rust を 3 回試してみて激怒してやめました。 MacBook m69 maxes に数十億 GB の RAM を積んでいる JavaScript のバックグラウンドを持つ私は、Rust になぜそのようなルールがあるのか​​

本当に 理解できませんでした。誇大宣伝に乗り出すのはおそらく悪い角度から見るのではなかったでしょう。 .

私は何度も激怒して辞めましたが、Rust はまだ頭の片隅にあり、その奇妙な構文、イライラするメモリ規則、そして気が遠くなるような寿命がありました。

しかし、Zig を書いているときに何かが思い当たりました...私はすでにこれらすべての記憶規則と寿命を追跡していましたが、精神的なオーバーヘッドとして.

Rust がすでに行っていることを実行しようとしている Zig コードのパターンとボイラープレートに気づき始めました。

さび

SFS (SFW 名 - 「Simple File Storage」) 用の CLI クライアントを構築しているときに、Rust をもう一度試してみることにしました。

今回、Rust 本を読んでいるうちに、すべての「理由」を感じ始めました。

私が Rust で気に入っている最も基本的な点は、メモリの所有権と借用に基づいたメンタル モデルです。

所有および参照されるメモリのこのモデルは想像上のものですが、これは推論するのに便利なメンタル モデルであり、オーバーヘッドが少なくなります

C や Zig のような言語が頭の中で受ける古典的な精神記憶モデルとは対照的です。 頭の中で個々のメモリ割り当てとその有効期間を追跡する必要がありますか?いいえ、ありがとうございます!

TLDR

GoLang

  • 速い (MAU が 5 人必要になるみたいですね、笑)
  • 信頼できる
  • 馬鹿げた単純なことですが、言語はあなたとあなたの目標の間に決して立ちはだかることはありません
  • パッケージの優れたエコシステム

ジグ

  • 超高速
  • バカで単純

さび

  • 超高速
  • 信頼できる
  • パッケージの優れたエコシステム

それらすべて

  • 素晴らしいエラー処理

あなたが日常のバックエンド エンジニアで、スプリント パフォーマンスの数値を計算するのが好きなら、おそらく GoLang が最良の選択です。

「でも私の会社は GoLa を使用していません—」
「会社を辞めて、会社を辞めて、ツールに適した仕事を使いましょう。会社を辞めてください。」

私にとって、GoLang はお見合い結婚のようなもので、決して心の中で焦りを感じることはありませんが、決して失望することはありません。乗るか死ぬかの相棒であり、一生を賭けることができます。それ。

しかし、もしあなたがその焦りを探しているなら、読み続けてください!

ラストプラン

でも、私はそのラッシュが欲しいのです...彼らの ey 構文を一目見ただけで心臓が爆発するのを感じたいです...彼らと一緒にいるとき、天国にいるような気分になりたいです私がいないときは地獄です...

I Tried Every Hot Programming Language

Rust におけるマルチスレッドの安全性の例を簡単に見てみましょう。

use std::thread;

fn main() {
    let mut counter = Box::new(0); // 32-bit integer allocated on the heap
    let mut handles = vec![];

    for _ in 0..10 {
        let handle = thread::spawn(|| {
            *counter += 1; // trying to edit the value
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap(); // WAITING FOR ALL THE THREADS TO COMPLETE
    }

    println!("Result: {}", *counter);
}
ログイン後にコピー
ログイン後にコピー

ヒープに割り当てられた値があり、それを個別に変更しようとしている 10 個のスレッドがあります。

すべてのスレッドが同時にカウンターを変更しようとするため、このコードはカウンター変数に安全にアクセスしていません。

他の言語でも、同様のコードは問題なくコンパイルして実行できます。

以前にマルチスレッド環境で作業したことがある場合は、カウンタ変数を更新する際の競合状態を防ぐために「ミューテックス」を使用することを最初に考えるかもしれません。

しかし、大規模なコードベースでは人的ミスにより、このような小さなことを見逃しがちです。

Rust ではこのプログラムをコンパイルすることさえできません。

所有権と借用のルールにより、コンパイラは、for ループの最初の反復の最初のスレッドでカウンターを可変的に借用していることを検出します... ここまでは問題ありません... 2 番目の反復同時にカウンターを可変的に借用したいですか? 危険です! コンパイル時エラーを発生させます!!.

変更/変更を目的とした所有者からの値の参照または「借用」は、「可変借用」と呼ばれます

use std::thread;

fn main() {
    let mut counter = Box::new(0); // 32-bit integer allocated on the heap
    let mut handles = vec![];

    for _ in 0..10 {
        let handle = thread::spawn(|| {
            *counter += 1; // trying to edit the value
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap(); // WAITING FOR ALL THE THREADS TO COMPLETE
    }

    println!("Result: {}", *counter);
}
ログイン後にコピー
ログイン後にコピー

このような状況では、他の言語ではまったくエラーが発生しません。正確さを検査するのはあなたの責任ですが、Rust はそれを防ぎます。

このような構文は言語全体に広がっており、(頻繁に)足を撃たれるのを防ぐのに役立ちます。

結論

それは状況によります!

私は本当に答えとなる言語があればいいのにと思っています。たとえ GoLang がそれにかなり近づいたとしても、それはあなたのユースケース、そして最も重要なことにあなたのチームによって決まります。

私にとって、Rust は楽しく作業できます (今のところは誰にもわかりません...ふふふ)

TigerBeetle の人々は Zig に挑戦し、満足しています。

Primeagen は Zig に満足しています。

ジャレッド・サムナーの場合、ジグは問題ありません。彼はブンをジグで書きました。

ミッチェル・ハシモト (HashiCorp の背後にいる人) は、超高速の端末である Zig でゴーストを書いています—

.
.
.

待って...

以上が話題のプログラミング言語をすべて試してみたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Golangの目的:効率的でスケーラブルなシステムの構築 Golangの目的:効率的でスケーラブルなシステムの構築 Apr 09, 2025 pm 05:17 PM

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

パフォーマンスレース:ゴラン対c パフォーマンスレース:ゴラン対c Apr 16, 2025 am 12:07 AM

GolangとCにはそれぞれパフォーマンス競争において独自の利点があります。1)Golangは、高い並行性と迅速な発展に適しており、2)Cはより高いパフォーマンスと微細な制御を提供します。選択は、プロジェクトの要件とチームテクノロジースタックに基づいている必要があります。

CとGolang:パフォーマンスが重要な場合 CとGolang:パフォーマンスが重要な場合 Apr 13, 2025 am 12:11 AM

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

See all articles