haskell-jp / atcoder-lang-updates #2

AtCoder の提出内容 (ソースコード) を API で取得できればなぁ。
repaについて、行列積とかはrepa-algorithmの方に入ってるんですね。repa-algorithmを入れるとFFTとかも入ってしまって、上のtweetに引っかかる感じがありますが、どうなんだろう
AtCoderでFFTを使う問題はそれなりにある
numpyやD言語標準ライブラリにはFFTが入っていて、これらを使った解答もある模様
@qryxip has joined the channel
Ubuntu 18.04.2のLive DVDで環境構築を試してますが、 libtinfo.so.6 が見つからないというエラーが出ます。システムに存在するのは libtinfo.so.5 のようです。
Live環境じゃなくてちゃんとインストールすれば解消するんですかね?
https://packages.ubuntu.com/ja/cosmic/libs/libtinfo6 libtinfo6 は cosmic (18.10) 以降っぽい?
GHC 8.2.2はインストール可能、GHC 8.4以降はインストール不可っぽいです。
Ubuntu 18.04.2にghcupでGHC 8.6.5の導入に成功したので、スレッド形式でメモしておきます。
ghcupは公式で配布されているバイナリを取ってくるわけですが、公式で配布されているLinux向けのバイナリにはディストリごとにいくつか種類があります。 https://www.haskell.org/ghc/download_ghc_8_6_5.html
GHC 8.6.5の場合は、Linux (x86_64)に対して Debian 9 / Debian 9 (with DWARF support) / Debian 8 / Fedora 27 が用意されています。Ubuntu向けのはありません。
じゃあUbuntuでghcupを実行したらどれがインストールされるのかというと、 .download-urls というファイルの指定によって決まります。今のところ、Ubuntu向けにはFedora用バイナリが使われるようです。 https://gitlab.haskell.org/haskell/ghcup/blob/master/.download-urls
.download-urls のURLをカスタマイズしたい場合は、環境変数 GHCUP_META_DOWNLOAD_URL を設定します。実際に使われるURLは ghcup debug-info で確認できます。
最新のUbuntuは知りませんが、Ubuntu 18.04に関してはDebian 8かDebian 9向けのバイナリを使うようにしたいところです。そのために .download-urls の内容をカスタマイズします(公式の .download-urls をダウンロードして手元でいじり、先述の環境変数に file://$HOME/.download-urls みたいな感じで設定します)。
Debian 9向けのバイナリを使いたい場合は、 .download-urls の debian=9,debian,mint となっている部分を ...,mint,ubuntu=18.04 に書き換えます。
Debian 9向けのバイナリに関してはまだ ghc-8.6.5 --version くらいしか動作確認できていませんが、ちゃんと動作することが確認出来たらghcupの方へMerge Requestを投げるとよさそうです。
stack setupはどうしているのかと思ったら、実際にシステムに存在する共有ライブラリを調べてダウンロードするバイナリを決めているみたいですね。えらい https://github.com/commercialhaskell/stack/blob/master/src/Stack/Setup.hs#L907 https://raw.githubusercontent.com/fpco/stackage-content/master/stack/stack-setup-2.yaml
Oh... https://github.com/haskell-jp/atcoder-haskell-resources/blob/master/spec.md の手順ではうまくいっているように書いてありましたが... なぜ食い違ってしまったんだろう... :confused:
たしかに不思議ですね。Docker でしか確認してなかったので、追試助かります!

Ubuntu 18.04 のインスタンスを実際に作って、もう一度確認してみますね。
Ubuntu 18.04.2のLive DVDで環境構築を試してますが、 libtinfo.so.6 が見つからないというエラーが出ます。システムに存在するのは libtinfo.so.5 のようです。

AtCoder と同じような環境で確かめたところ、たしかにエラーが再現しました。(Docker は何で大丈夫だったんだろう・・・)

$ uname -a
Linux ip-***_***_***_*** 4.15.0-1043-aws #45-Ubuntu SMP Mon Jun 24 14:07:03 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"

$ curl  -sSf | sh
"/home/ubuntu/.ghcup/ghc/8.6.5/lib/ghc-8.6.5/bin/ghc-pkg" --force --global-package-db "/home/ubuntu/.ghcup/ghc/8.6.5/lib/ghc-8.6.5/package.conf.d" update rts/dist/package.conf.install
/home/ubuntu/.ghcup/ghc/8.6.5/lib/ghc-8.6.5/bin/ghc-pkg: error while loading shared libraries: libtinfo.so.6: cannot open shared object file: No such file or directory
: recipe for target 'install_packages' failed
make[1]: *** [install_packages] Error 127
Makefile:51: recipe for target 'install' failed
make: *** [install] Error 2
Failed to install, consider updating this script via: ghcup upgrade
"ghcup --cache install" failed!
@mod_poppo
だめぽさんのメモ通りに download-urls を修正したファイルをリポジトリにあげました。詳細なメモで助かりました!ありがとうございます。
https://github.com/haskell-jp/atcoder-haskell-resources/blob/master/download-urls

手元の環境では、以下の手順でインストールに成功したので、ドキュメントを更新しておきます。

$ sudo apt-get update
$ sudo apt-get install -y curl g++ gcc libgmp-dev libtinfo-dev make ncurses-dev python3 libnuma-dev coreutils

$ export GHCUP_META_DOWNLOAD_URL=

$ curl  -sSf | sh
確かに https://packages.ubuntu.com/search?keywords=libtinfo で調べた限り、libtinfo6が使えるのは18.10からみたいですね。
ghcup print-system-reqs の結果が間違っていたので修正しました。
Docker で実行した時は default の方が表示されてたみたいです。
https://gitlab.haskell.org/haskell/ghcup/blob/master/.requirements/ghc/default

正しくはこっち
https://gitlab.haskell.org/haskell/ghcup/blob/master/.requirements/ghc/ubuntu
https://gitlab.haskell.org/haskell/ghcup/issues/108 ghcupがUbuntuでFedora向けバイナリを使うようになったのはつい数日前っぽいですね
The current bindist for ubuntu () tries to use libtinfo.so.5, but since at least 16.04, Ubuntu provides libtinfo.so.6 but not libtinfo.so.5.
:thinking_face:
@hatoo has joined the channel
@statiolake has joined the channel
AtCoderでLLVMバックエンドを試せると楽しそうなのでやってみました。
https://gitlab.haskell.org/ghc/ghc/wikis/commentary/compiler/backends/llvm/installing によると、GHC 8.6が依存するLLVMのバージョンは6.0なので、aptで llvm-6.0 を入れます。
GHCに -fllvm を指定するとLLVMの opt コマンドを呼び出そうとするわけですがこの状態では opt$PATH に含まれていない(代わりに opt-6.0 がある)ので、
env PATH=/usr/lib/llvm-6.0/bin:$PATH ghc -fllvm -O2 Main.hs

という風にすると良いようです。
環境変数をいじる代わりに
ghc -O2 -fllvm -pgmlo opt-6.0 -pgmlc llc-6.0 Main.hs

でも良いですね。
Haskell (GHC (LLVM))って行を例のスプレッドシートに追加してみるのも良さそうですね! :+1:
修正されたみたいです!:tada:
https://gitlab.haskell.org/haskell/ghcup/merge_requests/108

環境構築方法も更新しておきます。
@aximov has joined the channel
@tos has joined the channel
@ has joined the channel
今からpackageを追加希望するのってありですかね?
うーん、どこかで締め切りについてちょくだいさんが触れていたような気がするんですが、見当たらないな... :confused:
いずれにしても、締め切りは基本今回のLanguage Updateの締め切りに準ずる形でいいと思うのですが...
Augustに実施するとは聞いてます.chokudaiさんのツイートはone-by-oneで通知が来るように設定してあるので,他の情報は多分無いです.
massiv. 希望理由: 高次元のaligned vectorを扱うmoduleであって,
- mutable <-> immutable 相互変換可能
- map,fold等がそのまま使える
を満たしているものとして希望した.
total <- VUM.new (h*w)
let !xys = force $ V.unfoldrN h (\ !x -> Just $! VUM.splitAt w x) total

とかやるのもうめんどくさくて….
@ has joined the channel
@kanimum has joined the channel
@ has joined the channel
@kafu has joined the channel
@ has joined the channel
ドキュメントを更新しました。
https://github.com/haskell-jp/atcoder-haskell-resources/blob/master/spec.md

- ghcup の手順を公式通りの手順に戻しました。
- 提案パッケージをまとめました。
- パッケージのインストール手順を詳細に記述しました。
- 環境構築作業を行なったユーザと異なるユーザで、パッケージを利用できるように環境構築手順を変更しました。

また、実際の AtCoder に提出されているコードをランダムにいくつか試し、コンパイルが成功するかどうか試しました。今の所、コンパイルが通らなくなったコードはありません。
まだ言語アップデートに間に合いそうなので、いくつかパッケージを追加してPR投げました: https://github.com/haskell-jp/atcoder-haskell-resources/pull/1
良さそうならスプレッドシートの方も更新しておきます。
ありがとうございます。手元で確認してからマージしますね:eyes: