HCCC Logo
HCCC / 人間 Cコンパイラコンテスト
Day: 2023 9.30 (Sat.) 15:20 〜
Duration: 70 minutes
HCCCとは

人間Cコンパイラコンテスト(HCCC)とは文字通り競技者自身がCコンパイラとなり C言語からアセンブリを生成し,その時間と正確さを競う競技です.

与えられるソースコードの中にはコンパイルエラーを出す必要の ある仕様上間違ったものも含まれています.このような場合にはコンパイルエラーと解答する必要があります.

競技の目的

この競技の目的は競技を通じてアセンブリやC言語の仕様,ABIと仲良くなることです.

人力でCコンパイラと同じことをするというアプローチから普段使っているコンパイラの中身を解明し,アセンブリを書いて読んでデバッグすることで低レイヤの力をつけることを目標とします.

求められる 技能・知識
  • C言語(C99)の仕様に関する深い知識
  • アセンブリを書く技術
  • ABI(AMD64)の知識
  • x86_64アーキテクチャの知識
  • コンパイラまわりのあれこれ
  • 気合い(気合い)

Schedule

2023年9月30日(土) 15:20 〜

第3回 人間CコンパイラコンテストはSECCONCONの1枠として開催されます. SECCONCON(SECCON Contests)は SECCON Contest of Contest に応募された競技やコンテストの企画案・設計案を,実際に実施するイベントです.
SECCONCON 2023 (外部サイト)

参加条件

低レイヤにちょっと興味があるという方からCコンパイラ自作勢までレベル問わず広く募集します.

当日はSECCONCONイベント内のZoomで進行を行うので,参加される方は応募フォームの入力をお願いします.

競技と並行して入門編をライブで行う予定ですので,自分のレベル感に合わせて解説を聞いたり競技に戻ったりして頂いて構いません. 皆さんの参加をお待ちしてます.

Regulation

第3回大会では問題の掲載/提出を行う競技システムと手元でデバッグするための検証環境を用意して以下のような規則で実施する.

A. 競技概要

  1. 本コンテストは与えられたC言語のソースコードを決められた仕様に沿って解釈し対象となるアーキテクチャのアセンブリを出力する競技である.
  2. 競技者は,与えられたソースコードが仕様上正しければ(コンパイル可能なら)アセンブリに変換し,ソースコードが仕様上正しくなければ(コンパイルエラーを出すべきなら), 変換を行わずコンパイル不可であることと最初の行数を示す.
  3. 第3回大会では以下の仕様を基準に競技を行う.
    1. C言語の仕様はC99に則る .
    2. ABIの仕様はSystem V Application Binary Interfaceの仕様に従う.
    3. 対象アーキテクチャはx86_64とRISC-Vとする.
    4. 記法はAT&Tとintel記法の双方を許可する.
    5. アセンブラにはGNU assemblerを使用する
  4. 第3回大会では評価基準を以下のように定める.
    1. 各問題に点数を与え,その得点で順位を決定する.
    2. 得点が同じ場合は最後に正答した回答を提出した順番で順位づけを行う.
    3. 誤答した場合はその問題でACしたことにより得た得点から誤答の数に応じて減点する(誤答1回に対して1点減点).減点はACした問題にのみ適用される(マイナスの得点にはならない).
    4. 誤答のうちコンパイルできるはずのものにコンパイルエラーを出した場合(WCとなった場合),以後は提出が不可能となる.

B. 競技システム

  1. 回答が正しいかどうかはジャッジシステムで行う.ジャッジシステムはテストケースを与えて判定を行ったり問題につけられた制約を確認したりする.
  2. ジャッジシステムは以下のいずれかの結果を返す.
    • AC(Accepted): 正答.
    • WA(Wrong Answer): テストケースの出力が正しくない.
    • WC(Wrong Compile error): 本来正しいプログラムにコンパイルエラーを出した.
    • AE(Assembler Error): アセンブラのエラー.
    • LE(Linker Error): リンカのエラー.
    • RE(Runtime Error): 実行時のエラー.
    • TLE(Time Limit Exceeded): 実行制限時間オーバー.
    • Pending: ジャッジ待ち.
    • SystemError: 上記以外のエラー.運営によるリジャッジが行われる可能性がある.
  3. ジャッジシステムはAE, LE, REなどの場合に各エラーを競技者に表示する.
  4. 実行の制限時間は2000msとする.
  5. ジャッジは以下の環境で行われる.
  6. $ uname -a 
    Linux 31d57f0f4274 6.5.4-arch2-1 #1 SMP PREEMPT_DYNAMIC Thu, 21 Sep 2023 11:06:39 +0000 x86_64 GNU/Linux
    $ lld --version
    Debian GLIBC 2.31-13+deb11u6
    $ gcc --version
    gcc (GCC) 12.2.0
    $ as --version
    GNU assembler (GNU Binutils for Debian) 2.35.2
    $ ld --version
    GNU ld (GNU Binutils for Debian) 2.35.2

Q&A

C99, X86_64, RISC-Vを採用しています.ABIの仕様はAMD64の仕様に従います.
大歓迎です.裏番組として入門編を流す予定ですので自分のレベル感に合わせて解説を聞いたり競技に戻ったりして頂いて構いません. 低レイヤーに踏み出す第一歩としてご活用ください.
使えます.お好きな方で記述してください.
こちらのリンクからご確認ください.
今回は任意のコンパイラの使用を禁止しています. ですが,将来的に自作コンパイラを使った別の方向性のコンテストも考えています.
C99規格書, System V Application Binaryを除き禁止しています.
勘弁してください
Copyright © 2022 HCCC All Rights Reserved.

2023/09/27
22:30:24