ABCDEFGHIJKLMNOPQRSTUVWXYZ
1
1. はじめに
2
AtCoderで使用できるプログラミング言語の更新を行います。
そこで使用したいプログラミング言語のインストール方法、コンパイル、実行コマンドを記入してください。
基本的には記入していただいたものをそのまま実行を行い、言語のインストールを行います。
ただしここに記入していただいたすべての言語のインストールを保証するものではありません。

注意事項:
言語ならびにライブラリのライセンスについて
 有償のライセンスが必要なものは受け付けませんのでご遠慮ください。
 その他、営利目的での利用に際して制限がある場合や、ライセンス上の懸念などがある場合には受け付けられないことがあります。
言語更新作業について
 言語インストール作業は提案シートから機械的に行います。
 インストール作業中に気づいた点は適時フィードバックを行いますが提案シートの方を直接修正することはありません。
 フィードバックの内容を確認し必ず提案シートを修正してください

言語テストコンテスト:
 現在準備中です。ある程度の言語が記入されたタイミングで言語をインストールし公開します。
 今回の言語更新を試せるコンテストを準備しました。
 https://atcoder.jp/contests/language-test-202301
 過去の言語更新時の情報は4.に記入してあります。
3
4
1.1 今後の進め方(2023/07/21更新)
5
ある時点でシートをfreezeして、その情報をもとにライセンスチェック/言語インストールチェック作業を行います。
その後、言語コンテストにて動作確認を行い、フィードバックを募集します。
この「ある日にfreeze→ライセンスチェック→言語コンテストにて動作確認→フィードバックを募集」という流れを2-3サイクルほど繰り返す予定です。
ライセンスチェックや言語インストール作業で却下された言語は次サイクルにてインストール出来るよう、不備の修正をお願いします。

言語やライブラリの追加は締め切りました。

現状: 更新分を反映済み
今後の予定:
 実際に新ジャッジを使ったテストコンテストを行うことを予定しています
6
2. 環境
7
項目内容
8
OSUbuntu 22.10
9
カレントディレクトリ/judge
10
環境変数HOME=/home/runner
LANG=C.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ATCODER=1
11
12
3. 各項目について
13
* 付きの項目は必須項目です。見やすいように背景を赤色に変更しています

前回まで存在した{dirname}、{basename}といったプレースホルダといったものは今回なくなりました
プレースホルダとして存在しているのは実行時におけるメモリ指定だけです
前回からコピーしてくる場合などにご注意ください。
14
15
項目説明例1例2
16
* Language言語の名前を記入してくださいC++Rust
17
* Compiler/Interpreter言語の実装を記入してくださいGCCRust
18
* Version実装のバージョンを記入してください12.21.66.1
19
Library標準ライブラリ以外に追加でインストールを行うライブラリがある場合は1行ごとにライブラリ名を記入してください。
このときバージョンがある場合はバージョンも合わせて記入してください
AC Library@1.4
Boost@1.81.0
proconio@0.4.3
rand@0.8.5
regex@1.7.0
20
* Filename提出されたソースコードを配置するファイルパスを指定してください。
基本的には Main + 拡張子 で統一してください。
ただしファイル名に意味がある場合やプロジェクトファイルを用いる場合は適切にファイルパスを指定してください
Main.cppsrc/main.rs
21
* Install Commandインストールを行うコマンドを記入してください。
基本的にはここに記入されたコマンドをそのままbashに入力して実行を行います。
そのためインストールに複数のコマンドが必要な場合は、ここに複数行で記入してください。

インストール時に一時ファイルが必要になる場合は /tmp を使ってください。
ここに置かれたファイルはインストールの最後ですべて消されるため、必要なファイルはここには置かないようにしてください
sudo apt install gcc=12.2

cd /tmp

# ac library
sudo mkdir /opt/aclibrary
wget https://github.com/atcoder/ac-library/releases/download/v1.4/ac-library.zip
sudo unzip /tmp/ac-library.zip -d /opt/aclibary

# boost
wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz
tar xf boost_1_81_0.tar.gz
cd boost_1_81_0
./bootstrap.sh --with-toolset=gcc --without-libraries=mpi,graph_parallel
./b2 -j3 toolset=gcc variant=release link=static runtime-link=static cxxflags="-std=c++20" stage
sudo ./b2 -j3 toolset=gcc variant=release link=static runtime-link=static cxxflags="-std=c++20" --prefix=/opt/boost/gcc install
pushd /tmp
wget https://static.rust-lang.org/dist/rust-1.66.1-x86_64-unknown-linux-gnu.tar.gz
tar xf rust-1.66.1-x86_64-unknown-linux-gnu.tar.gz
sudo ./rust-1.66.1-x86_64-unknown-linux-gnu/install.sh
popd

cargo init --bin --edition 2021 --vcs none

# ltoを有効
cat >> Cargo.toml <<'CARGO_TOML'
[profile.release]
lto = true
CARGO_TOML

cargo add proconio@0.4.3
cargo add --features std,small_rng,min_const_gen rand@0.8.5
cargo add regex@1.7.0

cargo build --release
22
Compilation Commandコンパイルを行う言語の場合はコンパイルコマンドを記入してください。
ここに記入されたコマンドはそのままbashに渡されるため、シェル特有の構文や複数行での記入が可能です。
またコンパイルを行う必要のないインタプリタ言語の場合でも、構文チェックなどをコンパイル代わりに行わせることが可能です。
その場合はエラー時に下記Object fileが生成されないようにうまく記述してください
g++ -std=gnu++20 -I/opt/aclibrary -I/opt/boost/gcc/include -L/opt/boost/gcc/lib -O2 -o a.out main.cppcargo build --release --quiet --offline
23
Object fileコンパイルが成功したかどうかの判定に行うファイルを /judgeからの相対パス で記入してください。
コンパイルの成否はこのファイルの存在で判定を行います。
コンパイラの出力内容や、コンパイラの終了コードでは判定を行いませんので注意してください

またこの仕様を用いて、インタプリタ言語で構文チェックなどを行うことが可能です。
例えばコンパイルコマンドとして構文チェックを行い、その成否に応じてここで指定するファイルを生成する/しないを行えば、インタプリタ言語でもコンパイルエラーで実行を中断させることが可能です
a.outtarget/release/judge
24
Environment実行時に追加で設定する環境変数がある場合は
環境変数名=内容
というフォーマットで1行ごとに1つずつ記入してください。

ここで指定するものは実行時のみ使用されます。
インストール時、コンパイル時に設定する環境変数がある場合はbashの構文を用いて行ってください

また以下の文字列は実行直前にジャッジシステムによって置換されます:
{memory:b} 問題のメモリ制限の数値(単位: バイト)
{memory:kb} 問題のメモリ制限の数値(単位: KiB)
{memory:mb} 問題のメモリ制限の数値(単位: MiB)
これは主にVM系の言語において、VMにメモリの使用量の上限を指定するために使われることを想定しています。
RUST_BACKTRACE=0
25
* Execution Command実行コマンドを指定してください

ここで指定する実行コマンドはbashなどを経由せず直接起動を行うため、コマンドラインの引数を1行ごとに記入してください。

また以下の文字列は実行直前にジャッジシステムによって置換されます:
{memory:b} 問題のメモリ制限の数値(単位: バイト)
{memory:kb} 問題のメモリ制限の数値(単位: KiB)
{memory:mb} 問題のメモリ制限の数値(単位: MiB)
これは主にVM系の言語において、VMにメモリの使用量の上限を指定するために使われることを想定しています。
例えばJavaにおいては
-Xss{memory:mb}M
という1行が入ると思います。
./a.out./target/release/judge
26
* License Url言語やライブラリのライセンスへの URL をすべて記入してください。このライセンスを元に判断します。
すべて記入されていない場合、その言語の追加が出来ないことがあります。
https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html
https://www.boost.org/users/license.html
https://www.rust-lang.org/ja/policies/licenses
https://github.com/statiolake/proconio-rs
https://github.com/rust-random/ran
d
https://github.com/rust-lang/regex
27
Comment最後の列以降の部分はコメント記入欄です。
必要であれば他人とのやりとりに使用してください。

みんななかよくつかってね!
28
29
4. 前回、前々回の更新時の情報
30
スプレッドシートコンテスト
31
今回https://docs.google.com/spreadsheets/d/1HXyOXt5bKwhKWXruzUvfMFHQtBxfZQ0047W7VVObnXIhttps://atcoder.jp/contests/language-test-202301
32
前回https://docs.google.com/spreadsheets/d/1PmsqufkF3wjKN6g1L0STS80yP4a6u-VdGiEv5uOHe0M/https://atcoder.jp/contests/language-test-202001
33
前々回https://docs.google.com/spreadsheets/d/1X5Yk5PiGx-Otm1JaHpQQzQhEIPj8trofLTkphKX43s0/https://atcoder.jp/contests/language-test-201603
34
35
5. 更新履歴
36
日時(JST)変更内容
37
2023-01-17 20:00公開
38
2023-01-17 21:45環境変数に ATCODER を追加
39
2023-01-18 14:16License Urlにちょっと追記
40
2023-01-19 05:20前回、前々回の更新時の情報を追記
41
2023-01-19 17:15注意事項にプレースホルダが変更になった件を追記
42
2023-01-31 17:19今後の進め方について
43
2023-03-17 20:15現在言語のインストール作業を進めています
その過程で各種シートに変更を加えました
作業状況は「2/3 freeze modified」シートに記入しています

Feedbackに各言語のインストール時に問題になったこと、また修正を行った内容を記載しています
特に修正内容は作業者が推測で行ったものであるため、正しいとは限りませんので必ず確認をお願いします
内容の修正を加えたのは「2/3 freeze modified」のシートだけであり、提案シートには反映しておりません

変更があった場合にChangedに「!」が、また背景色が付いているセルが「2/3 freeze」から変更があった場所です
またこれに合わせて提案シートも「2/3 freeze modified」から変更があった場所に背景色が付くように設定を変えてあります
フィードバックに記載した内容および変更差分をご確認の上、提案シートの修正を次回のfreezeまでにお願いします
44
2023-03-23 00:002/3でのfreezeしたものをインストールしたジャッジを公開
https://atcoder.jp/contests/language-test-202301
注意事項を追加。必ず提案シートの方を修正してください
45
2023-03-24 02:00要確認事項シートを追加
46
2023-03-25 00:30言語、ライブラリのい追加に関する注意を追記
47
2023-04-03 19:00Object fileの説明を修正
記述するパスの内容を/judgeからの相対パスにするように明確に
48
2023-04-05 16:00言語テストコンテストにインストールされている言語を3/28時点でのものに更新
49
2023-04-07 15:45Environmentにメモリ制限用のプレースホルダが使えることを追記
実行用コマンドだけでなく、実行時の環境変数にもメモリ制約に応じた値を設定できるようにしたのを明記しました
50
2023-04-11 19:15今後の進め方を修正
これからは現時点で提案された言語、ライブラリが正常に動作するためのコマンドの修正のみ受け付け、新規言語やライブラリの追加はできません
51
2023-06-16 21:00次回の更新予定日更新
またコンパイラ、ライブラリのバージョンのアップデートについて記載
52
2023-06-23 01:00次回の更新予定日更新
また次々回のfreezeをもって特に問題がない場合はジャッジを確定すること、またAC解を必ず提出しておくことを記載
53
2023-07-06 23:30次回の更新予定日更新
また次回のfreeze後は修正を行わない旨を記載
54
2023-07-21 22:002023-07-17に締め切った更新分をコンテストに反映
今後の予定を記述
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100