Rust part26

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/09/20(金) 22:18:38.38ID:c48cFuZJ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part25
https://mevius.5ch.net/test/read.cgi/tech/1722354386/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2024/10/16(水) 18:11:33.23ID:jDyVYSBS
ごん‐げん【権現】 の解説
1 仏・菩薩 (ぼさつ) が人々を救うため、仮の姿をとって現れること。
2 仏・菩薩の垂迹 (すいじゃく) として化身して現れた日本の神。本地垂迹説による。熊野権現・金毘羅 (こんぴら) 権現などの類。
3 仏・菩薩にならって称した神号。東照大権現(徳川家康)の類。

ありがたや🙏🙏🙏
2024/10/16(水) 18:13:29.12ID:qBTeykyO
Cって、プログラムがリストになってるん?
lisp系以外で、こういうのってない気がするんだけど。
2024/10/16(水) 18:39:06.97ID:jR87Fk4R
>>309
Cの場合は、データ構造のみの話。

>>307
LISPは、プログラムもリンクトリストみたいだった
から、Cよりも権現といえるだろうけども、
Cもリンクトリストと密接な言語だと言われていて、
Cの速さはリンクトリストのおかげだった。
2024/10/16(水) 20:06:13.28ID:IdjFDmt0
>>285
Firefoxの一部はレンダリング部分などRustになっているけど
そのメモリ管理部分を含めて本体はC++のままだよ
いずれにしても各アプリケーションによるメモリ管理部分は使用言語C++/Rustのメモリ管理とは別レイヤなので各言語の問題ではないね
2024/10/16(水) 20:08:26.05ID:IdjFDmt0
>>295
ライフタイム導入でスタックフレーム上への参照と変数が管理するヒープへの参照を区別せず安全に扱えるようになっただけで意識するしないは別問題じゃないかな
そのためコストの高いヒープを回避できる機会が増えて高速化に寄与しているのは間違いないけど
2024/10/16(水) 20:11:56.13ID:IdjFDmt0
>>306
今はパイプラインとキャッシュによりほとんどの利用ケースでリンクリストよりベクタが速くなってしまったね
元々メモリ使用量や多段間接参照になる点でリンクリストが不利だった点に加えて追い打ちをかけるように
2024/10/16(水) 20:13:18.48ID:IdjFDmt0
>>310
Lispは言語としてcond, car, cdrがあるからリンクリスト言語だけどC言語は明確に違うね
Cはリンクリストもベクタもその他のデータ構造も実装できるというだけの平等な立ち位置かな
2024/10/16(水) 20:21:57.12ID:jR87Fk4R
>>313
>今はパイプラインとキャッシュによりほとんどの利用ケースでリンクリストよりベクタが速くなってしまったね
典型的な間違い。
2024/10/16(水) 20:27:30.93ID:RoKRQLvT
リンクリストは不変コレクションだから、副作用にこだわる関数型言語では特別な地位がある

ちなみにScalaではVectorという名前のもう一つの不変コレクションが多用されているんだが
これのRust版あるのかな? 中身は1ノード32要素のトライ木
2024/10/16(水) 20:48:00.68ID:jDyVYSBS
ゆーてClojureとかHylangとか今ドキLisp女子はlist processingナニソレって感じのやつばっかやん
318デフォルトの名無しさん
垢版 |
2024/10/16(水) 21:41:36.61ID:NMNSAXL7
やっぱりこのスレ関数型言語わかる人多いの?
C/C++系から入った自分としてはサッパリわからん
2024/10/16(水) 22:33:14.93ID:9ExG49iw
>>318
パラダイムは実際にはグラデーション的で、要素が混ざり合ってる。
明瞭に線を引いて分類できるわけではない。
ML 系とか LISP 系とかは関数型みたいに言われることは多いんだが実際には関数型要素が強めのマルチパラダイムって感じで、 C++ を使いこなせる人なら入門書をちゃんと読めば使えるくらいの難易度。

誰もが文句なく関数型に分類するメジャーな汎用プログラミング言語は Haskell くらいだと思う。

パラダイムは脇に置くとして、 ML 系はインデントで構造を表す文法だったり LISP 系は丸括弧ばかりで構造を表すという外観の違いの段階で忌避感を持っちゃう人は結構いるかも?
320デフォルトの名無しさん
垢版 |
2024/10/16(水) 23:59:33.67ID:NMNSAXL7
Rustで使うもの (式指向という考え方, match式, 代数的データ型, リストやOptionへのmap, filterなどの操作等) は理解できてるし、良いなと思って使えてる
それでも Lisp や Haskell は難しいという印象があるんだよね
指摘の通り見た目の見慣れなさで抵抗感があるだけなのかもしれない
2024/10/17(木) 00:17:27.82ID:CZAZeUbm
> ML 系はインデントで構造を表す文法

Haskell や F# が人気なのは分かるけど、OCaml や Standard ML を差し置いて勝手に ML 系の代表ヅラしないでくれますかね……
2024/10/17(木) 00:25:33.00ID:NeG4778y
元々は研究用の言語でコンパイラ開発とか特定の用途以外だと実用性低いし
ほとんど趣味の領域だから無理に手を出さなくていいよ
Haskellの知識があるとRustのtraitとか?演算子(Result戻し)に馴染みやすくなるけど
そのためにHaskellを勉強するほどではない
2024/10/17(木) 00:26:57.93ID:SxNRrx7E
>>321
Hakell は ML 系ではない扱いだろ。
2024/10/17(木) 00:55:24.22ID:yABRuexK
>>319
関数型の定義は何?
325デフォルトの名無しさん
垢版 |
2024/10/17(木) 01:12:31.87ID:WrCN832N
>>296
Haskellは好きだけど、他の言語でそんな事しねーわw
郷に入っては郷に従えが基本。

パフォーマンスと人間関係を犠牲にしてまでする事じゃない。
326デフォルトの名無しさん
垢版 |
2024/10/17(木) 01:44:33.23ID:WrCN832N
>>299
関数型プログラミングが提唱される前の言語だから、関数合成とか考慮されてないからとか?

Lispは歴史的にLisp以外に関数型言語が無い時代があるので、手続き型言語をお手本にコードが書かれてloop使いまくりの手続き型言語っぽいLispコードが多かったとは聞いている。
327デフォルトの名無しさん
垢版 |
2024/10/17(木) 01:57:40.19ID:WrCN832N
>>318
多分、変数がイミュータブル(不変)だと何がありがたいのかは何かしら関数型言語触らないと分からないと思う。

なので、Rustに飛びつく人は(全員ではないにしろ)関数型言語を触ったことがある人が多いとは思う。
2024/10/17(木) 03:22:22.09ID:FXzuQNl3
rustは関数型言語の特徴を一通り搭載しつつ、あえて数学用語はあまり使わない所が良い。関数型というとプログラム作らずに圏論の話に明け暮れる人が多すぎ。
rustはプログラムを書くために実用的な機能にまとめましたって感じでいい。
2024/10/17(木) 03:29:08.36ID:FXzuQNl3
lispが読めないって人はテキストエディタでカッコを全部スペースに置換してしまえばいい。
そしたらインデントだけ見えるようになる。
カッコを見ないのが正解。
自分はカッコの表示on/off機能をエディタに入れてる。
2024/10/17(木) 06:58:43.79ID:yABRuexK
関数型言語とは何かを定義せず雰囲気てわ分類するなよ
よくそんなオツムでプログラミングやってんな
2024/10/17(木) 07:48:34.04ID:ETsUhebR
ユーザー視点なら、単なる「関数型言語」というラベルくらいでいいんじゃない?
バズワードみたいなもの。

そもそも「関数」「計算可能関数 」を理解しているやつはどれくらいいるんかしらん。
2024/10/17(木) 08:51:31.65ID:SxNRrx7E
>>324
関数の入出力でプログラムを構成するスタイルってくらいのふわっとした定義しかない。
それをサポートする言語機能が多いか少ないかでグラデーションになってる。

クロージャがあれば関数型っぽいし、関数合成があればもっとだし、カリー化があればいかにもぽいぽい。
2024/10/17(木) 09:44:28.22ID:Dr9I7rOm
>>311
firefoxでも全然使われてないRust
2024/10/17(木) 12:07:14.38ID:wG5d2OUn
知りもしないことを知ったかぶりして書くやつが多いスレだこと
2024/10/17(木) 15:01:11.80ID:HAj7NAac
きみらRustでVecとかC++でvectorとか使ってんの?
なんでLinkedList使わんの?
336デフォルトの名無しさん
垢版 |
2024/10/17(木) 15:05:42.63ID:HAj7NAac
>>328
>関数型というとプログラム作らずに圏論の話に明け暮れる人が多すぎ。

わかる
そういう人ばかりじゃないと思うけどそういう人が悪目立ちするのは事実鬱陶しい
337デフォルトの名無しさん
垢版 |
2024/10/17(木) 16:50:02.90ID:hLaeUZg0
>>335
アンロールドリンクドリストならベクターより良いよ
338デフォルトの名無しさん
垢版 |
2024/10/17(木) 20:18:17.74ID:9pxlHN7V
>>324
普通はこういう風に説明される
https://web.sfc.keio.ac.jp/~hattori/prog-theory/ja/functional.html

1. プログラムは関数定義の集合であり、関数呼び出しによってそれらを組み合わせる。
2. 関数は first class object である。
3. 文という単位は無く、プログラムの実行とは式を評価することである。
4. 参照透過性がある。

主に、2が便利だから、rustにも部分的に採用されている
2024/10/17(木) 20:46:18.51ID:yABRuexK
>>338
1と2で意味被ってんじゃん
なにその頭悪い定義
自分でコピペしてて疑問に思わないのか?
340デフォルトの名無しさん
垢版 |
2024/10/17(木) 21:11:20.46ID:9pxlHN7V
>>339
1と2って全然違うこと言ってるんだけど、旧帝大の工学系ならみんな習うんだわ
専門学校卒か?涙拭けよ
2024/10/17(木) 21:25:15.67ID:zXjn5afM
>>338
ウケるw
2024/10/17(木) 21:25:56.56ID:zXjn5afM
>>339
さらにウケるw
343デフォルトの名無しさん
垢版 |
2024/10/17(木) 21:46:24.33ID:WrCN832N
>>328
Haskellerの一部しか圏論言ってないと思うけど…。
(確かに声は大きいが)

モナドで躓く人や、モナドの理解がまだ浅い人は圏論言わないし、OCamlやF#、SMLな人も圏論言わない。
(そして、モナドを深く理解した人でも全員が圏論言うわけではない)

Lisp系の人は言わずもがな。

関数型言語を使ってる人の中でも圏論言う人はごく少数。
(繰り返すが、一部の人の声が大きいのは認める)
2024/10/17(木) 21:51:50.24ID:yABRuexK
>>340
そこで具体的に説明すればワンパンで終了なのにしないんだよ
おれは知ってるの匂わせだけ
そういうヘタレいらーねから
345デフォルトの名無しさん
垢版 |
2024/10/17(木) 21:58:01.60ID:WrCN832N
>>338
Rustの説明としては弱いかな。
2はJavaもC#も持ってるし。

自分は4に重きを置いた手続き型言語って位置付けだな。
マルチスレッドプログラミングで4が重要。
(ただし、Haskellは遅延評価なので4を生かしきれず、Idris2の様な正格評価版Haskellを生み出した)

あとは、C並みに速いだけだったらOCamlやSMLも同じこと言ってるので、2,4を満たしつつGCが無いのがRustの特徴だと思う。
2024/10/17(木) 22:51:01.11ID:C0hMoyx0
言語が生き残るかどうかは
ある程度の広さがある分野においてその言語が必須かどうかで決まる
例えば広まってるOS環境での主開発言語と公式で定められたりウェブブラウザのように特定言語が強いられるような環境における利用必須もあれば
C言語のように速さと省メモリ性で他とは大差の唯一性による必須もある

つまり関数型によるメリットなんて二の次なのだ
C言語と同等の速さと省メモリ性を持ちつつ様々な安全性も保証するRustはCに替わって広い分野での必須言語となりつつある
そのRustがたまたま関数型の特徴を多く兼ね備えて非常に使いやすいというだけにすぎない
2024/10/17(木) 23:33:24.78ID:784LeBrK
突然の演説
2024/10/18(金) 00:37:38.20ID:eikO6PmP
>>346
>C言語と同等の速さと省メモリ性
誇大広告を鵜呑みにする集団幻覚。
349デフォルトの名無しさん
垢版 |
2024/10/18(金) 03:49:07.30ID:5Kk3482a
>>344
おまえが馬鹿なだけ
普通の頭があれば匂わせで全部判る
2024/10/18(金) 08:02:39.80ID:Zig2xljb
えっAPLもっ?
2024/10/18(金) 08:57:56.68ID:phux1vRq
>>340
旧帝大の工学系ってこんなにレベル低いのか
日本終わっとるな
352デフォルトの名無しさん
垢版 |
2024/10/18(金) 09:16:52.85ID:zss9wXA+
いやまあ>>338 の1と2は全然別のことを言ってるだろ
これで説明が足りないと感じる人はFirst class objectの意味を知らないとかか?
353デフォルトの名無しさん
垢版 |
2024/10/18(金) 09:31:39.70ID:ady3VKii
関数を組み合わせるってコンビネーターがないと組み合わせられないからね
ファーストクラス関数がないとコンビネーターは無理だからな
354デフォルトの名無しさん
垢版 |
2024/10/18(金) 09:32:07.67ID:zss9wXA+
解説したらワンパン終了というが、こう言う時の解説って案外難しいんだよな
相手が「first class object」の意味を知らないのか、「関数」の意味を知らないのか、日本語の文法を知らないのか、それとも文を読む気がないのか、はたまたレスバで勝ちたくて因縁付けてるだけなのか
相手の状態によって適切な解説は異なる。相手の知識をエスパーして解説を始めても意外とフィットしなくてワンパンで終わらない

掲示板でそこまでの手間をかけても、相手がレスバで勝ちたいだけだったら何も得られない。だから馬鹿にして去るのが最適解になってしまう。
2024/10/18(金) 11:13:30.31ID:wVDH4S6Q
>相手の知識をエスパーして解説を始めても意外とフィットしなくて

レスバが目的なら判らないフリしてるだけだからフィットする訳がない
2024/10/18(金) 11:20:18.93ID:/SvZNagR
>>348
その文言に騙されたヤツはほんと多いと思う
357デフォルトの名無しさん
垢版 |
2024/10/18(金) 13:34:55.49ID:io02HZIQ
>>339
例えばC言語の場合は関数は第一級オブジェクトじゃないけど、それは知ってる?
2024/10/18(金) 13:52:02.38ID:xbVzWiEk
>>353
「プログラムは関数定義の集合であり、関数呼び出しによってそれらを組み合わせる」と書いてあるようにコンビネーター前提とした関数の組み合わせの話ではないでしょ

それにコンビネーターなくても関数合成も可能だし関数がファーストクラスじゃなくてもファーストクラス関数風に扱える言語要素があればコンビネーターを使える

そもそも>>388の引用元が関数型の定義でも関数型言語の定義でもなくて関数型言語と呼ばれるものに多く見られる特徴の一部を列挙してものでしかないから関数型(言語)の定義だと思って読んではいけない
2024/10/18(金) 14:00:22.06ID:xbVzWiEk
>「1. プログラムは関数定義の集合であり、関数呼び出しによってそれらを組み合わせる。」

関数型言語でも関数定義以外にもモジュールや型や変数の定義があるので
関数定義の集合というと言い過ぎ

厳密な話ではなくプログラムの捉え方のようなざっくりした話であれば
C言語で書いた手続き型的なプログラムでも1は成り立つので
結局何が特徴だと言いたいのかわからない残念な文章
2024/10/18(金) 14:26:18.56ID:at3pRl/S
パラダイムはプログラムの構成の話なので、 C でオブジェクト指向的なプログラムを書いてもいいし関数指向的に書いてもいい。
言語としてクロージャがなくても構造体と関数の組をクロージャと見做して構成することも出来る。
ただ、なるべく直接的に言語の機能としてサポートがあるに越したことは無いし、常識的には言語が想定している形でプログラムを構成したほうが楽ってだけの話だ。

言語の機能での分類は「だいたいこっち寄り」くらいのことしか言えない曖昧なもんだわ。
2024/10/18(金) 17:16:35.88ID:0JUhcpKJ
>>358
一連のレスで唯一CSの教養を感じるわ
そのとおりであれは定義でもなんでもなく、手続き型言語に関数風味をつけた言語の紹介文でしかない
1,2が当然のように別物といってるやつは計算基礎論履修してないわな

それでも1をエスパーすると関数の集合でなく合成と訂正すればまぁ理解できる
となると関数がビルディングブロックなので2の説明は不要となる

あとファーストクラスオブジェクトってのも怪しい名称だわな
手続き型言語でインラインで関数定義できる程度のことをかっこつけて言ってるだけしか聞こえん
2024/10/18(金) 17:47:07.37ID:72lp8MJn
>>361
さすがにその理解で他人をけなすのは……

第一級オブジェクトはwikipedia参照したほうがいいな。意味としては「関数の定義域・値域として他のオブジェクトと同様に使える」ということだから、単にプログラマが使えるということでは無いよ。

>>338の1は関数の集合を定義域値域にできるとは言っていない。
2は関数集合(の部分集合)を定義域・値域にできるという話だから、基本的に1とは別の話。
363デフォルトの名無しさん
垢版 |
2024/10/18(金) 18:29:51.87ID:ady3VKii
>1. プログラムは関数定義の集合であり、
>関数呼び出しによってそれらを組み合わせる。
関数定義の集合はプログラムってことだから
例えば{fの定義,gの定義}はプログラムだろ
fの定義が f (x) =fの式 でgの定義が g (x) =gの式とすると
fの引数xにgを入れてを呼び出して f (g) =fの式の中のxをgに置き換えた式 になって
f ( g) =f式の中のxをgに置き換えた式 も関数定義だから
{fの定義、gの定義、fgの定義}もプログラムってことでしょ
3によってプログラムの実行とはfgの式とかを評価することでしょ
2024/10/18(金) 19:42:44.39ID:v0IxkFYT
>>362
それは手続き型言語の考え方
定義域、値域とかいいだしたら論理が循環する
365デフォルトの名無しさん
垢版 |
2024/10/18(金) 19:55:50.08ID:ndvmbteL
363が全然判ってなくて草
366デフォルトの名無しさん
垢版 |
2024/10/18(金) 21:19:37.07ID:6b0+FHXo
>>357
関数ポインタはあるじゃん
クロージャみたいに環境を持った関数は作れないけど
367デフォルトの名無しさん
垢版 |
2024/10/18(金) 21:27:21.74ID:Yil/SvXx
first class objectってのは、無名で扱える、関数の引数に渡せる、関数の返却値として返せる、を満たすものだよ
C言語の関数は必ず関数名を与えないといけないからfirst class objectではない

学部レベルの講義で独自理論なんか扱うわけない。>>338 で引用した説明が通説になっている
それを迂闊にも否定した >>339 は反省しろってことだな
2024/10/18(金) 21:33:52.38ID:v0IxkFYT
>>367
ラムダ算法をベースに考えた場合ファーストもくそもねーんだよ
全部関数
まじCSの教養ないぞお前
369デフォルトの名無しさん
垢版 |
2024/10/18(金) 22:19:50.60ID:VQpP6XIE
>>348
んでも、上で書いた通りOCamlやSMLも誇大広告してたし、さらに言えばJITコンパイラ出した当初のJavaやC#も似たような誇大広告してたんだけどね。
2024/10/18(金) 22:55:23.05ID:36/T9R8D
「関数型プログラミング」にも「第一級オブジェクト」にも言語の垣根を超えた一般的な定義というものはない
「オブジェクト指向」を自称する言語たちがそれぞれ微妙に異なるオブジェクトを実装しているのとほぼ同じ
2024/10/18(金) 23:00:20.33ID:36/T9R8D
てかどうでもいいけどfirst-class objectって英語圏ネイティブからするとどういう印象を受ける言葉なんだろうね
masterとかblacklistなんかとは比べ物にならないレベルで明確にpolitically incorrectな気がするけど
372デフォルトの名無しさん
垢版 |
2024/10/18(金) 23:10:22.32ID:Py1NdU9l
>>364
それは流石に関数に対する理解が浅いかと。

関数は要素と像のペアの集合なんだから、定義域と値域は関数に必ず存在する重要な性質だろ。
それを無視するのは関数の本質を無視するようなもの。

「定義域、値域とかいいだしたら論理が循環する」と言うなら、>338 に関連して定義域、値域よりも関数の定義に近い重要な性質って何よ?
373デフォルトの名無しさん
垢版 |
2024/10/18(金) 23:28:21.46ID:6b0+FHXo
理解不足かもしれないけど「『副作用の無い、単に写像として表現できる関数』を中心に組み立てる」くらいの認識じゃだめなの?
数学的な意味での定義域はプログラミングでは成り立たない気がする
引数の型がi32なら、その関数には32ビット整数の取り得る値すべてが入るわけだし
ゼロ除算は数学上は定義できないけど、プログラムとしては書けてしまうから「考慮しない」わけにはいかず、エラー処理が必要なわけで
2024/10/18(金) 23:35:59.34ID:cbeCWz4D
ガロア体の話?
2024/10/18(金) 23:56:20.42ID:US/DDn9d
モダンな関数型プログラミングのサポートもメモリ安全性も今では必須の前提になっている
そのうえでC言語と同等の速さと省メモリ性を兼ね備えたRustだけが核心部でも使われ生き残るのさ
2024/10/18(金) 23:59:05.04ID:x/LLoMNV
>>375
>そのうえでC言語と同等の速さと省メモリ性を兼ね備えたRust
ダウト
377デフォルトの名無しさん
垢版 |
2024/10/18(金) 23:59:21.56ID:6b0+FHXo
プログラミングの上ではある程度の割り切りはしてると思う
例えば「入力の文字列を2回繰り返した文字列を返す (例. ABC -> ABCABC) 」関数は、理想的には任意の文字列を渡せるけど、PCのメモリを食い尽くすほど長い文字列を与えたらプログラムが停止するよね
だからといって「この関数は純粋ではない」とは言わなくて、それでも実用上は関数として扱う、といったところはあると思う
378デフォルトの名無しさん
垢版 |
2024/10/19(土) 01:37:07.63ID:/2TSLe1L
>>373
大雑把に言えばそうだけど、Lisp系を関数型言語に含める人と含めない人(MLの系譜の言語だけが関数型言語)で意見が食い違って争いというか、Lisp系含めない人は比較的若い人が多いので、(関数型言語の条件にパターンマッチは必須じゃないなどと)訂正される。

若い人でも情報系の学校でLispを関数型言語って習うと思うが、世間一般に普及してるとは言い難い。
2024/10/19(土) 02:59:24.38ID:zdwsITl3
ぶっちゃけLispってもう年寄りしか使ってないよね
2024/10/19(土) 03:38:52.89ID:OaEQIxry
Lispは使うとか使わないとかじゃない
言語オタク度が一定のレベルに達すると常にそこにあることが見えるようになるものだ
2024/10/19(土) 05:03:40.93ID:pGZZ/Z6D
Erlangですねわかります
2024/10/19(土) 07:03:26.74ID:09S67de8
昨日リリースされたRust 1.82で、やっと Box<T>::new_uninit() が安定化された

これ、前にトラブってた、bindgenにC++のコンストラクタを作らせるとデータが壊れる件の解決策になるやん!
と思って、喜び勇んでbindgenのリポジトリ見に行ったら、特に対応予定はないみたいだった
2024/10/19(土) 10:54:30.72ID:3T8uATjn
Erlang の OTP に相当するのって Rust では何?
2024/10/19(土) 13:15:37.02ID:ZlmyUR62
>>383
OTP は役割が広すぎる。
どういうことを期待して「相当」と言ってるのかもうちょっとくわしく。
2024/10/19(土) 15:16:05.33ID:914NuxWA
>>383
tokio
2024/10/19(土) 16:54:27.33ID:zdwsITl3
今ってtokio一人勝ちってことでいいの?
他のランタイムに勝ち目ある?

tauriはtokioだけど、一応抽象化して直接見えないようにしてる努力は感じられた
でも実際にtokio以外を混ぜたらどうなるのかな? バグるなら抽象化した意味がないが
2024/10/19(土) 19:34:22.94ID:/3C3bE8g
>>372
定義域とか値域とか言い出してるあたりCS修めてない匂いプンプンするけど
百歩譲ってお前が言ってるのは型理論の範疇
型無の関数型がありえる以上関数型の定義とは直接関係ない
2024/10/19(土) 20:35:05.03ID:11v9Pc45
>型無の関数型がありえる以上

ちょっと待って、それって「関数型」の定義が与えられてなけりゃ言えないことでしょ。
2024/10/19(土) 22:16:54.49ID:/3C3bE8g
関数型言語
390デフォルトの名無しさん
垢版 |
2024/10/20(日) 02:22:08.35ID:IoIIyUOe
>>387
「関数」と「関数型」をごっちゃにしていない?
一連の話は「関数」の話で「関数型」じゃないよ.

そもそも「関数型」が一級オブジェクトの言語って存在するっけ?
391デフォルトの名無しさん
垢版 |
2024/10/20(日) 07:51:49.41ID:Rpp5gjxc
横からだが、全ての関数型言語は関数型も一級オブジェクトだよ。
意味が無いから無いだけで、map関数の逆バージョン(関数と値の立場逆転)も作れる。

pam _ [] = []
pam x (f:fs) = f x:pam x fs

pam 1 [(+1), (+2), (+3)] = [2,3,4]
392デフォルトの名無しさん
垢版 |
2024/10/20(日) 08:53:33.20ID:vZg//j7Z
そうなのよね。CS振りかざして偉そうにしてるヤツは単に分かってないだけで的外れ
393デフォルトの名無しさん
垢版 |
2024/10/20(日) 09:40:05.16ID:IoIIyUOe
>>391
関数型自体をオブジェクトにして保存したり実行時解釈したりってできたっけ?
Rustならジェネリック関数の型引数を変数に保存して使うイメージ.
C++ならテンプレート関数のテンプレート引数を変数にして実行時解釈する感じ.

スクリプト言語とかならできるかな?
Rubyはできた気がする.Pythonはどうだったっけ?
JavaScriptはプロトタイプチェーンだからできるか.JavaScriptのプロトタイプオブジェクトを型と言って良いのか微妙だけど.
2024/10/20(日) 09:41:59.72ID:N14K/WsC
>>286
言語は関係なしにプログラマが優秀なだけだろ
2024/10/20(日) 10:01:17.80ID:KK2kuO2o
>>391
その例は単に関数がfirst classというだけじゃん

Idrisとかなら関数の型を受け取って別の関数の型を生成して返すような関数が作れるので関数の型もfirst classと言える
396デフォルトの名無しさん
垢版 |
2024/10/20(日) 10:37:31.29ID:LzrvAVJD
歯透ける厨と同じ臭いがプンプンする
2024/10/20(日) 13:32:41.76ID:AQmfmnaz

どこからか「関数型」が指すのがfunctionalからfunction typeにすり替わってないか
2024/10/20(日) 14:28:18.13ID:xF+HnWMo
すり替わってるわけではない
>>390の最後の行から違う定義の話に逸れただけ
おかけで関数型を理解してない人が炙り出されて結果オーライ
399デフォルトの名無しさん
垢版 |
2024/10/20(日) 14:45:25.09ID:Rpp5gjxc
>>393
関数型言語はオブジェクト指向じゃないのでオブジェクトは無いが…。
(OCamlならやCommon-Lispならオブジェクト指向もサポートしてるので、出来るかもしれないが)

というか、「全ての関数型言語は」と書いたのに、あなたの出す言語に一個も関数型言語は入ってないのだが…。

普通にできるジェネリック関数とか区別せずに、全ての関数でできる。

f = (+1)
g = print
h = g.f
h 1 =
2
と出力

mapM_ h [1..3] =
2
3
4
と出力

sequence_ [h 1, h 2, h 3] =
mapM_の時と同じ結果

(sequence_.tail) [h 1, h 2, h 3] =
3
4
と出力
400デフォルトの名無しさん
垢版 |
2024/10/20(日) 14:51:20.54ID:Rpp5gjxc
あ、Haskell意外だと副作用のある関数の扱いは分からんが、普通の関数なら全ての関数型言語はできる。
むしろ、それがFP(関数プログラミング)で提唱されていること。
2024/10/20(日) 17:34:13.10ID:xPa/dMaC
そして誰もツッコミすらしなくなった・・・
402デフォルトの名無しさん
垢版 |
2024/10/20(日) 17:43:19.05ID:IoIIyUOe
>>398
「関数型」言い始めたのはその前の>387からだろ.
>390はその流れを受けているだけ.

>>393
もともとの話が>338(1,2,が同じことを言っているのか別のことを言っているのか)の話なんだから,その文脈での"Object"だよ.
とりあえずWikipediaの「第一級オブジェクト」あたりを下敷きにすればいいんじゃね?
ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%

> 普通にできるジェネリック関数とか区別せずに、全ての関数でできる。
ということだけど,Haskellとかの関数型言語って,mapとかの高階関数そのものを引数にしたり戻り値にしたりできたっけ?
2024/10/20(日) 17:45:10.88ID:PyTRrFhl
そろそろRustの話しろよ
2024/10/20(日) 17:58:45.35ID:2ZyMYwfA
>ということだけど,Haskellとかの関数型言語って,mapとかの高階関数そのものを引数にしたり戻り値にしたりできたっけ?
そらできるだろ
逆に関数がファーストクラスの言語でできないやつあるの?
2024/10/20(日) 18:04:59.62ID:jAtz6juv
そもそもスレチで鮨
https://srad.jp/comment/135132
2024/10/20(日) 18:07:49.61ID:gkezQsQG
>>402
>>387の言ってる関数型はfunction typeじゃなくてfunctional programming (languages)でしょ
「型無の関数型(言語)」の意味が通じてなさそうだからわざわざ言い直してるんじゃない?
407デフォルトの名無しさん
垢版 |
2024/10/20(日) 18:16:41.15ID:Rpp5gjxc
>>402
高階関数そのものを?
普通にできる。

f mf f xs = mf f xs

f map (+1) [1..3] = [2,3,4]
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況