haskell-jp / random #88

ログが取られない(公開されない)雑談できるチャンネルはありますか?
... Replies ...
上記の件ですが、特に欲しいのは「関数型言語」が「関数型プログラミング」を前提とした概念となっているという情報です。なお、これは @fumieval さんの https://twitter.com/fumieval/status/1364561412610121729 というツイートをきっかけとして始めた活動です。
... Replies ...
https://ja.wikipedia.org/wiki/Special:Diff/82017706/82024973 の通り、さらに調査を進めました。私の少ない知識で調べられる範囲は、おそらくここまでなので、他の人からの情報も欲しいです。
本題から外れるけど、「言語がまず規定され、その上の応用としてプログラミングがあるのです」という意見を見かけて驚いた……プログラミング言語はプログラミングをするための道具だったはず
でも、たとえばλ算術のようなものは「計算とは何か」を数学的に論じるために定義されて、それが後々、ソフトウェア技術にも応用されるようになった、という流れをたどってますよね。LISPも、当初McCarchy御大は計算機上で実行するものとしては考えてなくて、学生が評価器を実装しちゃったので動くようになった、という話を聞いたことがあります。
なるほど、確かにプログラミングをする用ではないプログラミング言語もありますね。難読プログラミング言語とか
Hiromi ISHII / mr_konn
LISPがあくまで当初は理論上のものだったというのは参考文献失念しましたが僕も聞いたことがあります。
文脈が掴めていませんが、厳密な話をするのであれば、構文に関する形式仕様のある言語については、ア・プリオリには意味を持たず、表示的意味論なり操作的意味論なりを定めて初めてプログラミング言語として使えるのだ、ということはできるとは思います
Hiromi ISHII / mr_konn
初めからプログラミング言語として設計された言語に対して言ってもナンセンスですが、とはいえesolangに限らず、例えばそれこそ直観主義論理はあくまで当初ブラウワーの思想を形式化した論理体系に過ぎなかったわけですが、Curry-Howard対応の発見によりλ-計算と厳密に対応がついて、そのλ計算が計算機に応用されたことで、それ自身プログラミング言語と見做せるようになった、というのは一つ「言語が先にあった」実用的な例と言えるとは思います
Hiromi ISHII / mr_konn
無論、多くのプログラミング言語は構文という形式を定めるときに、それがプログラミング言語として振る舞うことを期待して設計される訳ですが。一方で、意味を離れて形式的なものとして言語を扱えることによって、例えばマクロが使えるようになるという側面もありますね
Hiromi ISHII / mr_konn
これはさらに脇道ですが、そもそもλ-計算をChurchが考えた当初の目的は、数学を展開するための論理体系を含む包括的な言語を提供する、というものだったはずです(追記: と付随するが参考になります)。しかし、論理体系としては矛盾する(のちに縮約規則をなくして線形論理にすれば矛盾しないことが分かっています(追記:))ことが分かり、でもなんか計算っぽいことができるから計算のモデルとして使うことにしよう、とChurchが方針転換したんだったはず。こういうことを思うと、まあ我々関数型言語の祖先とも言えるλ計算自体、もともとはプログラミング言語ではなかったということになる
Hiromi ISHII / mr_konn
話の腰折りましたね。すいません:bow:
私も文脈を追わずに書いてしまいましたが、
言語がまず規定され、その上の応用としてプログラミングがあるのですから
というのは、 https://ja.wikipedia.org/wiki/%E3%83%8E%E3%83%BC%E3%83%88:%E9%96%A2%E6%95%B0%E5%9E%8B%E8%A8%80%E8%AA%9E#%E3%80%8C%E9%96%A2%E[…]%8D%E6%8F%90%E6%A1%88 にある反対意見の中で述べられていることなんですね。確かにこの場合に関して言えば、少なくとも文献から経緯を辿る限りは「関数型プログラミング」というプログラミング手法が提案され、当該手法によるプログラミングをしやすくするものとして「関数型プログラミング言語」が提案されているので、やや的外れな意見と言えるかもしれません。
ありがとうございます。この場合はあまり文脈は気にしてませんでした
witherable、0.4.1 から ordNubOn が追加されてめちゃくちゃ便利になってる(CHANGELOG には ordNubBy って書いてあるけど、多分間違い)
http://hackage.haskell.org/package/witherable-0.4.1
@yFkhr has joined the channel
モックライブラリmethodの新バージョンをリリースしました。
https://zenn.dev/autotaker/articles/method-0-3-release
https://hackage.haskell.org/package/method-0.3.0.0
リマインダー(#general と#beginners )の周期がユーザーの投稿頻度と比べて短い気がするので、頻度を下げるかチャンネルトピックに移してみてはどうでしょうか
Hiromi ISHII / mr_konn
リマインダーの頻度が高くて通知が散らかってしまうので、永らくこちらの Slack からの通知をミュートしていたため、あまりこちらの Slack の投稿に反応できていなかったという経験があるので、抑制出来るのであればそうして頂けると嬉しいですね……
えっ、<#C4LFB6DE0|general> はともかく<#CR2TETE5R|beginners> もですか?十分ユーザー投稿あると思うのですが... :confused:
general を毎年2/1の1回のみにしました
... Replies ...
@a5ob7r has joined the channel
NixをHaskellで再実装しようという試みがあるんですね :sugoi:
https://github.com/haskell-nix/hnix
... Replies ...
https://ja.wikipedia.org/wiki/関数型プログラミング
やっとこさ改名できたので、内容を書き始めました。
GHCのmasterブランチに、RecordDotの現時点の実装が入りました。 (masterをビルドすると試せます。)
最初のRecordDotSyntaxの提案は修正されて、2つの言語拡張に分割されています。
OverloadedRecordDotOverloadedRecordUpdate です。
分割の提案はこちら。
Split RecordDotSyntax into two extensions
https://github.com/ghc-proposals/ghc-proposals/pull/405
なお、`OverloadedRecordUpdate` 側は、将来的に変更され得る実験段階の扱いです。
しばらくは経験を積んで知見を高めながら、仕様&実装変更して行くようです。
... Replies ...
cabal-install 3.4 では v1-sandbox の機能が削除されてますね。しくしく。sandbox を使いたければ、3.2 に留まれだって。(そうなら、なぜ GHC 9.0 と一緒に使うと 3.2 は警告を出すのか。。。)
@Kenta Inoue has joined the channel
@sako has joined the channel
GHCのmasterブランチに、`GHC2021`言語拡張の実装も入りました。(masterをビルドすると試せます。)
commitの詳細はこれです。
https://gitlab.haskell.org/ghc/ghc/-/commit/30ccf9ed1f592531dac9f3d750278fac6303c3e4
GHC2021言語拡張の提案詳細はこれです。
https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0380-ghc2021.rst
なお、GHC 9.2からは、この`GHC2021`言語拡張が、デフォルトで有効になる方向です。
... Replies ...
stackageのおかげで、よく使われるパッケージの仕様変更で依存しているどのパッケージが壊れるのかある程度分かるようになった結果、結構大きな祭になりますね... :cold_sweat: https://github.com/commercialhaskell/stackage/issues/5878
... Replies ...
@yousuke has joined the channel
僕が引用している Ximin のメールは、どうしてアーカイブに存在しないんですかね?
それはさておき、暗号関係は困った状況です。
cryptonite が更新停止とは
https://github.com/haskell-crypto のメインメンテナが(おそらく)Haskell 辞めちゃったっぽく、今後どうしようかって感じなんですね。。。
ついこないだに、これからは cryptonite を使いましょうっていうのを聞いたような気がする
バラバラだった暗号ライブラリ群が、cryptonite にまとめられ、徐々にハードウェアサポートも入っていい感じだったんです。止めるのはいいのですが、引き継ぎがないので困っています。
僕が今実装している quic なんですが、cryptonite を使っていると他の実装に比べてまったくスループットが出ません。kazuhoさんがCで実装したfusion暗号に乗り換えたら、スループットが3.4倍速くなりました。cryptoniteもまだまだ速くできる余地があります。
ちなみに kazuho さんは、分岐予測を予測しながらCでコーディングするので、速度を競わせたら誰も彼には敵いません。。。
数年前にHsOpenSSLに比べてtlsがかなり遅かったので少しコードを見てみたら、cryptoniteかmemoryかbasementか忘れましたがあまり速度を気にせず書かれている感じでした。あれからあまり変わっていないのであれば、速度を気にするところで使うならパフォーマンスチューニングが必要かもしれません。
... Replies ...
cryptoniteは、暗号化の際に必ず新しいメモリ領域を割り当てる Haskell らしいライブラリです。送信バッファを持っているシステムから使うには、暗号化の領域を Ptr Word8 で指定できる API が欲しいです。
OpenSSLとかは、AESGCM を計算するときに、AESのHWとGCMのHWをうまく並列化しています。cryponiteには、こういう工夫がたぶん入ってないです。GCMのHW活用は、デフォルトでoffだし。
@pyar6329 has joined the channel
doctest用のコメントから取り出したコードをGHCiに入力するのではなく、コンパイルできるモジュールとして出力する方式のdoctest。より依存関係を解決しやすくテストも速いらしい
https://hackage.haskell.org/package/doctest-extract
https://mail.haskell.org/pipermail/haskell-cafe/2020-August/132570.html メーリングリストで色々と話していますね。 IO モナドによる出力結果のテストを実装できていない理由とか。
この間ここで紹介したtweetで触れてた以外にもマージしてもらえたんですね!素晴らしい! :tada:
https://blog.miz-ar.info/2021/03/my-first-contribution-to-ghc/
https://github.com/Hexirp/santa/blob/641410e7eb2cb6b4fbd50f934e0de1a434008180/src/Santa/Expression.hs
2 3 というような適用があってもエラーにならずに、 _ (2 3) という特別な値になる型無しプログラミング言語を考えていました。ここで _ t という値は hole と呼び、 f (_ t) = _ (f (_ t)) です。まあ、結局のところはボトムとスタックトレースを合体させただけなんですけど。(なので開発を続ける気はない)
:writing_hand: Nixパッケージをコンパイルした状態でダウンロードできるCachixというサービスがGHCの新しいGCを採用した結果の報告
https://well-typed.com/blog/2021/03/using-ghc-low-latency-gc-in-production/