GitHub で Web だけで Pull Request を投げるには

あらすじ

  1. typo の修正とかでいちいちローカルにリポジトリ取ってくるのだるいよね。
  2. GitHub って Web でファイル編集できて便利だね。
  3. 油断してると master で編集しちゃうけど、master ブランチから Pull Request とか小学生でも許されないよね
  4. どうやってブランチを作ればいいんだろう?

まとめ

結論としては、以下の様な手順になります。

  1. fork する
  2. ブランチ選択画面で、修正の元となるブランチに移動する
  3. 再びブランチ選択画面で、入力欄におもむろに新しいブランチ名を入れて Enter おす
  4. 新しいブランチができるので、Web から編集してコミット
  5. Pull Request 投げる

まとめ2

ヘルプがあったらしい

Rubyのバージョンについて

前提

Ruby 開発陣がブランチのメンテナンスに割けるリソースは限界がある。具体的には2本 (+trunk) が限界。

現状

1.9.3 と 2.0.0 がメンテナンスされている。年末に 2.1.0 が増える。

利用者のニーズ

  1. セキュリティ修正のみのブランチが欲しい (debian や heroku など)
  2. バグ修正のみのブランチが欲しい (普通の開発者)
  3. バグ修正と軽微な機能追加のみのブランチが欲しい (ちょっと進んだ開発者)
  4. そこそこ互換性を保ったブランチが欲しい (先進的な開発者)
  5. 互換性なんてどうでもいいぜヒャッハー (Rubyコミッタ)

現在は、安定版ブランチが 2.、trunk が 5. である。

よくある要望

1. や 3. なブランチが欲しい

想定される返答

金を出すか自分でやってくれ(ただし、一度始めたら数年程度は継続して頂きたい)

はてぶへの返信

gfx: 2 (バグ修正のみのブランチ) をやめて 1(セキュリティ修正のみのブランチ)にするというのはありな気がする

https://www.ruby-lang.org/ja/news/2013/06/27/ruby-2-0-0-p247-is-released/ あたりを参照しつつ考えていただきたいのですが、経験上直らないと一部の人が生きるのがつらいレベルのバグはちらほらあるような記憶があるんですよねぇ。なので、1.+5.はいろいろとつらいんじゃないかなぁ。

アイディアレベルでは1.+3.+5.にしつつ、LTS導入みたいな話もあるんですが、このレベルの議論は皆様もにもお知恵を出していただいて、じっくり考えたいところですね。

Ruby開発者会議20130727

というわけで、Ruby 2.1 に向けて DevelopersMeeting20130727Japan をしたのです。
開発者会議で何をするかというと、RubyKaigi での見世物の通り、みんなが集まって色んなトピックに対してああでもないこうでもないと言い合うわけです。するとあら不思議、チケットで議論していた時はなかなか進まなかった話が、あっという間に reject されます。
また、三人寄れば文殊の知恵とはよく言ったもので、集まって議論していると保留間違いなしな雰囲気漂うラディカルな提案が、ブレイクスルー的な発想によって合意を得られることがたまにあります。今回で言えば分数リテラルがそうで、1/2r という表記の発想と虚数リテラルへのコンボは会議のハイライトでした。
次回は DevelopersMeeting20130831Japan なので、また大きな進展があるといいなぁ。
まとめ: Ruby 2.1 は電卓がはかどる

追記

ko1: 個人的にはキーワード引数の別名を蹴って binding.local_variable_get(:if) でいける、としたことがハイライト

議事録にも片鱗がありますが、コレに至るまでに色々な案が出ては却下されていき、収束していくスピード感がよかったですね。

観察日記 2013-02-20

2月も20日になるともう Ruby 2.0 出しちゃった気分なので、2.1 の妄想など考えるわけです…が、以下のログは実は1年半前のもの。

そういえばうささんいるからきくんですが、
殺気...
Time#to_sとかそのへんって、今はnon ASCIIこない?
こなくなったような
{unak} "2011-08-25 20:48:08 +0900"
こうなったから。
ただし、Time#zoneは
{unak} "東京 (標準時)"
でつ。
1.9.0の頃にWindowsだと(火)とか来るんでdefault_internalにしたつもり(だったがASCII-8BIT) だったが
なるほろ
%Zですよね
曜日はなんだっけ
曜日はstrftimeが自分で持ってる
wdayかな
4だった。
%A %a %B %bあたりで
strftimeだけかな曜日文字列は
で、曜日文字列は自力で持ってるから問題ないと思われる
Time#wednesday? とかいう下らないものがあった
東京(標準時)はなんとかならんのかな
なんともならんだろう。
つか、何になってほしいの?
ASCIIでかえしてほしいです
Japanese Standard Time (Tokyo)
あんまうれしくないな
これをアルファベットで取る方法は存在するのかなあ。
つかどうやって取得してるんだ。
tzname?
http://msdn.microsoft.com/ja-jp/library/bb384272.aspx ばってんばっかじゃねぇか
{hermit} ローカル システムで定義されているタイム ゾーンの検索 (text/html; charset=utf-8, 93092 bytes)
っとおもったらチェックかこれは
まぎらわしいやつらだ
tznameぽいなあ
システム内部に入りたくないな
WindowsはもうちょっとハイレベルなAPIを使いたい
ハイかローか微妙なところだが
てゆか.NETじゃなくて、と
GetTimeZoneInformation() をじっと眺める
http://msdn.microsoft.com/ja-jp/library/4ssfs1ya.aspx ふぅん?
{hermit} _get_tzname (text/html; charset=utf-8, 338597 bytes)
ふうん?
ほんとうに"PST"とか"PDT"が返ると思う?
おもわない
まあ、試すか
VC6とVC10でtzname周りは違うように聞こえるな
おお
PSTが返った。
すげーwwww>PSTが返った
ここ、日本なんですけど...
まあ、なんというか、まったく使い物にならなさそうですがw
{unak} 実行時に明示的に変更しない限り、この値の既定値は、それぞれ "PST" と "PDT" になります。
文字通りの意味過ぎてワラタ
どうしろっていうんだ。
単にtzname返してるだけだわ
意味ない
てゆか、C runtimeに頼るのは常に間違いである
というのが我々の知見である。
そういえばcygwinだと" "だな
まさかのMSVCRTフリー
やる気がまるでない
さすがのcygwinクォリティ
さて
Windowsタイムゾーン名をどうやって持っているかというと
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
でした。
そこに例えば Tokyo Standard Time とかいうキーがあって、その中に表示名として「東京(標準時)」とか「東京(夏時間)」とかいうデータを持っている。
逆に言うと、英語名はレジストリ上のキー名としてしか存在しなくて、
ふむ、すくなくね?
しかも夏時間の英語名はそれすらない
ということになるね。
あぁ、これXPだから違うのかな
ほう、なんか違う?
どう伝えればいいんだろう
えくすぽーとか
paste> (略)
はった
とてもみづらい
あ、きーがあるのか
だいぶちがうかん
どうでもいいけど、exportするときはreg形式で
それが一番人間に見やすいという
なるほろ
paste> (略)
スクリーンショットが一番見やすいな
これがWin7
ご覧の通りさ
結構違いますね
XPまではキーじゃなかったってことだよね
ん、いやキーでもあるぞ
なんだとー
reg形式おながいします...
はりなおした
なるほど、キーはキーで似たようなもんがあるね。
スリジャヤワルダナプラコッテ に吹いた
いつもながらスリランカたんはw
Time Zones直下の値群の意味がさぱーりわかりませんな
いずれにせよ英語名を手に入れることは難しそう
というか、JSTとか欲しいだけなのになぜ持たない...
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation ふむ
ふむ?
そういえばtzsetの引数にはPDTとか取るんだよね
ふむ
その変換表はどこにあるんだ
さあ
JSTレジストリ検索か
レジストリじゃないのかもしれないが
JSTで検索してもヒットしないぜ
しないね
どっかのDLLか
どっかの、というか、tzres.dllに決まってるけど。
と思ったのだが
tzres.dllは中身空っぽ...
謎は深まるばかりだ
英語で取れないとアレかな
Windows以外ではUS-ASCII, WindowsではEncoding.find("locale")かしら
きんもー
きんもー
mingwとかだとどうなんだろう
cygwinはtzcodeを入れてexport TZ=Asia/Tokyoしろってことらしい
一緒じゃないかな
msvcrtから取ってきてるなら同じ
まぁ、cygwinはそうなるのか
SetTimeZoneInformation()でタイムゾーン名としてPDTとか
とか指定できるムードはあるんだが
なにがどうなってるのかはさっぱりわからない
というかSetしたくないw
ローカル言語以外の文字列が欲しければtzres.dllのリソース番号ほにゃららをひけ
ていうか、そのセットする文字列を知りたいんだが・・・っていう
と書いてある気はするのだが
空だっつーの
逆か、ローカル言語で文字列が欲しければ以下略、なのか。
そして日本語Windowsの場合レジストリにいきなりローカル言語でぶちこんであるのでtzres.dllは空だという。
結論としてはギブアップ気味
ふーむ
タイムゾーンDB添付とかやめたいしなぁ
したくないっすねえ。
Windowsだけlocaleかねぇ
#to_sは常にUS-ASCIIでstrftimeはとかはできるが
+0900とか-0800でよくね? 気分ではある。
<- Windowsにおける%Z
http://blogs.msdn.com/b/bclteam/archive/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free.aspx ふむ
{hermit} Exploring Windows Time Zones with System.TimeZoneInfo [Josh Free] - BCL Team Blog - Site Home - MSDN Blogs (text/html; charset=utf-8, 107682 bytes)
gettimezoneinformationをとって、そのバイナリの内容をTZIとし,
これでレジストリを検索して、キーの名前を取る、でいけそうだ
標準時は。
夏時間は?
で、http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/zone_tzid.htmlをひく
{hermit} Zone → Tzid (text/html, 51403 bytes)
むぎゅ
これを持つ?
つか、なぜunicode.org
TZIDが欲しいわけじゃないので、その先が問題ではないか
ここからolsonひいて、そっから夏時間の名前を取る
http://www.ailight.jp/Blog/sha256/archive/2011/1/30/%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3
tzutilなんてものが
paste> (略)
こんなん出ました
レジストリキー列挙ぽいな
まぁ、問題は夏だな
また非公開APIを見つけてしまった。
IsTimeZoneRedirectionEnabled()
はてさて。
そういえば、現在の日本語Windowsの%ZはCP932?
UTF-8 or CP932という話
たぶんそう。
UTF-8ではないな。
%ZはTimezone IDだとすれば、夏時間だからと言って変える必要ないんじゃなかろうか
でも変わるでしょ?
{unak} Replaced by the timezone name or abbreviation, or by no bytes if no timezone information exists.
どこを参照している?
{unak} The Open Group Base Specifications Issue 7
{unak} IEEE Std 1003.1-2008
http://pubs.opengroup.org/onlinepubs/9699919799/
{hermit} The Open Group Base Specifications Issue 7 (text/html, 787 bytes)
で、strftimeの%Zのところを見た。
それはPOSIXじゃん
うん。
で、他の何を頼るの?
で、ここのtimezone nameはどういうものかというと、
%ZはTimezone IDだと言っている例は他に存在しなくて、
おそらく唯一規格化している例であるPOSIXはこう言ってますよ。
で、実際のPOSIXな実装たちでは夏時間とそれ以外では別の文字列返してますよ。
というのが僕の観測結果。
俺定義実装を別途用意してもあまり嬉しくないと思うので、既存の規格/実装は尊重するのがいいのではないでしょうか。
そのtimezone nameってhttp://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08 にあるstdと関係ないのかなぁ
{hermit} Environment Variables (text/html, 34729 bytes)
つまりalphanumeric characters from the portable character setじゃないかなーと思うんだけど
それはそうなんじゃないかしら。
もっとも
なので、どっちみちPOSIXからは外れているので、
どこを犠牲にするかという話ではある
現状が外れてるのはわかりきってるのでまあいいのですが
外れてるから同じく外れてそうななんか全然独自のをつくろう
というのはさすがに。
全然独自かなぁ
しかし、期待しているのと違うのはまぁ変わらんのだよな
うん。
他に事例がないものを独自と呼ぶ(キリッ
俺が事例だどどん
なんか筋が通ってたら独自でもいいんだけど
別に筋が通ってる気もしない。
Javaみたいに自前で頑張る
がんばりたくないでござる
まだ+0900の方がマシ感
それも独自じゃないすかに
独自だけどがんばらなくていいじゃん
まぁね
独自方向にがんばるのは気が乗らぬ。
いかにも「適当にごまかしましたので」という感じにしとくのは、ま、繋ぎとしてはいいんじゃね。
とりあえずstrftimevの戻り値はlocaleかなぁ
かなあ
なんか.NETあたりにいいのないかな
いずれにせよ、POSIXでも、aAbBprxXあたりはlocaleで変わるぜぐへへへ、とか書いてあるので、
気をつけたほうがいいのかもしれない。よくわからんが。
aAbBpはシステム使ってないので問題ない
しょぼん
{unak} * However this method is locale independent since Ruby 1.9.
rdocに明記してあってびびる
rxXもだな
正確には1.9.1からですね
まぁ、1.9.0は黒歴史だからいいけど
1.9.0とか存在しないから^^
やっぱなんとかせんとだめか。
というか、そう明記するなら、システム側のstrftimeへのフォールバック処理(%Zだけのような気がするけど)を殺す必要がある気がする。
なもんで、zoneだけなんすよ
%Zはstrftimeじゃなくてtzname
両方あるよ
Windowsの場合はtznameだと思うけど
あ、ほんとだ
tm_zoneがあればそれを使い、tm_zoneがなくてtznameがあればそれを使い、どっちもなけりゃstrftimeに聞く
というコードのはず。
で、tm_zoneは俺知らないんだけどtznameやstrftime("%Z")にlocale依存がないってのは幻想だよね。
"timezone name or abbreviation"が何者かという話で
std and dstのとこにあるやつだろJKと思うんですがどうなんでしょうね
っていうさっきの話に戻る
ふつーそれだろ、と思いつつも
あえて直接の関連性を提示しないで別解釈を許しているような気もします。
なんだよね
悩ましい
が、JSTとかPSTとかPDTとか出るのが万人にハッピーではあろう。
カスタムタイムゾーンとかだと手も足も出ないな
というわけで、_get_tzname()を呼んで
PSTと出るようにはなるという(ぉ
ひどい
あまりにひどいな。
実際にはtzset()を呼べば変わるので
環境変数TZを設定していればきっとJSTも出る^^
(よわよわ
わーい、でたー
うれしくねえなあ
てゆか、今のRubyでもTZ設定してればそれが出るから同じか。
TZ設定してないときに頑張ってみるんだけどその結果がアレでソレ
ということなんだよねえ。
故に、やはりシステムに頼らないで+0900を返しちゃうのが事故も起こらず安全なのではないか。
世間の意見を募ったほうがいいか。
ActivePerlは 東京 (標準時)
ナカーマ
たぶんTZ設定するとActivePerlもちゃんとそれを返すと思う
JavaScriptもそうですね
IE/Chromeはとりあえずそう
Time#zoneで"東京 (標準時)"はまぁ許せるんだが、
%Zが厄介なんだよな
%Zの結果にnon ASCIIが混ざったら%zにfallback(ゎ
いや意外といいかも。
アメ公は従来と結果が変わらず、俺らだけ結果が変わる
ので、日本語の苦情にしか対応しなくていいという
あー、%Z か。except %Z とかつけておくべきだったか。
rdocのところですか。
そう
%z はいつも使えるんだから %Z はそのままでも、という気がしないでもない
現状の%Zの何が悩ましいって、encodingが
locale にしとけば
結局そうなりますね
(URL略) くらいか
{hermit} Index: time.c - SimplePaste view (text/html, 4438 bytes)
{unak} + * (It doesn't generate "JST".)
これはそうとも限らない。
日本語WindowsでもJSTを返させるように設定は可能。
may にしておこう
うい。

この話題については、わたしのチラシの裏 も参照ください

観察日記 2013-01-16

ぼやぼやしていたら2013年になってしまってそろそろRubyさんも20歳になりそうですが皆様いかがお過ごしでしょうかぼくはげんきです。

本日IRCにてRuby Implementers Meetingってのが行われたので、それのレポートをしたいところなんですが、朝8時とか無理ゲーな上にチャンネルにjoinしてなかったので(ry まぁ、それでもまとめをしようと思います。

  • Open Floor: 自由議題
  • Wrap up: まとめ
  • RAWR: ガチャピン
  • 8888: 拍手
  • wwww: lol
  • common-ruby: brianの consensus に対するカウンタープロポーザル ([ruby-core:50828] もみよ)

追記: 議事録等にリンクを張るのを忘れていたのではる

観察日記 2012-09-28

久々の歴史チャンネル %ruby です。

少なくとも有史以降で人類が知的に成長したという痕跡は見られません。
平和を願うよりも、武力でお互いに脅し合った方が平和が実現できるってのはここ100年で最も人類が知的に成長した点だと思う
それも割と昔から繰り返している。
ミスると国家総動員しちゃう
動員が楽になったのがポイントなのかしら
一方で、武力均衡による平和というのが継続可能なのかどうかは
均衡が崩れるとねぇ
中国がもうちょっと対等にならないと再検証できないですね。
あんまり検証して欲しくもないけど。
その前に中国は潰れるだろうからそこは大丈夫だろう
潰れはしないけど通貨危機があるはず
そか。
なので、中国がその財政危機の後立ち直れるかがポイントではある
プーチン登場はロシア財政危機の翌年か
ウィーン体制は短く見て40年、長く見ると100年ほど続いた。
ヴェルサイユ体制はドイツ抜きでの勢力均衡という発想がいまいちだったとはいえ20年ほど続いた。
20年は短いかな、そこそこか
でもヴェルサイユ体制は勢力均衡のおかげというよりは一世代分戦争忌避が欧州世論を支配しただけのような気はする。
ドイツ抜きってのがまぁ20年の理由と考えれば短いな
米ソ冷戦は50年くらいでソ連がオワタ。
ロシアに変わっただけだからまだ続いてるよ
インターネットがどれくらい続くのか興味がある
20年は、ヨーロッパ史的に考えると割とマシな方である、
ってのが実は一般的な評価らしい。
なので、20年程度で終わるのが普通であったと考えるべき
平和は続いてるけど、基本的にはアメリカ一極による世界支配である。
手が届きにくいところは結構あるけど、
表立って平和を破壊しようとする国家組織はさすがにそうそうない。
中国くらいしか思いつかんな
ウィーン体制は大変に優れていたと言えるな。
タレーランさんのおかげである。
つまり、ナポレオン戦争の全責任をフランスではなくナポレオン個人のせいにして、
フランスも被害者でしたってことにして、既に存在した対仏大同盟にフランスを参加させる的な外交的アクロバットを達成した。
やっぱり戦争の責任は個人に押しつけないとダメだよな
日本は失敗した
ってのがさっきそださんとやってた話であるが
ヴェルサイユ体制はそれをやらずにドイツを叩きすぎたせいで...
第二次世界大戦後はそれを反省してヒトラーあるいはナチスのせいにした
一方、アメリカや日本はそんな知見なかった
第二次大戦についてはヒトラー及びナチスに全責任をおっかぶせることによってドイツ国民は免罪されたんだよねえ。
日本も一応A級戦犯がその役を担ってくれたはずなんですが、
A級戦犯だといまいち顔が見えなかったんですかね
短期的には東条英機が悪役だったのかな
あんまりにも事実と異なるので当の日本人がそれを受け入れてない。
ちゃんと計画的に物語作って洗脳すれば受け入れられたんじゃないかなぁ
ちなみに日中国交正常化では周恩来がそういうロジックで「全部日本軍国主義が悪かった。だから水に流す」と。
周恩来はちゃんと歴史に学んでいたと。
靖国問題はだから中国側からすると憤慨して当然ではある。
軍国主義」ってのが曖昧すぎたのかなぁ
朝日新聞あたりを戦犯として処分するべきだったんだよ。
やっぱり放逐しやすいものがいいですよね。究極的には死ねば消える個人がいい
うむ
旭日旗禁止
ぶっちゃけ太平洋戦争自体はいろいろしゃーないとして、
日中戦争の責任者は誰なん。
関東軍?
なのかなあ。
つまり満州事変が発端であり、という立場ですね。
関東軍が悪かったと言われてもぴんとこないぜ
やっぱ個人じゃないとな。
南京攻略戦がわりと転換点だったんじゃ無いかって指摘をさっき見た
張作霖爆殺は河本大作大佐が首謀者であったとされている。
どういう意味合い?
http://zennkikourei.cocolog-nifty.com/blog/2012/09/post-6081.html これ
{wakamu} title bot: 日本人は、好戦的民族??: 凡夫のブログ
石原莞爾が戦犯指定を免れたのはおかしすぎる。
というのはともかく、
板垣征四郎が悪いってことでどうかな。
しかしちょっと小物感否めない
ていうか、私利私欲のためじゃないのがよくないね
板垣征四郎石原莞爾は、そこに書いてある柳条湖事件の首謀者です。
{unak} ところが12月10日、南京総攻撃が始まる。 日支事変の始まり、そして太平洋戦争の引き金が、ここで引かれたわけだが、この始まりの責任者が、誰なのか、解らない。
なるほどねえ。
まぁ、その辺の3人が中心人物かなぁという気はするが
でもちょっと事実と時間前後がある気がするんだよなあ。
イマイチその辺の流れがいまだにわかってない
トラウトマン工作による和平の方針が御前会議で決定されたのが翌1/11で、
しかしわずか数日後の1/14に近衛内閣は和平交渉打ち切りを閣議決定し、1/16には例の「爾後國民政府ヲ對手トセズ」声明となる。
1938年当りから蒋介石が折れなくなってるんだよな
ああ
やっぱ南京のせいかも。
南京のせいだとすると非常に説得力はある
1937-12-02 蒋介石、トラウトマンに和平条件の基本的受け入れを伝達。
1937-12-13 南京陥落
(日本の世論は強硬論に傾く)
1937-12-21 日本政府、閣議で和平条件に賠償を含める方針を決定
http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%82%A6%E3%83%88%E3%83%9E%E3%83%B3%E5%B7%A5%E4%BD%9C よくまとまってるな
{wakamu} title bot: トラウトマン工作 - Wikipedia
おお、そんなところにちゃんとあったか。
南京陥落させて調子載ったバカが悪い。

まとめると
戦争おっぱじめた軍部は、所定の目標を達成したので、戦争を終わらせようとした。
ところが、あんまり圧勝したので、国民世論と、その世論の上に乗ってる政府が増長した。
軍部は天皇陛下を引っ張り出して御前会議で和平方針を政府に押し付けた。
ところが結局政府はそれを数日でひっくり返してしまった。
... ということになりますね。
近衛氏ね
いや死んだけど。
つまり
国民がアホであり、その国民が選んだ政府もアホでした、ということになるね。
近衛が自分はA級戦犯にならないと期待してたのって信じがたいな。
どう考えても主犯じゃねーか。
「近衞は『世界文化』に、「手記〜平和への努力」を発表し、「支那事変の泥沼化と大東亜戦争の開戦の責任はいずれも軍部にあり、天皇も内閣もお飾りに過ぎなかった」と主張。あわせて自身が軍部の独走を阻止できなかったことは遺憾である、と釈明した。」
まじ死ねばいいのに
戦犯訴追を免れるための言い訳に過ぎない、と断罪できる。
訴追されたら自殺して逃げきった(?)わけだが、
ちゃんと裁かれるべきだったね。

ところで日本は好戦的民族じゃないの。
戦闘民族日本人
軍事政権が700年ほど続いて、その後50年ほどひたすら対外戦争を繰り返して崩壊した。
途中内戦が100年ほどありましたね
朝鮮とかと比べりゃ明らかに好戦的。
一方の中国の平和なこと!
概ね侵略されてる。
いやまあ、江戸幕藩体制が軍事政権というのはかなり嘘が入ってはいるが。

日中国交正常化 における「未来志向」の含意はまぁ日本人はきちんと考えるべきですよね。

観察日記 2012-08-24

Flonumと不変オブジェクト

r36798 で flonum が入ったわけですが。Feature #6763

あー、flonum導入で32bit環境と64bit環境でFloatのインスタンス変数やtaintの挙動が異なるようになったのか
なんか不味いことになりそうですか
その辺考えたつもりなんだけど
taint は考えてなかったな
Float って taint な可能性ってあるんかな
インスタンスメソッドメソッド上書きしてたりすると思いっきりtaintですね
それは32/64で共に禁止したから良いが (注: 元から禁止されている)
> 09:59 nurse > インスタンスメソッドメソッド上書きしてたりすると思いっきりtaintですね
taint の定義ってそれだっけ
s/taintですね/汚れてますね/g
汚れるの定義は難しそうな
そうですね

flonumってFloatは別クラスなの? ←いまさら
どちらもFloatですよ
じゃあ差異は0じゃないといけないのか
FixnumとBignumみたいにクラス別なら多少は挙動が違っててもいいのかなとか思って
Floatの挙動かえてもどうせ非互換なんだから、Flonumクラスつくって、スクリプト中の浮動小数即値はFlonumになるというルールにしてtaint欲しい人は明示的にFloatオブジェクトつくってねとしたらだめなのだろうか
うつくしくない
C#のボクシングみたいに内部的にオブジェクトができてほしい?
あーまあそれでもいいですよ > へんなことしたやつはboxing
boxingは object space で object id が見えてしまっているので、そこらへんを考えないと穴がありそうだ
Rubyは常にオブジェクトがあるのでboxingもなにも
taintが欲しいかじゃなくて、taintが保持されるべき状態になることがあるかと申しましょうか
C#にも常にオブジェクトはある。
C#だとvar a=1.0; var b=1.0; とあるときに、b固有の何かってありませんよね
JavaScriptだとオブジェクトにすればなんかあった気がするが
a=new Number(1.0)とかか
Java でいう primitive 型と Object 型,だろうか
Javaも7からauto boxingはいるんだっけか。わすれたけど
7 からだっけ?
(知らない)
C#はなんでもオブジェクトだがオブジェクトがスタックに乗ったりヒープに確保されたりする
var a = 1.0;ってやるとスタックに乗る
Object a = 1.0;ってやるとヒープに逃げる
それはオブジェクトモデルとは関係無さそうな
どうかな。オブジェクトモデルそのものではないと思うが関係ないかというと
そもそもboxing/unboxingとスタックに乗るか乗らないかは根が深い関係があると思われるので。
そこはそうだけど、オブジェクト固有のデータを持てるかとはジャンプがあるな
auto unboxingがある時点で持てない気がする
ジャンプがあるのは認める。いまのケースだと auto unboxing はありえないものね
unboxしたいシーンもないし
特異クラスと同じく、一回特異クラスになってしまったら、もう普通の世界にはもどれない
というか、オブジェクトじゃないとRubyの世界に存在できないので、unboxできるはずがない
それはオブジェクトとは何かという根源的な問題に触れているように思う
ここでオブジェクトと値という対比がboxingだと立場になっているのでそういう反論が出てくるのだとおもう。一般的にはこっそりproxy objectが生成されるしかけのことなので私的には矛盾しない
Fixnuは常にこっそりproxy objectが存在するんだろうか
どうなんだろう
unboxingされた値さんがその言語に存在しなければそれunboxingじゃねーだろ感がある
で、RubyにオブジェクトでないC#的な「値」はない
Rubyにおける「値」ってのはインスタンス変数が共有されちゃうやつかなぁ
unboxingにこだわるなあ
unboxingというか、値とは何か、オブジェクトとは何かってのはとても重要なことですから
オブジェクトとはなにかだけで1年は議論できる、もちろん結論は出ない
まず、わたしの主張となるせさんの反論はかみあってないと思っている
わたしはunboxingさせろとはいってなくて、さっきと違う言葉でいいなおすと、ある操作をしたときに proxy object が自動的に生成されて taint を持つことを許すのはありやなしや
それはなんというかtaintさせることが目的になっているので本末転倒である
特異メソッドもできるよ
普通のオブジェクトじゃないというのが制限の由来でしょ
非即値化ですね
うん

特異メソッドは前から定義されないのでいいのだが、
インスタンス変数は持てるのがひっかかる
特異メソッド持てるようにしたとして、
a=1.0; b=a; c=1.0; def a.foo;end; a.foo; b.foo; c.foo
むりじゃないかこりは
やだやだできなきゃやだ
しかしどう考えても現実的じゃなかった。
taintに自然に拡張したいならb とcにfooはできてはだめなんだよな
つまり、この世には無数の1.0があるという宗派に改宗しないといけなくなる。
それもやだ。
taintが目的じゃなくて
両方却下されたのでこの件はおひらき
taintされなければならいないような例が存在するかってのが求めている答え
non flonumだと特定のfloatが独自のインスタンス変数を持てるので、そこが懸念ポイント
ああ、即値のtaintってなんじゃらほいってこと?
Webフォームから入力された数値をDBに登録したいお^^
数値に変換できてる時点でサニタイズ終わっているはずだもんな
で、即値は常にサニタイズ済みだろうと考えられている
bignumやnon flonum floatはあやしい
rational/complexあたりはアウトだと思っている
rationalはサニタイズ済みと仮定できないということ? > なるせさん
インスタンス変数のほうの話かな
いや、実は仮定できるのかな
とりあえず特異メソッドは持てなかった
72.to_s #=> "千早" とかしたいよ?
途中から見たのでよくわからんけど、即値オブジェクトが云々というより、不変オブジェクトが云々という観点で考えるべきなのではないか。
その指摘は正しいような、実装と理念を混ぜてるような
rubyのオブジェクトモデルにimmutableって概念はあるのだろうか
たまたまない。
あんまり明には書かれてない気がする
ので、混同が生じているのではないだろうか。
ない、ってあれだな、あるんだけど、影が薄い。
Timeはimmutableだな
オブジェクトモデルにはないんだけど、特定のクラスの設計においてimmutableにしていることはある
BignumとかFloat(not flonum)とかRationalとかComplexとかは
いまその混乱の狭間に置かれているという感がある。
しかし Stringがimmutableだけど taint ありな言語はいくらでもあるわけで、symbol みたいに immutable でかつオブジェクト共有してるから即値としてつかえるよん的なクラスでないと議論がすれちがうな
変更不能、と、不変、はちょっと違う。
無窮オブジェクト
普遍オブジェクトという観点では、a=1<<128; def a.foo;9;end (1<<128).foo #=> 9 とかなってほしい
なってほしいかなあ。あんまりそんな気がしないんだけど
実用じゃなくて理念の話なので> 1<<128

理念から入ってますが、
(1) 初めからあって永遠にあって決して変わらないという種類のオブジェクトがあるはずである。これをとりあえず不変オブジェクトと呼ぶ。
それは不変じゃなくて普遍ではないか
かもしれない。
呼称は適当なのでとりあえず受け入れてくれ。
不変だとはじめからあるは条件になくても使っていいイメージ
see also http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/33832
(2) 具体的な例としては true false nil なんかは間違いなくそれである。
(3) 「数値」というのもそれに該当されるのではないか。つまり、1はどこにいっても1であり、どこに現れる1も全て同じオブジェクトのはずである、ということ。
(4) 「不変オブジェクト」が特異メソッドなりtaintされたりしちゃいけないという道理はあるかもしれないしないかもしれない。ただし、どこかで1がtaintされうるとしたら、他の1も(同じオブジェクトなので)taintされることになることに留意。
その立場だと特異メソッドもtaintも、そんなんあるはずないだろ。はい解散。でおわりな気がする
どこかのアホが即値の1をtaintしたら全スクリプトが汚れるとかありえんし
4.taint; 13.taint
別にあって悪くはない。
(5) 「不変オブジェクト」の実装には、たまたま、VALUE埋め込みというテクが使える^^
(6) 一方、VALUE埋め込み以外で「不変オブジェクト」を実装するのは相当困難である。
とりあえずこんなあたりは前提として共有されたい。
floatが普遍オブジェクトであるべきかってのには若干の議論の余地はある気はしないでもなかりけり
6なんだけど不変なんだから別にふつうにオブジェクトつくってヒープにおいてもいいはずである。変更されそうな操作をことごとく蹴るという話に帰着するだけなので
うん。
で、Bignumとか一通り禁止されているのだが、インスタンス変数が漏れてる
というわけで、今はそういう方向なわけです。
2.0から禁止で(^^
で、ある1をtaintしたいけど他の1がtaintされるのおかしくね? っていうのはオラも十分理解できるんだけど、
それはつまり「ある1」は値としての1ではなくて何か特別な意味・意図を付与された1なのであり、
なのでそれはNumericの1ではなくて、1という値を持つ別のオブジェクトなんでないの、
ゆえにラッピングして扱って、そのラッピングの方にtaintをつけるべきじゃないの
と思うわけです。
なるほど。
var a=1; a.taint じゃなくて
var a=new Number(1); a.taint しろと
思うんですが、それってつまりboxing/unboxingを自前でやれフハーハッハッハっていうことなので
なんだか悲しい気もする。
特別なぼくだけの72を作りたいって話なんだから、自前でやるのは当たり前な気もする
やー、ぼくは自前でやれに傾いてますよ
taint必要な状況がほぼないんじゃね。という意見に説得された
というわけで、理念は理念としておいといて、利便性という観点から適当に妥協するという考え方はなくもないかもしれにゃい。
まぁ、fixnuやflonum floatはおいておいて、non flonum floatが目下の問題。
FixnumとBignumは明らかにクラスが違うことが見た目でわかっちまうので、ちょっと挙動が違ってもしゃーないかもしれない。
flonum/non flonumはそうでないので、許しにくい。
モヒカンに全部禁止していくと非互換になる。というのが課題だとおもっていい?
Integerに統合したい
非互換になるのはどうでもよくて(マテ
どうでもいいのか
どうあるべきかの方が問題
まあ、できる/できないの観点から考えても、全部禁止に倒すしかなかろ、とは思う。
うん。他に選択肢ってあるのかな?
その「全部」の洗い出しが十分じゃないかも、という感じはある。インスタンス変数が漏れてるとか、Rational/Complexあたりがどうなのかいまいちわからんとかいうのはそういうことかと。
なるほろり
Rationalは特異メソッド禁止してた
Complexもだな
Numericで禁止されてるので、その子孫はみんな禁止されてると思う。
で、えーと、全部禁止してもたらされる非互換についてはですね、
「理念から言ってできるはずないのにそんなことしてたおめーが全部悪い」
でいいんじゃないかと。
そうですね。

Rational(1,2).extend Module.new できるのっていいのかな
module Foo;def +(b);9;end;end;(r=Rational(1,2)).extend Foo;r+1 #=> 9
おい
特異メソッドナシナシにするのが正しい方向な気がしてきたので、extend 禁止がいいのかなあ
しかし特異クラスができた時点でもうRationalじゃないんだから、ゆるされるはずという立場もあるのか
r=Rational(1,2); s=r; r.extend Foo; s+1 とか
破壊的にクラスが変わるってのはちょっと聞いたことがない
禁止候補:特異メソッド、特異クラス、インスタンス変数、オブジェクトフラグ(taintなど)
他なんかあったら、あるいは反論あったらどうぞ。
そうね
obj.extendした時って、obj側は何も呼ばないのか
Numeric#extend定義して禁止すればいいか
てっとりばやいね。
デザイナmatzの見解は聞きたいところではあるな。
そもそも class < 特異クラス作成禁止APIが必要
普遍オブジェクトのクラスとして登録、とかか。
FrozenCore.register_universal_class :Rational
ObjectSpaceのメソッドであろう。
Classクラスのメソッドかもしれないが。
不変=immutable 普遍=universal か
ObjectSpaceかも
universal_classはクラスがuniversalな気がしてしまうのでやや微妙
Classに登録というよりは、世界に対しての登録なので
ふむ、まあそうね。
深淵というニュアンスでFrozenCoreだったんだけど、ObjectSpaceの方が適切かも
Classのメソッドなら、Class#declare_univeral みたいに「俺がガンダムだ」的に叫ばせる感じ。
叫んで登録されるような安っぽいメソッドではないのです
まあ、ObjectSpaceでいいと思います。
そもそも、declare_universalがあるクラスしか登録できないのはおかしい。