Scala2.13からの新しいコレクションライブラリ
今更
もうProposalが出されてから暫く経っていますが今更軽く確認したのでメモ書き. 特に大した内容はないです. ちゃんと知りたい方は SCALA 2.13 COLLECTIONS REWORK や ソース を読んで下さい.
過去にScala2.8でも一度Scalaのコレクションライブラリは大きな変更が加えられています. その際に (確かに機能的なんですが) 分かりづらいと評判の CanBuildFrom
を中心とした仕組みが追加されました. しかしながら, その挙動は一見トリッキーで実装は無駄に巨大になってしまっているため, Scala2.13で新しいコレクションライブラリである Strawman に変更される予定です. 普通に(?) 利用している分にはAPIの変更はないため既存のコードはそのまま動くはずですが, breakOut
, view
や継承して自前のコレクションを作成している場合などには破壊的変更があるためコードの修正が必要 になります. 以下は個人的に気になった変更箇所のピックアップ.
速くなる
→うれしい
CanBuildFrom
が消える
コレクション内部の操作方法が変更され, map
等で生成されるコレクションの型を決定していた CanBuildFrom
が消えます. これでやっとIDEの補完が分かりやすくなりますね (今までのやつだと初心者が見たらわけわからんかったと思うの). 内部的にシンプルにしようとしているらしくソースをちら見した限りではかなり読みやすくなっていました. implicit
が大幅に減ってほぼ型クラス用にしか使われなくなっていたり.
ちなみに, CanBuildFrom
の代替として (?) FromIterable
で Concreteなコレクションの生成を行います (to
メソッドもこれを使うようになる). CanBuildFrom
と違ってExplicitな引数を使います.
CanBuildFrom
が消えたので当然 breakOut
も消える
以前は breakOut
でコレクション変換を端折ってちょっとパフォーマンスを上げるといったことができたのですが消えます. 代わりに view
を使うことになるようです. ちなみに view
の実装もシンプルになったとか.
val s: Seq[Int] = ... val set: Set[String] = s.map(_.toString)(collection.breakOut) // before val set = s.view.map(_.toString).to(Set) // after
collection.parallel
が標準ライブラリから外れる
parser-combinators
や xml
のように外部モジュールに切り出されるようです
Migrationは ScalaFix で
ScalaFix以外のMigrationツールも検討中らしい
まとめ
よさの塊. まだ実装途中なのでリリースが楽しみ.
リリースが待ちきれない, そんなあなたに (すぐに試せます)
日本語版PhotoshopやIllustrator (CS6) を英語環境で起動・認証する方法
ライセンスが言語ごとに分かれているらしく単純に起動しようとすると, 例えばIllustratorの場合は 日本語版としてインストールしても「This serial number supports only 日本語. 」と言われてしまい認証してくれません. CCだと自由に切り替えられるんですけどね…ツライ.
起動方法
Control Panel > Clock, Language, and Region > Region > Change location
から Administrative > Language for non-Unicode programs
を Japanese (Japan)
にします. これでシステムの言語設定が英語でもPhotoshopやIllustratorは日本語で起動・認証することができます.
また, C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Locales\ja_JP\Support Files\tw10428.dat
を tw10428.dat_
等にリネームしてやることで, Photoshopに限っては英語表示に切り替えて利用することができるようです.
ちなみにMacの場合は Language Switcher で日本語を指定することで起動・認証できるようになります.
おまけ: HiDPI対応は過去記事参照
(※2018/3/17 新しい記事書きました) Dottyによる変更点と使い方
新しい記事を書きました. 本記事を包含します.
Dottyで何ができるようになるのかとその使い方を簡単にまとめたいと思います. 理論的な部分は深掘りしません.
以下ちょっと長め. 調べきれてない点も多々あるので, 抜けや間違いがあったら教えてください.
続きを読む複数のコマンドの出力をまとめてリダイレクトする2つの方法
1. ()
, {}
の利用
()
, {}
で囲んでまとめてリダイレクト先を指定する. 丸括弧の場合はサブシェルで, 波括弧の場合はカレントシェルで実行される.
例
{ command1 command2 } >> log 2>&1
2. exec
の利用
exec
は現行プロセスを別コマンドのプロセスに置換するコマンドである. このとき, 引数を省略してリダイレクトのみ記述することで現行プロセス (shell) のリダイレクト先を上書きすることができる.
例
exec >> log 2>&1 command1 command2
ちなみに元に戻す方法が見当たらないけどどうやるのだろうか… (exec 1>&1 2>&2
とかで戻ってくれても良さそうだがうまくいかない)
まとめ
exec
を使うと副作用が怖いので {}
(or ()
) でまとめてリダイレクトの方が無難っぽい (?)