Skip to content

Releases: niuez/Niu

v0.8.3

09 Feb 14:44
c64d184
Compare
Choose a tag to compare

Bug Fixed

  • AssociatedTypeEquationを追加したのでwhere節でもトレイトの解決を行わなければならなかったのを修正 #122
  • 空のBlockが作れなくなっているのを修正 #124

v0.8.2

11 Jan 02:06
568ea78
Compare
Choose a tag to compare

Bug Fix

  • impl内でグローバルの関数が使用できなかったのを修正 #110
  • whereがある関数のトランスパイルでSFINAEがうまく記述できていなかったのを修正 #114
  • where節の型チェックの方法を修正 #119
  • エラーメッセージがファイルを2つまたぐと表示がおかしくなるのを修正 #121

v0.8.1

07 Dec 04:03
Compare
Choose a tag to compare

features

  • エラーの詳細化 #93 に一区切りがついた

v0.8.0

09 Nov 06:12
5cf47d4
Compare
Choose a tag to compare
  • Features
    • trait Clone
      • clone関数で定義
      • Cloneを定義するとコピーコンストラクタと代入演算子が定義される
      • CloneをC++側ではstd::is_copy_assignableで判定する #87
    • move #74
      • Rustのようにデフォルトでstd::moveが入るようになった
      • moveした変数やメンバ変数は使えないように
      • 再代入したときに生き返る
      • Copyトレイトを実装した型はmoveせずそのままコピー
    • foreach statement #74
      • for v in vec
        • vecの中身を順番にmove
        • std::beginstd::make_move_iteratorを利用
      • for v in &vec
        • vecの中身をconst T&で取得
        • std::cbeginを利用
      • for v in &mut vec
        • vecの中身をT&で取得
          -std::beginを利用
    • elseなしif #79
      • ifのブロックがvoidを返す場合, elseなしでも書けるように
    • tuple #82 #86
      • (i64, u64, bool)のように書く
      • unpack let (a, b, (c, d)) = (1, 2, (3, 4));
      • indexing let t = (0, 1, 2); t0 = t.0
      • std/tuple.niuによってtupleの中の型それぞれがClone, Copy, Eq, Ordを持っていれば, そのトレイトが実装される #88

v0.7.0

13 Oct 01:15
d190a7a
Compare
Choose a tag to compare
  • Features
    • ユニットテストの追加
    • 上記に伴い, 従来のトランスパイルのコマンドを変更
      • trans <FILE>: 従来の単一ファイルのトランスパイルをする
    • &をトランスパイルする際の意味を, ポインタから参照に変更 #67
      • EqOrdなどに対応するoperatorの実装に必要になった
      • 競技プログラミングのライブラリという観点からも, 使用者側は参照の方が書きやすい
      • 今のところ参照を2つ以上つけることは禁止してある
    • trait Eq #48
      • fn eq(self: &Self, right: &Self) -> boolを実装
      • !=!(self == right)で定義される
    • trait Ord: Eq #48
      • fn le(self: &Self, right: &Self) -> boolを実装 operator<に対応
      • operator> operator<= operator>=operator<を用いて実装される.

v0.6.1

21 Sep 02:53
Compare
Choose a tag to compare
  • Bug Fix
    • #61
    • #62
      • #include <vector>とNiuのソースコードに書いておくと, トランスパイル時にC++のソースコードの一番上に追加してくれるようにしました.
      • 例外的に, #include <type_traits>はどんなソースコードでも追加されます.

v0.6.0

20 Sep 07:14
74a0d06
Compare
Choose a tag to compare

v0.5.0

02 Sep 04:27
Compare
Choose a tag to compare
  • New Feature
    • 関数の引数にmut指定できるようになったfn func(mut self: Self) #42
  • Bug Fix

v0.4.1

30 Aug 10:53
Compare
Choose a tag to compare

BugFix

v0.4.0

28 Aug 11:50
Compare
Choose a tag to compare
  • Features
    • Add<Arg>のような、Generics付きTraitを実装しました #23
    • これに伴い、二項演算がそれぞれTraitに対応し、C++側ではdecltypeによるSFINAEが行われるようになりました #24
  • Bug Fix
    • SFINAEの変換が壊れていた部分を修正
    • Selfの変換が壊れていたのを修正
trait Add<Arg> {
  type Output;
  fn add(a: Self, b: Arg) -> Self#Add<Arg>::Output;
}

impl Add<u64> for u64 {
  type Output = u64;
  fn add(a: Self, b: u64) -> u64 $${a + b}$$
}

struct Hoge<S> {
  s: S,
} {}

impl<S> Add<Hoge<S>> for Hoge<S> where S: Add<S> {
  type Output = S#Add<S>::Output;
  fn add(self: Self, right: Self) -> S#Add<S>::Output {
    self.s + right.s
  }
}

fn try_add<S, T>(s: S, t: T) -> S#Add<T>::Output where S: Add<T> {
  let ans = s + t;
  ans
}

fn main() -> void {
  let a = Hoge { s: 9u64 };
  let b = Hoge { s: 1u64 };
  let c = a + b;
}