プログラミング言語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
レス数が900を超えています。1000を超えると表示できなくなるよ。
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
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が団子状態で並ぶけど
899デフォルトの名無しさん
2017/11/19(日) 11:42:50.02ID:udvNJGPu いや、洗脳されてる(というより確信犯←本来の意味でも誤用の意味でも)人の意見は
誰も興味ないというか常に無視されるというか
社民党が何か言っててもみんな聞き流してるわけで
大人な人達の言うところの民主主義というか
そもそも数に入ってないから無視してよいという暗黙の鬼畜現象
誰も興味ないというか常に無視されるというか
社民党が何か言っててもみんな聞き流してるわけで
大人な人達の言うところの民主主義というか
そもそも数に入ってないから無視してよいという暗黙の鬼畜現象
900デフォルトの名無しさん
2017/11/19(日) 12:15:25.95ID:ico5wL+/901デフォルトの名無しさん
2017/11/19(日) 12:24:31.26ID:lEYmgXHF 同じ事させるなら、「実行速度」がRubyより早い言語が有るのは当たり前。
Rubyは例えばCで書いた巨大ライブラリ・ツールとも言える訳だから。
Rubyは例えばCで書いた巨大ライブラリ・ツールとも言える訳だから。
902デフォルトの名無しさん
2017/11/19(日) 13:37:32.97ID:udvNJGPu ↑唐突になんだ?
903デフォルトの名無しさん
2017/11/19(日) 14:12:32.54ID:ojBPgPKj 話を変えるけど、
mswin32版のRuby2.4インスコして、今は懐かしきRDEで何か出来ないかハックしてんだけど普通に動くなコレ
動かない部分は、debug2から経由してrde.dllかrde.soを呼ぶデバッグ機能の辺りで、
バイナリについてきたこれらのファイルをロードできないのが原因だけど、
RDE1.1.1バイナリや1.0.1ソース拾えたんで何とかなりそう
mswin32版のRuby2.4インスコして、今は懐かしきRDEで何か出来ないかハックしてんだけど普通に動くなコレ
動かない部分は、debug2から経由してrde.dllかrde.soを呼ぶデバッグ機能の辺りで、
バイナリについてきたこれらのファイルをロードできないのが原因だけど、
RDE1.1.1バイナリや1.0.1ソース拾えたんで何とかなりそう
904デフォルトの名無しさん
2017/11/19(日) 14:26:48.86ID:GIoVTHnu RDEはすごく使いやすかったな
1.9や2.x以降も対応してくれるなら今でも使いたい
文字列コード関係とか問題ないの?
1.9や2.x以降も対応してくれるなら今でも使いたい
文字列コード関係とか問題ないの?
905デフォルトの名無しさん
2017/11/19(日) 15:34:37.97ID:ojBPgPKj >>904
特に問題ない
というかRubyの多言語化はCSI方式と呼ばれるもので、
ruby内部では種々の文字コードを認識せずバイナリとして扱い、指定した文字コード用のメソッドでバイナリに処理してるだけだから
マジックコメントでUTF-8指定して(2.x以降はデフォルトがUTF-8だから指定しなくても良い)、RDEもUTF8N指定しとけばOK
後、RDEについてるrde_export.rbみてたらちょっとした書き換えで2.4用の入力補完データを自動で出せるようになってる
RDEハック中だから、他にも聞きたいことあったら言ってくれ
特に問題ない
というかRubyの多言語化はCSI方式と呼ばれるもので、
ruby内部では種々の文字コードを認識せずバイナリとして扱い、指定した文字コード用のメソッドでバイナリに処理してるだけだから
マジックコメントでUTF-8指定して(2.x以降はデフォルトがUTF-8だから指定しなくても良い)、RDEもUTF8N指定しとけばOK
後、RDEについてるrde_export.rbみてたらちょっとした書き換えで2.4用の入力補完データを自動で出せるようになってる
RDEハック中だから、他にも聞きたいことあったら言ってくれ
906デフォルトの名無しさん
2017/11/19(日) 19:59:54.94ID:ojBPgPKj 問題は2.4用のrde.dllが無いことだからmswin32ruby1.8用のrde.dllをバイナリ改造して
msvcrt-ruby18.dllのロードをmsvcr100-ruby240.dllに書き換えて、
メソッドあわせれば楽に出来るんじゃないかと思いついたんだけど躓いた
msvcr100-ruby240.dllをPEviewで確認したらrb_str_new2が無いじゃないか
こういった内部に詳しい人、誰かいない?
msvcrt-ruby18.dllのロードをmsvcr100-ruby240.dllに書き換えて、
メソッドあわせれば楽に出来るんじゃないかと思いついたんだけど躓いた
msvcr100-ruby240.dllをPEviewで確認したらrb_str_new2が無いじゃないか
こういった内部に詳しい人、誰かいない?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 高市総理の“失言”を引き出したはずがSNSで総スカン ビジネスモデルが崩壊した「立憲民主党」の迷走★2 [♪♪♪★]
- Z世代、35%が週休3日希望 「無理せず・安定」に重き 民間調査 [♪♪♪★]
- 【速報】 中国国営新聞社 「日本はすでに代価を支払った」 中国SNSで1位に 高市総理の発言めぐり ★4 [お断り★]
- 斎藤元彦・兵庫県知事、関西学院大学での「講演」予定に波紋 法学部長がコメント「教授会は承認せず」「利用されているようで不愉快」 [ぐれ★]
- 石破前首相 おこめ券配布に「その原資は何?国民の税金でしょう」「リーズナブルな価格でお米が手に入るようにすることの方が大事」 [muffin★]
- 香港、日本側と交流停止 首相発言受け中国に追従 [蚤の市★]
- 【U-NEXT】プレミアリーグ総合 ★36
- こいせん 全レス転載禁止 SHAKARIKI
- とらせん IP
- 西武線 4
- 【ATP】テニス総合実況スレ2025 Part 213【WTA】
- 女子サッカー総合 実況 ★50
- 高市さんのG20遅刻問題洒落にならないことになってた、日本抜きで全会一致で中国寄りの首脳宣言が採択されてそのまま有無を言わさず閉幕 [709039863]
- おほぉ///
- クジラ食べてみたい!!!!!!!!!!!!!
- 【朗報】ボディビル大会で優勝した日本人、ボディが凄すぎて雑コラみたいになってしまう [731544683]
- 深夜だし酒飲みながら怖い話、未解決事件でも語る?
- 【日本一決定戦】静岡県民ちょっと来いkskすっぞ【富士山は静岡】
