HCCC / 人間 Cコンパイラコンテスト
Day: 2023 08.09 (Wed.) 13:00 〜
Duration: 48 hours
HCCCとは

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

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

競技の目的

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

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

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

Schedule

2023年08月09日(水) 13:00 〜

第2回人間Cコンパイラコンテスト(HCCC)はnextcamp N7,N11の「競技自作入門」の一環として開催されます. 生粋のバイナリアンもアセンブリは初めてだという方も皆さんぜひ奮ってご参加ください.
Regulation

A. 競技概要

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

B. 競技システム

  1. 回答が正しいかどうかはジャッジシステムで行う.ジャッジシステムはテストケースを与えたり問題につけられた制約を確認する.
  2. 誤答した場合ジャッジシステムは以下のいずれかの結果を返す.
    • AC: 正答.
    • WA: テストケースの出力が正しくない.
    • WC: 正しいプログラムにコンパイルエラーを出した.
    • AE: アセンブラのエラー.
    • LE: リンカのエラー.
    • RE: 実行時のエラー.
    • TLE: 制限時間オーバー.
    • Pending: ジャッジ待ち.
    • SystemError: 上記以外のエラー.運営によるリジャッジが行われる可能性がある.
  3. 実行の制限時間は2000msとする.

Q&A

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