メモ
Rust の From, Into 的な特性体が実装されていればエラー伝搬で暗黙に変換してくれる?
どこまで暗黙的型変換を許容するか → 型強制の範囲のみ
ジェネリクスの特定の型のみに実装を与える?
(Vec<String>::join() ではないけども)
→ impl ブロックでの実装で対応
内部 / 外部イテレータ (Rust)
連続セミコロンで警告 ;;
外部からパッケージの機能を絞る機能 → ビルド時間短縮
フォーマット文字列で引数を指定する機能?
閉じ括弧の直前で改行した時に入力位置をブロック内に戻す (paiza 参照)
.. ..= 演算子
浮動小数点型のデフォルトは精度重視で f64 ?
Index トレイト?
言語のイメージ?(Rust のメカ感のような) → ポップ感では
文字列結合
{"01", "02", "03"}.join_prefix("0x", " ") == "0x01 0x02 0x03"
{"01", "02", "03"}.join_suffix("i32", " ") == "01i32 02i32 03i32"
フィールドの自動代入
中括弧での実体化にはには指定必須?
dyn 型
Option に Dart の ?. 的な機能; 作るとしたら演算子でなくメソッドで
一行ブロック? (シュガー) for let i in iter: print(i)
引数名付きの引数値 func(arg: value) : DateTime.add(hours: value) とかで便利そう
private フィールドは同モジュール内であれば他アイテムからもアクセスできる
if let など必要?; match 式は必要そう
+= 演算子の式 (糖衣構文) は void
void 値を変数に代入すると警告 (必要がないため)
コンストラクタいらない
Default 特性体: 初期値を設定する (derive 可)
数値リテラルで指数表記: 1e+10 など
true であれば引数 a 、false であれば引数 b を返す関数
不要なクローンを警告
未使用パッケージを警告? (依存関係)
参照もしくは非参照を持つ列挙型 (Cow のような)
型エイリアスの実装?
「エイリアス」ではなさそう
タプルバリアント / 構造体バリアント?の仕様を詰める
バリアント引数が 0 であれば警告: V() V {}
ref / mut の順番: mut ref self ?
struct RcStruct(Rc<Struct>); のような構文
&T は Ref<T> の糖衣構文?
from() のように特性体を使って多重定義?
既存の変数名を使って代入する時と演算子分ける?
code:plain
let a = 0
let a := a.clone() # 例えば
定義後一度も代入されない変数は無視 (警告)
生ポインタ構文: &{raw}ptr ?
エラー返却: return t, e ?
アクセス範囲: pub pub{pack} pub{mod} のみ; pub{MODNAME} は要検討
code:AccessRange.rs
pub enum AccessRange {
// public
All,
// pub{mod}
Module,
// private
Self,
}
余計なクローンを検知?
構造体と特性体の名前を同じにできる or 特性体のデフォルト実装を用意できるようにする?
T- 接頭辞で区別できるため必要ない
文字列に正規表現で制約を付ける
例: num = RegexStr::new("\d+", "123").unwrap()
文字列に限らず値を制限する特性体
初期化時に値が適合しなかったら panic
参考: TS os: 'mac' | 'win'
列挙体でカバーできそう
デフォルト引数として変数 / 定数を指定する
式ブロック {} ... 式をまとめる表現
この中のみで put が使える
フィールド, バリアントを unreachable に設定する
void → {} 型?
バリアントの列挙型推論?
「バリアントフィールド」
パターンマッチにおいて同じ型かつ同じ名前のバリアントの or を許容する
例 ElementKind::Choice(elems) | ElementKind::Sequence(elems)
特性体の実装
code:plain
# 簡易実装 (抽象関数を実装する必要がない場合限定)
struct A : Trait1, Trait2
# 通常実装
impl Trait3
# ここで関数を実装する
end
end
code:plain
# bool の実装
type bool
impl
fn choose<T>(self| T t1, T t2) T
ret if self then t1 else t2
end
end
end