全部产品
Search
文档中心

Alibaba Cloud Linux:Instal dan gunakan Alibaba Cloud Compiler

更新时间:Jun 28, 2025

Alibaba Cloud Compiler adalah kompiler C++ yang dikembangkan oleh Alibaba Cloud berdasarkan Clang/LLVM 13, versi komunitas sumber terbuka dari Clang/LLVM. Kompiler ini mewarisi semua opsi dan parameter dari Clang/LLVM 13, dioptimalkan secara mendalam untuk infrastruktur Alibaba Cloud, dan menyediakan fitur tambahan untuk pengalaman pengguna yang lebih baik. Topik ini menjelaskan cara menginstal dan menggunakan Alibaba Cloud Compiler pada Alibaba Cloud Linux 3 untuk membangun aplikasi C++ berperforma tinggi dengan cepat.

Informasi latar belakang

  • Dibandingkan dengan GNU Compiler Collection (GCC) dan versi lain dari Clang/LLVM, Alibaba Cloud Compiler memberikan peningkatan signifikan dalam kecepatan kompilasi dan pembuatan.

    • Alibaba Cloud Compiler menggunakan teknik seperti optimasi berbasis profil (PGO) untuk kompilasi yang lebih cepat dan menulis kode C++ skala besar lebih cepat daripada GCC.

    • Clang/LLVM linker (LLD) lebih unggul dibandingkan GNU linker yang digunakan oleh GCC, terutama dalam memproses file biner besar.

    • Alibaba Cloud Compiler mendukung C++20 Modules dan memungkinkan pustaka standar C++ dimodularisasi menjadi std-module. Anda dapat menggunakan std-module untuk mentransformasi kode bisnis dengan biaya rendah dan mempercepat kompilasi.

  • Alibaba Cloud Compiler memanfaatkan teknologi seperti Alibaba Cloud Compiler (LLVM) ThinLTO dan AutoFDO untuk meningkatkan performa program. Kompiler ini dapat berjalan di berbagai arsitektur, seperti x86 dan Arm64, serta dioptimalkan untuk prosesor YiTian 710 untuk performa lebih baik.

  • Alibaba Cloud Compiler mendukung Coroutines dan Modules serta menyediakan pustaka standar yang dimodularisasi. Alibaba Cloud juga menyediakan yaLanTingLibs, yang mencakup komponen sering digunakan oleh pengembang C++, seperti pustaka coroutine, pustaka serialisasi, Remote Procedure Call (RPC) library, dan fitur HTTP.

    Catatan

    yaLanTingLibs adalah kumpulan pustaka utilitas C++ berperforma tinggi dan mudah digunakan yang membantu pengembang membangun aplikasi C++ modern dan berperforma tinggi.

Prasyarat

Sebuah instance Elastic Compute Service (ECS) yang menjalankan Alibaba Cloud Linux 3 telah dibuat. Untuk informasi lebih lanjut, lihat Buat instance.

Catatan

Alibaba Cloud Compiler hanya mendukung Alibaba Cloud Linux 3.

Instal dan gunakan Alibaba Cloud Compiler

  1. Instal Alibaba Cloud Compiler.

    sudo yum install -y alibaba-cloud-compiler
  2. Instal libstdc++-devel.

    libstdc++-devel menyediakan file header untuk GNU Standard C++ Library.

    sudo yum -y install libstdc++-devel
  3. Impor variabel lingkungan.

    export PATH=/opt/alibaba-cloud-compiler/bin:$PATH
  4. Gunakan Alibaba Cloud Compiler untuk kompilasi.

    Kompilasi sederhana

    1. Buat file hello.cpp.

      sudo vim hello.cpp
    2. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

      #include <iostream>
      int main() {
        std::cout << "hello C++" << std::endl;
        return 0;
      }
    3. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

    4. Kompilasi kode C++ yang dimodularisasi.

      clang++ -O2 hello.cpp -o hello.cpp.out
    5. Jalankan program.

      ./hello.cpp.out

      Keluaran perintah berikut menunjukkan bahwa program telah dijalankan.image

    Gunakan C++20 Coroutines dan Modules

    Alibaba Cloud Compiler mendukung C++20 Coroutines dan Modules, yang membantu meningkatkan efisiensi kompilasi dan performa. Untuk melihat contoh coroutines, lihat Gunakan pustaka RPC dan Gunakan pustaka HTTP.

    Catatan
    • Pada pemanggilan fungsi tradisional, sebuah fungsi setelah dipanggil akan dieksekusi hingga selesai. Coroutines adalah konsep pemrograman yang memungkinkan eksekusi fungsi ditangguhkan dan dilanjutkan. Mekanisme kontrol alur fleksibel ini menyederhanakan implementasi pemrograman asinkron dan pola generator.

    • Dalam paradigma pemrograman C++ tradisional, kode diorganisasikan ke dalam file header (.h/.hpp) dan file sumber (.cpp), dengan file header berisi deklarasi. Anda membuat deklarasi dalam file header dan menggunakan direktif preprocessor #include untuk menyisipkan salinan file header ke dalam setiap file sumber yang membutuhkan deklarasi tersebut. Oleh karena itu, kompiler mungkin berulang kali mengurai file header yang sama, yang memperlambat kompilasi. Modules diperkenalkan sebagai metode untuk meningkatkan organisasi kode dan efisiensi kompilasi.

    Saat menggunakan Clang untuk mengompilasi program C++, Anda dapat mengonfigurasi parameter dalam tabel berikut.

    Parameter

    Deskripsi

    -std=

    Menentukan standar bahasa C++ yang digunakan untuk kompilasi. Jika Anda menentukan -std=c++20, C++ Coroutines dan Modules akan berlaku.

    --precompile

    Mengompilasi unit modul menjadi file antarmuka modul biner (BMI).

    -fprebuilt-module-path

    Menentukan jalur untuk mencari file BMI.

    -fstd-modules

    Menentukan untuk mengompilasi file untuk modul std.

    -fmodules-export-all

    Menandai semua deklarasi dalam modul saat ini sebagai export.

    -fmodules-export-macros

    Mengaktifkan modul untuk mengekspor makro.

    -try-load-bmi-when-preprocessing

    Mencari file BMI selama preprocessing.

    -fstd-module-path

    Menentukan jalur untuk mencari modul std.

    -fcoro-aligned-allocation

    Memilih alokasi yang selaras untuk C++ Coroutines.

    Contoh kompilasi:

    1. Buat file Hello.cppm.

      sudo vim Hello.cppm
    2. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

      module;
      #include <iostream>
      export module Hello;
      export void hello() {
        std::cout << "Hello World!\n";
      }
    3. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

    4. Buat file use.cpp.

      sudo vim use.cpp
    5. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

      import Hello;
      int main() {
        hello();
        return 0;
      }
    6. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

    7. Kompilasi kode C++ yang dimodularisasi.

      # Pra-kompilasi antarmuka modul untuk membuat file Hello.pcm.
      clang++ -std=c++20 Hello.cppm --precompile -o Hello.pcm
      # Kompilasi program utama dan tautkan modul untuk membuat file executable Hello.out.
      clang++ -std=c++20 use.cpp -fprebuilt-module-path=. Hello.pcm -o Hello.out
    8. Jalankan program.

      ./Hello.out

      Keluaran perintah berikut menunjukkan bahwa program telah dijalankan.

      image

    (Opsional) Gunakan yaLanTingLibs

    Anda dapat menggunakan yaLanTingLibs, yang menyediakan pustaka coroutine, pustaka serialisasi, pustaka RPC, dan fitur HTTP berdasarkan C++20 Coroutines dan fitur metaprogramming template C++. Untuk informasi lebih lanjut, kunjungi yalantinglibs dan async_simple.

    • Pustaka serialisasi adalah perangkat lunak pustaka yang digunakan untuk serialisasi dan deserialisasi data. Serialisasi adalah proses mengubah struktur data atau status objek menjadi format yang dapat disimpan dalam file atau buffer atau ditransmisikan melalui jaringan. Deserialisasi adalah proses mengembalikan struktur data atau status objek yang disimpan atau ditransmisikan ke kondisi semula.

    • RPC adalah pustaka yang digunakan untuk komunikasi antar-proses (IPC). RPC memungkinkan program C++ mengeksekusi fungsi atau metode pada mesin jarak jauh seolah-olah fungsi atau metode tersebut lokal. RPC mengabstraksi detail seperti transmisi jaringan, serialisasi, deserialisasi, dan rute, sehingga pengembang dapat fokus pada logika bisnis aplikasi mereka.

    • HTTP adalah protokol lapisan aplikasi untuk sistem informasi hipermedia terdistribusi, kolaboratif. coro_http adalah pustaka HTTP berperforma tinggi dan mudah digunakan yang diimplementasikan menggunakan C++20 coroutines. Ini mencakup server HTTP dan klien HTTP untuk membantu pengguna dengan cepat mengembangkan aplikasi HTTP.

    1. Instal yaLanTingLibs.

      sudo yum install -y yalantinglibs-devel
    2. Gunakan pustaka serialisasi, pustaka RPC, dan pustaka HTTP dari yaLanTingLibs.

      Gunakan pustaka serialisasi

      1. Buat file test.cpp.

        sudo vim test.cpp
      2. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

        #include <iostream>
        #include "ylt/struct_pack.hpp"
        struct person {
          int age;
          std::string name;
        };
        int main() {
          person tom{.age=20,.name="tom"};
          auto buffer = struct_pack::serialize(tom);
          auto tom2 = struct_pack::deserialize<person>(buffer);
          std::cout<<"age: "<<tom2.value().age<<", name: "<<tom2.value().name<<std::endl;
          return 0;
        }
      3. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

      4. Kompilasi program.

        clang++ test.cpp -std=c++20 -o test
      5. Jalankan program.

        ./test

        Keluaran perintah berikut menunjukkan bahwa program telah dijalankan.

        image

      Gunakan pustaka RPC

      1. Buat file server.cpp di server.

        sudo vim server.cpp
      2. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

        #include "ylt/coro_rpc/coro_rpc_server.hpp"
        std::string ping(std::string ping) {
         return "Receive: " + ping + ". Return pong.";
        }
        int main() {
         coro_rpc::coro_rpc_server server{1 , 8801};
         server.register_handler<ping>();
         return server.start();
        }
      3. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

      4. Buat file client.cpp.

        sudo vim client.cpp
      5. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

        #include <iostream>
        #include "ylt/coro_rpc/coro_rpc_client.hpp" 
        std::string ping(std::string);
        async_simple::coro::Lazy<void> example(){
            coro_rpc::coro_rpc_client client;
            auto ec = co_await client.connect("localhost","8801");
            assert(!ec);
            auto ret = co_await client.call<ping>("ping");
            std::cout << ret.value() << std::endl;
            co_return;
        };
        int main(){
            async_simple::coro::syncAwait(example());
            return 0;
        }
      6. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

      7. Kompilasi program sisi server.

        clang++ server.cpp  -I /usr/include/ylt/thirdparty -std=c++20  -o server -lpthread
      8. Kompilasi program sisi klien.

        Catatan

        Sebelum mengompilasi program sisi klien, pastikan bahwa Alibaba Cloud Compiler telah diinstal di klien dan variabel lingkungan telah diimpor ke klien. Untuk informasi lebih lanjut, lihat Kompilasi Alibaba Cloud Compiler.

        clang++ client.cpp  -I /usr/include/ylt/thirdparty -std=c++20  -o client -lpthread
      9. Jalankan perintah berikut di server dan klien untuk memulai server dan klien:

        ./server & ./client

        Keluaran perintah berikut dikembalikan. Entri log menggambarkan seluruh proses, termasuk memulai server RPC, server RPC mendengarkan permintaan RPC, klien RPC mengirim permintaan RPC, server RPC memproses permintaan RPC, dan klien RPC menutup koneksi.

        image

      Gunakan pustaka HTTP

      1. Buat file http.cpp di server.

        sudo vim http.cpp
      2. Tekan tombol i untuk masuk ke mode Insert, lalu salin dan tempel konten berikut ke dalam file:

        #include <iostream>
          
        #include "ylt/coro_http/coro_http_client.hpp"
        #include "ylt/coro_http/coro_http_server.hpp"
        
        using namespace std::chrono_literals;
        using namespace coro_http;
        
        async_simple::coro::Lazy<void> basic_usage() {
          coro_http_server server(1, 9001);
          server.set_http_handler<GET>(
              "/get", [](coro_http_request &req, coro_http_response &resp) {
                resp.set_status_and_content(status_type::ok, "ok");
              });
        
          server.async_start();
          std::this_thread::sleep_for(300ms);
        
          coro_http_client client{};
          auto result = co_await client.async_get("http://127.0.0.1:9001/get");
          assert(result.status == 200);
          assert(result.resp_body == "ok");
          for (auto [key, val] : result.resp_headers) {
            std::cout << key << ": " << val << "\n";
          }
        }
        
        int main() {
          async_simple::coro::syncAwait(basic_usage());
        }
      3. Tekan tombol Esc, masukkan :wq, lalu tekan tombol Enter untuk menyimpan dan menutup file.

      4. Kompilasi program HTTP.

        clang++ http.cpp -I /usr/include/ylt/thirdparty -std=c++20 -o http -lpthread
      5. Jalankan program HTTP.

        ./http

        Keluaran perintah berikut menunjukkan bahwa program telah dijalankan.

        image