RandomThoughts

RandomThoughts

FSharp

Contents:
  1. 関連WikiName
  2. 自分のブログ
  3. 外部リンク
  4. メモ
  5. PublishReadyToRun
  6. Argu
  7. プロファイラ
  8. System.IO.Compression等の追加
  9. StreamからのReadAllLines的な事をするコード
  10. Fable関連
  11. dotnet fsi

関連WikiName

自分のブログ

ほかにもいろいろ書いているがとりあえず。

外部リンク

言語仕様関連

作業開始時の細々とした情報

メモ

良く忘れるが、string interpolationはドル

$"string-text {expr}"
$"string-text %format-specifier{expr}"
$"""string-text {"embedded string literal"}"""

ソース: MSDN: Interpolated strings

PublishReadyToRun

シングルバイナリを作るのに、PublishReadyToRunでAOT出来るぜ、とSingle file application - .NET - Microsoft Docsに書いてあったので試してみたら、 サイズが36MBから60MBに膨らんでしまう。 60MBは嫌だなぁ、と思い、AOTしないことに。

前も試した気がするが、メモしておかないとまたやりそうなのでここにメモ。

Argu

良く使うのでメモしておく。

Tutorial

プロファイラ

[Performance Profiling F# codesuji](https://www.codesuji.com/2019/10/13/F-Performance-Profiling/) そのうち試したい。

System.IO.Compression等の追加

アセンブリに入ってそうなdllってどうやって追加するの?と思ったが、nugetになっていて全部nuget経由で追加するものっぽい。

$ dotnet add package System.IO.Compression
$ dotnet add package System.IO.Compression.ZipFile

StreamからのReadAllLines的な事をするコード

ZipEntryなどはFiles関連の便利メソッドが使えないので、たまにこの手の処理が必要になる。 終わりまでReadLineする、みたいなwhile的な処理はいまいち書きにくいが、一旦seqを作ってそれをfilterしたりすると簡潔に書ける。

    use sr = ....
    let lineSeq = seq { while true do yield sr.ReadLine() }
    lineSeq 
    |> Seq.takeWhile (fun line -> line <> null) 
    |> Seq.toList // do read before sr close.

Fable関連

なんかgolangのランタイムで動くFSharpみたいな言語無いかなぁ、と思っていて見つけたもの。

fableからやると、トランスパイラにdotnetが必要になっちゃうよなぁ。やはり似た言語くらいがいいんじゃないか、という気もする。

dotnet fsi

たまに使おうとすると忘れているが、コマンドラインでちょろっと試すなら、dotnet fsiとする。

$ dotnet fsi