プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
799デフォルトの名無しさん
2017/11/09(木) 17:52:29.86ID:hsGRI/CZ ポインタが難解なのではない、C/C++のポインタの実装が難解なのだ
800デフォルトの名無しさん
2017/11/09(木) 17:58:10.14ID:Kt7ooYYm >>798
(f=->{f[]})[]
(f=->{f[]})[]
801デフォルトの名無しさん
2017/11/09(木) 19:19:57.54ID:UInw5/Yz >>799
+1
+1
802デフォルトの名無しさん
2017/11/09(木) 19:47:42.78ID:LcbWCl7/ 平易といわれようが読みやすいんだから仕方がない
def func_recall()
func_recall()
end
proc{func_recall()}.call
def func_recall()
func_recall()
end
proc{func_recall()}.call
803デフォルトの名無しさん
2017/11/09(木) 19:58:50.93ID:EJhAj4oK 昨日と同じように今日も池沼のフリして荒らしてきたか
804デフォルトの名無しさん
2017/11/09(木) 20:10:42.01ID:Zo52Bx6X 荒らし本人は自演がばれてないと本気で思っていそう
今のうちに例のテンプレ貼っとく
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
今のうちに例のテンプレ貼っとく
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
805デフォルトの名無しさん
2017/11/10(金) 21:19:41.48ID:zSzvlQjG new以外のインスタンス生成方法を持ってるクラスって、
派生させても元のクラスのインスタンスを生成するんだね
全てのメソッド書き換えるのがすごく面倒なんだけど何か良い方法ない?
派生させても元のクラスのインスタンスを生成するんだね
全てのメソッド書き換えるのがすごく面倒なんだけど何か良い方法ない?
806デフォルトの名無しさん
2017/11/10(金) 22:05:04.82ID:tus45AjF self.class.new
807デフォルトの名無しさん
2017/11/10(金) 22:51:06.22ID:zSzvlQjG class MyArray < Array
end
p (MyArray[1,2,3] + MyArray[1,2,3]).class
#=>Array
上のコードを見てもらえば分るけど、
Arrayを継承したMyArrayのインスタンス同士の演算を行うと、MyArrayでなくArrayのインスタンスが出力される
全てのメソッドの出力をMyArrayのインスタンスになるようにしたいんだけど、
メソッドを全部書き換える以外に良い方法って何かない?
end
p (MyArray[1,2,3] + MyArray[1,2,3]).class
#=>Array
上のコードを見てもらえば分るけど、
Arrayを継承したMyArrayのインスタンス同士の演算を行うと、MyArrayでなくArrayのインスタンスが出力される
全てのメソッドの出力をMyArrayのインスタンスになるようにしたいんだけど、
メソッドを全部書き換える以外に良い方法って何かない?
808デフォルトの名無しさん
2017/11/10(金) 23:47:08.43ID:fJV6zsPP >>807
ソースコードを見てみるとArrayの派生クラスであってもArrayとして作成されるようになってる
https://github.com/ruby/ruby/blob/trunk/array.c#L3643
度々似たようなやり取りが起こるけど、この件についてはRubyの仕様として、
改善される兆しが見えない (開発者の変更する必要性が薄そう)
正攻法となるとメーリングリストのruby-devに必要性を訴えて改善するくらいになるんじゃないかなあ
ソースコードを見てみるとArrayの派生クラスであってもArrayとして作成されるようになってる
https://github.com/ruby/ruby/blob/trunk/array.c#L3643
度々似たようなやり取りが起こるけど、この件についてはRubyの仕様として、
改善される兆しが見えない (開発者の変更する必要性が薄そう)
正攻法となるとメーリングリストのruby-devに必要性を訴えて改善するくらいになるんじゃないかなあ
809デフォルトの名無しさん
2017/11/11(土) 00:16:49.19ID:JLG7hn9J >>807
ビルトインクラスは継承すんな、てのがあるらしい
ビルトインクラスは継承すんな、てのがあるらしい
810デフォルトの名無しさん
2017/11/11(土) 01:33:08.56ID:XLuIumW0 確かに、出力するオブジェクトのクラスをメソッドの書き換えしないで派生先や派生元に切り替えられたら便利だよな
811デフォルトの名無しさん
2017/11/11(土) 04:45:48.84ID:TdyG/ulQ しかしそもそもArrayとか継承したいクラスだよな
オープンクラスで直接Array自体の挙動を変えてしまうと
何か問題が起こったときに怖い
オープンクラスで直接Array自体の挙動を変えてしまうと
何か問題が起こったときに怖い
812デフォルトの名無しさん
2017/11/11(土) 09:50:02.65ID:5mgMmggv 方法を聞いているんだから感想を言っててどうするよ
一つの方法としてMarshal.dumpとMarshal.load使うってのはどうか?
メソッドで派生元クラスのインスタンスがでてきたら、
そのインスタンスをMarshal.dumpしてクラス部分だけ書き換えてMarshal.loadしてクラスを変えるわけ
一つの方法としてMarshal.dumpとMarshal.load使うってのはどうか?
メソッドで派生元クラスのインスタンスがでてきたら、
そのインスタンスをMarshal.dumpしてクラス部分だけ書き換えてMarshal.loadしてクラスを変えるわけ
813デフォルトの名無しさん
2017/11/11(土) 11:50:45.38ID:AwGKm55U どの言語でも、Array, String などの基本クラスは継承できないし、継承してはならない
prototype.js というライブラリは、基本クラスの動作を上書きして、変更したため、
モンキーパッチと言って、非常に嫌われた
ただし、Rails のような権威が、基本クラスにメソッドを追加するのは、認められている。
これらは、開発保守が継続して行われるため
つまり、個人レベルではダメ
prototype.js というライブラリは、基本クラスの動作を上書きして、変更したため、
モンキーパッチと言って、非常に嫌われた
ただし、Rails のような権威が、基本クラスにメソッドを追加するのは、認められている。
これらは、開発保守が継続して行われるため
つまり、個人レベルではダメ
814デフォルトの名無しさん
2017/11/11(土) 11:54:48.07ID:7DvP3YTX どうでもいいよ
どうせRubyなんか書捨てスクリプトにしか使わないし
どうせRubyなんか書捨てスクリプトにしか使わないし
815デフォルトの名無しさん
2017/11/11(土) 12:07:00.75ID:TdyG/ulQ 配列が使いたいときは代替eachが使いたいから
EnumerableかEnumeratorを継承するとか?
EnumerableかEnumeratorを継承するとか?
816デフォルトの名無しさん
2017/11/11(土) 12:08:40.11ID:v8o/qZh1 + が返すクラスをどうすべきかってだけで、他のメソッドはできるだけ継承したクラスを返すようになってるよ
817デフォルトの名無しさん
2017/11/11(土) 12:34:01.09ID:AwGKm55U 基本クラスは、継承するな!
継承よりも、委譲
継承よりも、委譲
818デフォルトの名無しさん
2017/11/11(土) 14:10:03.21ID:BdEcqbw0 処理系に依ってEnumerable#mapとArray#mapが別実装だったり同じだったりして気持ち悪いから
Array継承するくらいならEnumerableを継承するわ
Array継承するくらいならEnumerableを継承するわ
819デフォルトの名無しさん
2017/11/11(土) 14:21:19.83ID:JLG7hn9J820デフォルトの名無しさん
2017/11/11(土) 15:07:21.47ID:5mgMmggv また荒らしが進行妨害してるのか
方法聞いてるレスだっつってんだろ
毎度毎度、スレの質問無視して自演で持論を語って荒らすのやめろ
ここは初心者用の質問スレだ
方法聞いてるレスだっつってんだろ
毎度毎度、スレの質問無視して自演で持論を語って荒らすのやめろ
ここは初心者用の質問スレだ
821デフォルトの名無しさん
2017/11/11(土) 16:38:25.00ID:XLuIumW0 確かに、聞いてたのは方法だったな
明らかに見当違いなレス返してた荒らしもいたし
ごめん
質問への回答だけどメソッド書き換えせずにという事だから、
const_get、const_setを使ってその場だけクラスを入れ替えるというのは?
今、適当に思いついたので検証してないけど
明らかに見当違いなレス返してた荒らしもいたし
ごめん
質問への回答だけどメソッド書き換えせずにという事だから、
const_get、const_setを使ってその場だけクラスを入れ替えるというのは?
今、適当に思いついたので検証してないけど
822デフォルトの名無しさん
2017/11/11(土) 21:37:18.75ID:05iXsNcy このスレって雑談OKなのに何言ってるんだか
823デフォルトの名無しさん
2017/11/11(土) 22:58:55.05ID:+LVMEIXu では雑談をしましょう
型Aを渡したときは型AAで、型Bを渡したときは型BBで
こういったことが簡単にしたければ、静的型の機能を使うのが一番手軽で自然
なぜなら構文レベルでサポートされてるから
(C++で言うところのテンプレートとか)
なのでRubyに静的型を導入するのが手っ取り早い
結果的にはうまくいかなかったんですが、TypeAnnotationをつけて
頑張ろうっていうのを余暇でやっているらしく
Ruby 3で導入しようとしている型システムは型推論だけでどうにかしようという
アプローチとは別のアプローチ
2010年代のプログラミング言語は型ありなのが当たり前になってきているので
Rubyはだいぶ置いてけぼり感(笑)があります
ですので、コミュニティ内での危機感も高いと思います
型Aを渡したときは型AAで、型Bを渡したときは型BBで
こういったことが簡単にしたければ、静的型の機能を使うのが一番手軽で自然
なぜなら構文レベルでサポートされてるから
(C++で言うところのテンプレートとか)
なのでRubyに静的型を導入するのが手っ取り早い
結果的にはうまくいかなかったんですが、TypeAnnotationをつけて
頑張ろうっていうのを余暇でやっているらしく
Ruby 3で導入しようとしている型システムは型推論だけでどうにかしようという
アプローチとは別のアプローチ
2010年代のプログラミング言語は型ありなのが当たり前になってきているので
Rubyはだいぶ置いてけぼり感(笑)があります
ですので、コミュニティ内での危機感も高いと思います
824デフォルトの名無しさん
2017/11/11(土) 23:03:47.07ID:JLG7hn9J それは雑談ではなくて荒らし
825デフォルトの名無しさん
2017/11/12(日) 00:27:53.41ID:WkrbFi3G 雑談にみせかけた荒らしをずっとやってる奴が何か文句言ってるけど、
初心者の質問スレで質問無視してスレ妨害し続けてたらみんなぶち切れるわな
もう半年以上になるんやで?
初心者の質問スレで質問無視してスレ妨害し続けてたらみんなぶち切れるわな
もう半年以上になるんやで?
826デフォルトの名無しさん
2017/11/12(日) 00:40:27.97ID:Ob05ibl6 質問なんてめったにないでしょ
827デフォルトの名無しさん
2017/11/12(日) 01:01:09.44ID:WkrbFi3G そうやって質問のレスを無視して荒らすから、
みんなぶち切れてるんやで?
いい加減にしとけよ
みんなぶち切れてるんやで?
いい加減にしとけよ
828デフォルトの名無しさん
2017/11/12(日) 01:03:23.41ID:Ob05ibl6 俺は荒らしてないよ。そうやって絡んでくる君のほうが荒らしじゃないの
829デフォルトの名無しさん
2017/11/12(日) 01:08:30.49ID:K4QprXz0 ID:Ob05ibl6
ほぼ毎日、スレに質問ついてるのに何処見てるの?
もしかしておまえが例の荒らし?
テンプレ貼っておくね
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
ほぼ毎日、スレに質問ついてるのに何処見てるの?
もしかしておまえが例の荒らし?
テンプレ貼っておくね
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
830デフォルトの名無しさん
2017/11/12(日) 01:14:32.30ID:Ob05ibl6 だから俺じゃないってw
俺普通に質問に答えてやったりしてるし
俺普通に質問に答えてやったりしてるし
831デフォルトの名無しさん
2017/11/12(日) 01:16:43.11ID:WkrbFi3G >質問なんてめったにないでしょ
ってどのスレの話?
ってどのスレの話?
832デフォルトの名無しさん
2017/11/12(日) 01:19:01.73ID:Ob05ibl6833デフォルトの名無しさん
2017/11/12(日) 01:28:26.85ID:pqrFAwxv834デフォルトの名無しさん
2017/11/12(日) 12:29:55.19ID:qqn9BEpx 質問者がいるんだから雑談やめろとかアホだろ
質問に対する回答以外全部荒らしってどういう事だよ
それに回答者がアンカつければいいだけじゃん
謝辞どころか〆宣言すらない質問者がどれだけいることやら
質問に対する回答以外全部荒らしってどういう事だよ
それに回答者がアンカつければいいだけじゃん
謝辞どころか〆宣言すらない質問者がどれだけいることやら
835デフォルトの名無しさん
2017/11/12(日) 12:35:34.52ID:WkrbFi3G ずっとこのスレを荒らしてる奴がいるんだが
頭大丈夫?
頭大丈夫?
836デフォルトの名無しさん
2017/11/12(日) 13:50:01.60ID:9KdAqRKN 静的型のほうがさ宇ぐれてる云々言う粘着してる奴は確かにいるけど
それ以外のささいな会話も荒らし認定ってどういうことよ
それ以外のささいな会話も荒らし認定ってどういうことよ
837デフォルトの名無しさん
2017/11/12(日) 15:17:44.54ID:SkwCxk0Z 雑談に似せた荒らしを行うから荒らし認定されるんじゃない?
荒らし行為やスレの妨害じゃないなら誰も文句なんて言わないよ
そもそも、この期に及んで質問なんてめったに無いとかレスつけたり、
何ヶ月も荒らされてる事を無かった事にする奴って荒らし本人じゃないのか?
荒らし行為やスレの妨害じゃないなら誰も文句なんて言わないよ
そもそも、この期に及んで質問なんてめったに無いとかレスつけたり、
何ヶ月も荒らされてる事を無かった事にする奴って荒らし本人じゃないのか?
838デフォルトの名無しさん
2017/11/12(日) 15:34:09.85ID:GrP4UM5B839デフォルトの名無しさん
2017/11/13(月) 11:16:26.32ID:9i4StzNN rubyのメソッドチェーンがよくわからない
あとフックかけられるポイントも
メソッド呼び終わった直後にフック掛ける方法ってある?
あとフックかけられるポイントも
メソッド呼び終わった直後にフック掛ける方法ってある?
840デフォルトの名無しさん
2017/11/13(月) 20:26:44.92ID:NOdl0XYl >>839
トレースポイントというものがある
https://docs.ruby-lang.org/ja/latest/class/TracePoint.html
TracePoint.trace(:return, :c_return) do |tp|
p tp.return_value
end
"A".downcase.upcase.upcase!
# => "a" => "A" => nil
トレースポイントというものがある
https://docs.ruby-lang.org/ja/latest/class/TracePoint.html
TracePoint.trace(:return, :c_return) do |tp|
p tp.return_value
end
"A".downcase.upcase.upcase!
# => "a" => "A" => nil
841デフォルトの名無しさん
2017/11/13(月) 23:44:35.19ID:9i4StzNN おおー、これは便利だ
ありがとう
ありがとう
842デフォルトの名無しさん
2017/11/13(月) 23:58:39.44ID:NOdl0XYl 追記
全てのあらゆるメソッドに介入するため、
if tp.path == __FILE__ したり、
if tp.method_id == :method_name したりして範囲を絞ると見やすくなる
他には自家製クラス・モジュールであればprepend使って面白おかしくすることも可能
全てのあらゆるメソッドに介入するため、
if tp.path == __FILE__ したり、
if tp.method_id == :method_name したりして範囲を絞ると見やすくなる
他には自家製クラス・モジュールであればprepend使って面白おかしくすることも可能
843デフォルトの名無しさん
2017/11/14(火) 19:27:47.47ID:hugtgo3r コードゴルフで1000までの素数を標準出力に出力ってのをやってるけど
60文字が限界だ。誰か画期的なの教えてくれ。
60文字が限界だ。誰か画期的なの教えてくれ。
844デフォルトの名無しさん
2017/11/14(火) 20:35:46.66ID:43++cTdw 過去スレには結構そういうのが載ってると思うけど参考にしてみたら?
今現在はあんまり流行っていない、
というかコードをスレに書かないと誰も乗ってこないと思う
あと、変わったお題ならプチ盛り上ると思う
今現在はあんまり流行っていない、
というかコードをスレに書かないと誰も乗ってこないと思う
あと、変わったお題ならプチ盛り上ると思う
845デフォルトの名無しさん
2017/11/14(火) 20:39:19.62ID:yEmE0LhS 50B
a=[*2..1e3]
p a.each{|e|a.reject!{|v|v!=e&&v%e<1}}
a=[*2..1e3]
p a.each{|e|a.reject!{|v|v!=e&&v%e<1}}
846デフォルトの名無しさん
2017/11/14(火) 20:45:40.97ID:yEmE0LhS 47B 切りがないのでこれで終わりにする
p (a=*2..1e3).each{|e|a.reject!{|v|v>e&&v%e<1}}
p (a=*2..1e3).each{|e|a.reject!{|v|v>e&&v%e<1}}
847デフォルトの名無しさん
2017/11/14(火) 20:54:13.19ID:yEmE0LhS 45B これでほんとにラスト
p (a=*2..1e3).each{|e|a-=(2..31).map{|v|v*e}}
p (a=*2..1e3).each{|e|a-=(2..31).map{|v|v*e}}
848デフォルトの名無しさん
2017/11/14(火) 20:54:58.38ID:hugtgo3r おお流石さらっと回答が。ありがとうございます。俺のぼろ臭いエラトステネスもどきとは一味違いますね。
849デフォルトの名無しさん
2017/11/14(火) 21:04:49.82ID:yEmE0LhS ついでだがPrimeクラスを使ってもいいなら33B
#!ruby -rprime
p *Prime.each(1e3)
#!ruby -rprime
p *Prime.each(1e3)
850デフォルトの名無しさん
2017/11/15(水) 21:17:20.80ID:V8OOXL+L 「Rubyのpublic/private/protectedはaccess controlとしては壊れている」と言われたが、その答えは「確かに。access controlとして作ってないからな」というものであった。
851デフォルトの名無しさん
2017/11/15(水) 21:18:26.53ID:V8OOXL+L publicとprivateも壊れてるんですか?
852デフォルトの名無しさん
2017/11/15(水) 21:18:44.62ID:V8OOXL+L 「privateはsendとかでアクセスできるし、サブクラスからも見える」だそうです。確かにそうだ。publicは壊れていないと思いますけど、他2つが(access control として)壊れていたら、そもそも指定できる必要はないとは言えそう。
853デフォルトの名無しさん
2017/11/15(水) 21:55:17.62ID:PrGhGlG4 なんだこの自演
854デフォルトの名無しさん
2017/11/15(水) 22:31:56.17ID:V8OOXL+L 御大のtwitterの会話を貼り付けただけ
855デフォルトの名無しさん
2017/11/15(水) 22:32:21.95ID:V8OOXL+L すぐ自演とか頭悪ポw
856デフォルトの名無しさん
2017/11/16(木) 00:12:57.76ID:EjNhewu+ 自演と言うよりは
引用の仕方を知らないんだろうね
引用の仕方を知らないんだろうね
857デフォルトの名無しさん
2017/11/16(木) 06:47:18.22ID:0Chmg9DF この反応はやはり荒らしか
858デフォルトの名無しさん
2017/11/16(木) 14:52:27.31ID:L3BAWltd 自演失敗とな?
よし、晒し上げるか
よし、晒し上げるか
859デフォルトの名無しさん
2017/11/17(金) 21:40:30.22ID:+zjghEIw sliceで負数を指定したときの挙動の解釈が合ってるか教えてくれ
例えばnに12345って文字列があったとして
p n.slice(0,1)
p n.slice(-1,0)
ってやると1と5が出力される
つまり、絶対値が正数の負数が文字列の後ろから順々に対応してるって解釈で合ってる?
例えばnに12345って文字列があったとして
p n.slice(0,1)
p n.slice(-1,0)
ってやると1と5が出力される
つまり、絶対値が正数の負数が文字列の後ろから順々に対応してるって解釈で合ってる?
860デフォルトの名無しさん
2017/11/17(金) 21:56:30.56ID:IylgmQJ2 >>859
あってる
StringだけじゃなくてArrayでも同じ
ちなみに二つの整数値を与えるのではなく範囲で終わりを示す方法もよく使われる
p "12345".slice(1..-1) # => "2345" # 二つのピリオド
p "12345".slice(1...-1) # => "234" # 三つのピリオド
p "12345".slice(1..-2) # => "234"
p "12345".slice(1, -1) # => nil # 二つの引数
sliceだけじゃなくて[]でも同様に使う事ができる
あってる
StringだけじゃなくてArrayでも同じ
ちなみに二つの整数値を与えるのではなく範囲で終わりを示す方法もよく使われる
p "12345".slice(1..-1) # => "2345" # 二つのピリオド
p "12345".slice(1...-1) # => "234" # 三つのピリオド
p "12345".slice(1..-2) # => "234"
p "12345".slice(1, -1) # => nil # 二つの引数
sliceだけじゃなくて[]でも同様に使う事ができる
861デフォルトの名無しさん
2017/11/17(金) 21:57:12.32ID:5DUWZGJy (-6..6).each{|i|p n[i]}と試せばすぐにわかることをなぜ人に聞くのか
862デフォルトの名無しさん
2017/11/17(金) 21:58:54.04ID:5DUWZGJy というかp n.slice(-1,0)は""じゃないのか
863デフォルトの名無しさん
2017/11/17(金) 22:22:53.66ID:+zjghEIw864デフォルトの名無しさん
2017/11/17(金) 22:48:06.98ID:5DUWZGJy866デフォルトの名無しさん
2017/11/17(金) 23:17:48.28ID:g+LRYPuD イミュータブルの話していい?
記憶違いかもしれないけど、なんか将来のRubyでStringがイミュータブルになるって話だかを小耳にしたんだけど、どういうこと?
今のStringって書き換える操作に見えても実は別の生成したStringへ参照を換えているだけだで、
イミュータブルだと思ってたんだけど違うの?
記憶違いかもしれないけど、なんか将来のRubyでStringがイミュータブルになるって話だかを小耳にしたんだけど、どういうこと?
今のStringって書き換える操作に見えても実は別の生成したStringへ参照を換えているだけだで、
イミュータブルだと思ってたんだけど違うの?
867デフォルトの名無しさん
2017/11/17(金) 23:27:32.19ID:2lBbqhr3868デフォルトの名無しさん
2017/11/17(金) 23:33:09.94ID:urhgHz9b >>867
ソースプリーズ
ソースプリーズ
869デフォルトの名無しさん
2017/11/17(金) 23:44:19.35ID:fWRDFZO8 現実的に考えて、今のRuby界にPython3ショック並の非互換を乗り越える体力はない
そもそも3がリリースされる日が本当に来るのかは怪しいけど、もし出てもRails系には完全スルーじゃないかな
静的型もメタプログラミング全開のRailsに役立つようなものにはならないだろうし
そもそも3がリリースされる日が本当に来るのかは怪しいけど、もし出てもRails系には完全スルーじゃないかな
静的型もメタプログラミング全開のRailsに役立つようなものにはならないだろうし
870デフォルトの名無しさん
2017/11/17(金) 23:56:41.31ID:IylgmQJ2 >>866
今はリテラル文字列のオブジェクトが別だけど
ruby3になったらおなじオブジェクトになるって事
今のrubyでもコマンドラインオプションやソースコードのマジックコメントで挙動を確認できる
$ ruby24 -e '5.times{ p "abcdefg".object_id }' 17208605440
17208605280
17208605200
17208605120
17208605020
$ ruby24 --enable frozen-string-literal -e '5.times{ p "abcdefg".object_id }'
17208605640
17208605640
17208605640
17208605640
17208605640
rubyの実装レベルの話だと内部で共有文字列オブジェクトがcopy on writeされるようになってるだけ
ruby3になると共有文字列オブジェクトが直接表に出てくるってことになるんだろうね
今はリテラル文字列のオブジェクトが別だけど
ruby3になったらおなじオブジェクトになるって事
今のrubyでもコマンドラインオプションやソースコードのマジックコメントで挙動を確認できる
$ ruby24 -e '5.times{ p "abcdefg".object_id }' 17208605440
17208605280
17208605200
17208605120
17208605020
$ ruby24 --enable frozen-string-literal -e '5.times{ p "abcdefg".object_id }'
17208605640
17208605640
17208605640
17208605640
17208605640
rubyの実装レベルの話だと内部で共有文字列オブジェクトがcopy on writeされるようになってるだけ
ruby3になると共有文字列オブジェクトが直接表に出てくるってことになるんだろうね
871デフォルトの名無しさん
2017/11/18(土) 00:42:51.61ID:llwTwelI 一番の違いは文字がイミュータブルになるってことだろ
だからcopy on writeする必要もない
writeできないんだからcopyも不要
だからcopy on writeする必要もない
writeできないんだからcopyも不要
872デフォルトの名無しさん
2017/11/18(土) 00:49:48.52ID:sDELvJVN873デフォルトの名無しさん
2017/11/18(土) 00:50:21.77ID:18l+ABsp874デフォルトの名無しさん
2017/11/18(土) 00:55:46.00ID:pAjRC1cg ruby3にショックを起こしそうな変更が大してなさそうな所がショックなのではないだろうか
文字列といえば、SHARABLE_MIDDLE_SUBSTRINGはruby3で標準になるのか誰か知らんか
文字列といえば、SHARABLE_MIDDLE_SUBSTRINGはruby3で標準になるのか誰か知らんか
875デフォルトの名無しさん
2017/11/18(土) 01:01:26.66ID:sDELvJVN876デフォルトの名無しさん
2017/11/18(土) 02:23:57.54ID:v7CgBLN2 >C extension
詳細プリーズ
詳細プリーズ
877デフォルトの名無しさん
2017/11/18(土) 03:03:45.56ID:pAjRC1cg 文字列のデータがヌル終端文字列とは限らないので、char*取る時はStringValueCStr()使うとか
878デフォルトの名無しさん
2017/11/18(土) 04:44:28.98ID:LQXdQwI7 たのしいruby読みとおしたけどあんまたのしくない
879デフォルトの名無しさん
2017/11/18(土) 06:34:47.32ID:O/cG1rmo プログラミングが楽しいんであって
本で勉強するのが楽しいわけじゃないからな
本で勉強するのが楽しいわけじゃないからな
880デフォルトの名無しさん
2017/11/18(土) 16:31:16.15ID:6foiYhRZ 関数型言語 Elixir からの影響
文字列が、immutable なら、安全で効率的
文字列が、immutable なら、安全で効率的
881デフォルトの名無しさん
2017/11/18(土) 21:45:21.11ID:W95R0KgI >>866
Rubyで文字列をfreezeしまくるのが流行ってて
なんでかって、最適化のため
> http://d.hatena.ne.jp/ku-ma-me/20151004/p1
> 2 行目は 1 行目の 2 倍くらい速いです。
だもんで、freeze付けまくるっていう手動の最適化が蔓延していて
(二倍も速くなるならせざるを得ない)
なにかCとかアセンブラでシコシコ最適化していた90年代の香りがする
これもRubyが意味もなく遅すぎるのが原因で
主要言語と比べて30〜50倍ぐらい遅いので、3.0GHzの最新CPUで走らせても
実質60〜100MHzの激遅化石CPUで走らせていることになるので
まぁ90年代といわれれば、ちょうどそのあたりかもしれない
> https://qiita.com/sue738/items/6c312672cecd9e0400a2
あの頃はちょっとの速度差がクリティカルで、何か懐かしいね
Rubyはコンピュータに出来ることはコンピュータにやらせる主義なので
プログラマに手動の最適化を強いるし、型チェックもプログラマにやらせる
何か矛盾したことを言っているように思えるが
言語開発者の視点に立って、全力で手抜きして言語処理系を作ることを考えると
別に間違ったことは言ってない
幽遊白書風に言うと、仙水の言う「俺達七人」に君らは入ってないってことだな
Rubyで文字列をfreezeしまくるのが流行ってて
なんでかって、最適化のため
> http://d.hatena.ne.jp/ku-ma-me/20151004/p1
> 2 行目は 1 行目の 2 倍くらい速いです。
だもんで、freeze付けまくるっていう手動の最適化が蔓延していて
(二倍も速くなるならせざるを得ない)
なにかCとかアセンブラでシコシコ最適化していた90年代の香りがする
これもRubyが意味もなく遅すぎるのが原因で
主要言語と比べて30〜50倍ぐらい遅いので、3.0GHzの最新CPUで走らせても
実質60〜100MHzの激遅化石CPUで走らせていることになるので
まぁ90年代といわれれば、ちょうどそのあたりかもしれない
> https://qiita.com/sue738/items/6c312672cecd9e0400a2
あの頃はちょっとの速度差がクリティカルで、何か懐かしいね
Rubyはコンピュータに出来ることはコンピュータにやらせる主義なので
プログラマに手動の最適化を強いるし、型チェックもプログラマにやらせる
何か矛盾したことを言っているように思えるが
言語開発者の視点に立って、全力で手抜きして言語処理系を作ることを考えると
別に間違ったことは言ってない
幽遊白書風に言うと、仙水の言う「俺達七人」に君らは入ってないってことだな
882デフォルトの名無しさん
2017/11/18(土) 21:46:45.02ID:18l+ABsp また粘着君か
883デフォルトの名無しさん
2017/11/18(土) 22:36:14.71ID:fA1Yzd5Y 早くしたいなら言語変えろよ
JavaでもC#でもGoでもさ
JavaでもC#でもGoでもさ
884デフォルトの名無しさん
2017/11/18(土) 23:34:36.39ID:kadopebp 腕振り回すのが早いからって、野球選手にはなれないんだけどね。
885デフォルトの名無しさん
2017/11/18(土) 23:41:43.75ID:W95R0KgI 速度が必要なら他の言語を使え、と言いつつも
巷ではfreeze祭り開催中
(事実それが理由で3.0で検討されてるわけで)
やはりちょっとでも早くしたいというね
遅いといっても限度があるんだろうな
1.2倍とか1.5倍とかなら我慢できるが
30〜50倍は別次元というか、もはや別物
折角3.0GHzの最新CPUを使ってるのに
100MHz以下になるとはねトホホ
プログラムは遅くて困ることは有っても速くて困ることはないわけだが
遅くなった原因が、今となっては何のメリットもない動的型を採用したことと
コンパイラの最適化の手抜き、だからな
ちっとも利用者視点じゃなく、単に言語を作る側の手間の都合なわけだが
教祖様よろしく巧みに隠して言いくるめてきたが、もうウソがばれて限界ってところかな
巷ではfreeze祭り開催中
(事実それが理由で3.0で検討されてるわけで)
やはりちょっとでも早くしたいというね
遅いといっても限度があるんだろうな
1.2倍とか1.5倍とかなら我慢できるが
30〜50倍は別次元というか、もはや別物
折角3.0GHzの最新CPUを使ってるのに
100MHz以下になるとはねトホホ
プログラムは遅くて困ることは有っても速くて困ることはないわけだが
遅くなった原因が、今となっては何のメリットもない動的型を採用したことと
コンパイラの最適化の手抜き、だからな
ちっとも利用者視点じゃなく、単に言語を作る側の手間の都合なわけだが
教祖様よろしく巧みに隠して言いくるめてきたが、もうウソがばれて限界ってところかな
886デフォルトの名無しさん
2017/11/18(土) 23:56:34.49ID:W95R0KgI >腕振り回すのが早いからって、野球選手にはなれないんだけどね。
さすがに意味不明すぎて吹いた
他の主要言語は、腕振り回しているだけだとも?
随分だな
さすがに意味不明すぎて吹いた
他の主要言語は、腕振り回しているだけだとも?
随分だな
887デフォルトの名無しさん
2017/11/19(日) 00:08:39.46ID:ViJ+9/xP ちょっとどころか3倍速くしたいのがruby3だ
888デフォルトの名無しさん
2017/11/19(日) 00:09:28.92ID:ico5wL+/ >>885
じゃぁアセンブラ使っておけば?
じゃぁアセンブラ使っておけば?
889デフォルトの名無しさん
2017/11/19(日) 00:30:02.83ID:udvNJGPu 今やC/C++、Java、C#などの主要言語はコンパイラの最適化が鬼だから
常識的には人間がアセンブラで書くより速いわけ
だから書くなら
じゃぁC/C++、Java、C#使っておけば?
だし、言われるまでもなく世の中そうなってて
んーだから何?って感じなんだが
なんというか・・・
速度が速い代わりに使い勝手が悪い、だの
使い勝手が良い代わりに速度が遅い、だの
そういう厨が好みそうなマンガの設定みたいなトレードオフは発生してない
非常だわなぁ
では全てにおいてメリットが無い方式なら
いったい誰が作って、誰が支持するのかというと
これがなかなか北朝鮮のような国があったりもするので
存在していることだけを理由に正しいとは言えない
常識的には人間がアセンブラで書くより速いわけ
だから書くなら
じゃぁC/C++、Java、C#使っておけば?
だし、言われるまでもなく世の中そうなってて
んーだから何?って感じなんだが
なんというか・・・
速度が速い代わりに使い勝手が悪い、だの
使い勝手が良い代わりに速度が遅い、だの
そういう厨が好みそうなマンガの設定みたいなトレードオフは発生してない
非常だわなぁ
では全てにおいてメリットが無い方式なら
いったい誰が作って、誰が支持するのかというと
これがなかなか北朝鮮のような国があったりもするので
存在していることだけを理由に正しいとは言えない
890デフォルトの名無しさん
2017/11/19(日) 00:45:07.64ID:ico5wL+/ >>889
アホか?
C++がマジで使いやすくて速いとか思ってるなら、一回脳みそ洗濯機にかけた方がいいぞ?
C++は速さのために色々と犠牲にした言語だということを理解できないならエンジニアとして
致命的欠陥があると言わざるをえない
アホか?
C++がマジで使いやすくて速いとか思ってるなら、一回脳みそ洗濯機にかけた方がいいぞ?
C++は速さのために色々と犠牲にした言語だということを理解できないならエンジニアとして
致命的欠陥があると言わざるをえない
891デフォルトの名無しさん
2017/11/19(日) 00:50:56.77ID:ANnOsUYp Javaや.NETは起動時にコンパイルしてるから
実行速度ではなく起動速度が遅い
そしてRailsも起動が遅い。こっちは理由が少し
異なっていて動的型だからコンパイルが不要なんだが
読み込むファイルが多くなりすぎて起動速度が遅い
実行速度ではなく起動速度が遅い
そしてRailsも起動が遅い。こっちは理由が少し
異なっていて動的型だからコンパイルが不要なんだが
読み込むファイルが多くなりすぎて起動速度が遅い
892デフォルトの名無しさん
2017/11/19(日) 02:43:18.14ID:tAVjO9Xo いくら早くたってC++は複雑で読み書きしにくい
Rubyは実行速度より開発速度に振ってるから
Rubyは実行速度より開発速度に振ってるから
893デフォルトの名無しさん
2017/11/19(日) 04:19:06.14ID:/3rRHq6p894デフォルトの名無しさん
2017/11/19(日) 08:33:08.93ID:RgqRbH7C >>890
C++11以降はRubyよりはるかに使いやすい。
C++11以降はRubyよりはるかに使いやすい。
895デフォルトの名無しさん
2017/11/19(日) 08:55:34.34ID:kYPwLJsc スタートアップにはRailsが好まれるというのも眉唾だよな
ソースの量なんて最初のうちはすぐに増えるもんだし、事業が軌道に乗るまでは大きな変更も多いはず
とりあえず今手っ取り早く動くものを作りたいからという理由でRailsを選ぶような奴がテストなんか書いてるわけないし、
テストがないと変更が困難になるという動的型の性質がネックになるのは意外とすぐなんじゃないかという気がする
ソースの量なんて最初のうちはすぐに増えるもんだし、事業が軌道に乗るまでは大きな変更も多いはず
とりあえず今手っ取り早く動くものを作りたいからという理由でRailsを選ぶような奴がテストなんか書いてるわけないし、
テストがないと変更が困難になるという動的型の性質がネックになるのは意外とすぐなんじゃないかという気がする
896デフォルトの名無しさん
2017/11/19(日) 09:42:25.92ID:IcfiaN/i C#は「とても」書きやすいかといわれるとふんぬうううううって感じだ
書きやすいようにするモダンな構造はたくさん含まれてて文法未来も明るいが、全体としてはRubyのほうがまだいいと思う
今のところRubyよりいいなと思ってるのはKotlin+IntelliJ
Javaで書かなければいけない部分がもっと減れば書きやす四天王に入ると思うのでどんどんKotlin部分増やして欲しい
書きやすいようにするモダンな構造はたくさん含まれてて文法未来も明るいが、全体としてはRubyのほうがまだいいと思う
今のところRubyよりいいなと思ってるのはKotlin+IntelliJ
Javaで書かなければいけない部分がもっと減れば書きやす四天王に入ると思うのでどんどんKotlin部分増やして欲しい
897デフォルトの名無しさん
2017/11/19(日) 10:51:15.62ID:/3rRHq6p C#は、IDEのサポートが前提だからな。
898デフォルトの名無しさん
2017/11/19(日) 11:10:12.09ID:tAVjO9Xo >書きやす四天王
面白そうだからみんなで書いてみれば?
オレの場合書きやすいのはRuby一強で
二位以下はPythonとかLLが団子状態で並ぶけど
面白そうだからみんなで書いてみれば?
オレの場合書きやすいのはRuby一強で
二位以下はPythonとかLLが団子状態で並ぶけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の台湾有事答弁「問題ない」50% 「問題があったと思う」25%を大きく上回る 毎日新聞世論調査 [尺アジ★]
- 中国の王毅外相、高市首相の台湾巡る答弁は「レッドラインを越えた」 [どどん★]
- 【小学校24歳男性教師】酒に酔って車盗み、海にダイブ、ズブ濡れで車乗り捨て、別の車で朝まで爆睡「仕事があり早く帰りたかった」北海道 [ぐれ★]
- 【相撲】九州場所千秋楽 関脇・安青錦が初優勝 優勝決定戦で豊昇龍破る 所要14場所は史上2位のスピード記録 [ニーニーφ★]
- 【コメ】やっぱり進次郎のほうがマシ…「コメの値下げは無理」と言い張る農林族の鈴木農水大臣 [ぐれ★]
- 【外交】中国王毅外相「日本軍国主義の復活を決して許さない」★2 [1ゲットロボ★]
- @@@令和七年大相撲九州場所 vol.13@@@
- 巨専】ジャイアンツファンフェスタ2025
- とらせん 2
- 京都競馬4回6日目マイルチャンピオンシップ
- 【DAZN】フォーミュラGP【F1 2 3 SF P】Lap1809
- 競輪実況★1607
- 【実況】博衣こよりのえちえちホロ食べず嫌い王🧪
- 【実況】博衣こよりのえちえちホロ食べず嫌い王🧪 ★2
- 【悲報】ツイッター愛国アカウント、続々と外国産だということが判明 つまり愛国者は外国人ということ? ★2 [158478931]
- 【んな専🏡】んなたん(・o・🍬)アソビ大全配信実況スレ🏰【ホロライブ▶】
- 高市早苗、G20会場で浮いてしまう 上目遣いで他国首脳にアピールするも効果ゼロ [165981677]
- 【高市速報】日本女性の平均寿命、40年連続世界1位👑に輝くwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww [316257979]
