- 1 名前:デフォルトの名無しさん mailto:sage [2012/08/16(木) 22:17:50.32 ]
- 339 返信:153[sage] 投稿日:2012/08/16(木) 22:16:29.83
>>314 >関数型言語でなければならないという観点は間違ってる気がする ああ、これについては同感だね 現状のどの関数型言語も文字列、パターン、ハッシュの操作に難があるから、 現行LLであるPerl/Python/Rubyを置き換えるには無理があると思う ただし、関数型言語にも良い特性がある訳で、実際に(LLを含む)多くの言語に影響を与えている だから自分は「LLにおける関数型プログラミング」に注目している
- 60 名前:デフォルトの名無しさん mailto:sage [2012/08/18(土) 18:55:25.75 ]
- >>59
例えば Ruby なら、破壊的操作には関数名に ! をつけましょうという、 ハンガリアンと同レベルの命名規則が提案されもしたが、 しっかりと守る人は少なかった。 一方 OCaml などにおいては、参照透過性を保つことを基本としながら、 その中に(明確にマークすることにより)破壊的操作を混ぜることに成功している。 こちらも、破壊的操作はできるが、できるだけ参照透過性を守ろうというのは、 いわば約束であって、そうしなければコンパイルが通らないという話ではないから、 そういう意味では Ruby の命名規則による約束と強制力という点で何ら変わらない。 どちらも約束であるのに、一方で失敗し、もう一方で成功しているのは、 あくまで参照透過性が基本という、関数型言語が培ってきた文化の力が大きいと思う。 LL というカテゴリ名が示すように簡単に軽く書けることを信条としてきた言語では、 約束程度の縛りでは「可変(mutable)な操作と不変(immutable)な操作の明確化」 にはなかなか至れないと思う。 自分はそのつもりで守っても、使ってるライブラリでそれを壊してたら、 逆にデバッグ時にある意味不要な柔軟な思考が要求され、ハマる可能性もある。 せめて、内部で一カ所でも破壊的操作が行われていたら、 関数名の末尾に ! を付ける事を構文化して、ルールを守らなければ インタプリタやコンパイラから警告ではなくエラーを出すようにしないと 明確化には遠いと思う。
- 61 名前:uy [2012/08/18(土) 19:53:44.14 ]
- 元々標準で
deleteとか delete_if に!ついてねーもの
- 62 名前:28 mailto:sage [2012/08/19(日) 00:07:56.60 ]
- >>60
同感ですね、特に次の一文が.... >どちらも約束であるのに、一方で失敗し、もう一方で成功しているのは、 >あくまで参照透過性が基本という、関数型言語が培ってきた文化の力が大きいと思う。 新しいパラダイムの普及や文化の移行には、長い時間が必要です オブジェクト指向にしても、Smalltalk-80の日本上陸から現在の繁栄の時代まで20数年を要しました 関数型言語からLLの戦場に対応すべく異常進化した新種が誕生するのか(>>28)、 あるいはLL文化が関数型パラダイムへと移行するのか(>>49,54)、未来は予測できませんが 長い目で見守りつつ自身の技(わざ)を磨いていかなければならないと思います Rubyに関しては、「簡単に軽く書ける」どころか「楽しいプログラミング」を信条としている訳で、 そのRuby固有のユニークな文化は今後も生き続けるでしょうし、自身もそれを望んでいます Rubyで高品質設計が求められつつあるといっても、その主戦場の重要性に変わりはないのですから.... (>>49,54で言ってる事と矛盾しているような気がしないでもないけど、たぶん気のせいでしょうw) だから関数型パラダイムへの移行期間では、 ・関数型プログラミング技法を用いてRubyで「楽しく」プロトタイプを開発し、それをML族へ移植 ・高品質な部品(コンポーネント)をML族で開発し、それらをRubyで糊付 といったアプローチもありかもしれません また、現実のRubyプロジェクトでは、以下の施策を適用しています ・[>>49] すべてのメソッド定義の出入り口に専用の動的型検査メソッド呼び出しを入れる ・[>>54] 生の組み込みクラスを包む破壊/非破壊操作を分離した独自クラス
- 63 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 00:58:41.44 ]
- Pythonの命名規則の定着具合はRubyやPerlみたいなウンコ言語より遥かにマシだからLLと言って一緒くたにすんなよ
- 64 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 01:03:40.72 ]
- >>63
例えばどのような命名規則でしょうか。 このスレはあくまでLLにおける関数型プログラミングの話なので、 関数型プログラミングに関わりそうな部分だけで結構ですので、 いくつか例を挙げていただけないでしょうか。
- 65 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 01:07:43.30 ]
- LLにおける関数型プログラミングの話という認識が間違ってる
Rubyしか知らないのに他のLLを巻き込むなよ
|

|