Skip to content
/ Niu Public

Language for libraries used in competition programming

Notifications You must be signed in to change notification settings

niuez/Niu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Niu Language

Niu言語は, 競技プログラミングにおけるライブラリ制作のための言語です. 開発段階なので注意してください.

Playground

Niu Playground

背景

競技プログラミングではC++を使う人口が多いです. 理由としては,

  • 競技中は型について気を配る時間がなく, 暗黙の型変換で済んでしまう
  • 破壊的代入をしやすい
  • 標準ライブラリが豊富
  • それなりの実行速度がある

また, 競技プログラミングでもC++に代わる言語としてRustが注目され始めています. こちらは競技プログラミングの中でもライブラリ(コンテスト前にあらかじめ用意しておく, よく使うデータ構造・アルゴリズムを実装しておいたもの)の制作に向いています.

  • トレイト制約による可読性のあるコードやコンパイルエラー表示
  • デフォルトでmoveするので, 気づかないデータのコピーが起こらない
  • ライフタイムによる参照切れのチェック
  • enum, matchなどの構文
  • ブロック文が値を返すことができる
  • C++と同等の実行速度

使いたい言語がふたつあると, コンテスト用と観賞用の2種類のライブラリを書かなければいけません.
「ライブラリはRustで書きたいけど, 競技プログラミングのコンテストはC++で出たい」これを解決したいと思い, 開発し始めたのがNiu言語です.

  • ライブラリ制作時は, Niu言語を使ってデータ構造・アルゴリズムを実装
  • コンテスト前にライブラリをC++にトランスパイル
  • コンテスト中はコピペで利用

が目標です.

インストール

git clone https://github.com/niuez/Niu
cd Niu
cargo install --path .
niu help

トランスパイル

niu trans main.niu
# ライブラリのインポート先のディレクトリを指定
NIU_IMPORT_PATH="path/to/library;path/to/another/library/;" niu trans main.niu 

環境変数NIU_IMPORT_PATHでインポートするライブラリのディレクトリを設定できます. このリポジトリのlib/を指定すると良いです.

ユニットテスト

library-checker-problemsを利用してユニットテストができます. ユニットテストを参考にしてください.

言語仕様

About

Language for libraries used in competition programming

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages