水底

ScalaとかC#とかネットワークとか

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-combinatorsxml のように外部モジュールに切り出されるようです

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 programsJapanese (Japan) にします. これでシステムの言語設定が英語でもPhotoshopIllustratorは日本語で起動・認証することができます.

また, C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Locales\ja_JP\Support Files\tw10428.dattw10428.dat_ 等にリネームしてやることで, Photoshopに限っては英語表示に切り替えて利用することができるようです.

ちなみにMacの場合は Language Switcher で日本語を指定することで起動・認証できるようになります.

おまけ: HiDPI対応は過去記事参照

amaya382.hatenablog.jp

Scalaで競技プログラミングするためのTips

競プロ初心者作

気が向いたら更新していくつもり

続きを読む

Scalaで競技プログラミングに入門したかった感想

ただの感想です. 小技集的なのはそのうち別記事でまとめる予定.

(追記: まとめた)

amaya382.hatenablog.jp

続きを読む

型クラスの雰囲気をつかんでScala標準ライブラリの型クラスを使ってみる回

Scalaで型クラスと言うとScalaz!?となるかもしれませんが, Scala標準ライブラリでも使われています. 提供されている型クラスが意外と知られていない (?) みたいなのでユースケースを交えて簡単にまとめたいと思います.

※ ゆるふわです. 標準ライブラリの範囲なのでモから始まるアイツとかは出てきません.

続きを読む

Dottyによる変更点と使い方

Dottyで何ができるようになるのかとその使い方を簡単にまとめたいと思います. 理論的な部分は深掘りしません.

f:id:amaya382:20170429233234p:plain

以下ちょっと長め. 調べきれてない点も多々あるので, 抜けや間違いがあったら教えてください.

続きを読む

複数のコマンドの出力をまとめてリダイレクトする2つの方法

1. (), {} の利用

(), {} で囲んでまとめてリダイレクト先を指定する. 丸括弧の場合はサブシェルで, 波括弧の場合はカレントシェルで実行される.

{
  command1
  command2
} >> log 2>&1

2. exec の利用

exec は現行プロセスを別コマンドのプロセスに置換するコマンドである. このとき, 引数を省略してリダイレクトのみ記述することで現行プロセス (shell) のリダイレクト先を上書きすることができる.

exec >> log 2>&1
command1
command2

ちなみに元に戻す方法が見当たらないけどどうやるのだろうか… (exec 1>&1 2>&2 とかで戻ってくれても良さそうだがうまくいかない)

まとめ

exec を使うと副作用が怖いので {} (or ()) でまとめてリダイレクトの方が無難っぽい (?)