crystal-jp / issues Goto Github PK
View Code? Open in Web Editor NEWCrystalに関する意見や質問、議論などをする場所
Crystalに関する意見や質問、議論などをする場所
今の実装だと同じTCPScoketでくくってしまうと、Linux/FreeBSDで accept4
で O_NONBLOCK
をセットしたときでも無駄な fcntl
呼び出しが入ってしまうのがイケてないな、と。
今のままでももちろん分離しようと思えばできるけど、そもそもサーバソケットとクライアントソケットは別扱いにしたほうがよさそう。
翻訳しよう
公式サイトのドキュメントとは別に、グループの公式サイトが欲しい。
以下の様なことを決める。
現在、暫定で Crystal-JP という謎の組織名を名乗っているが、今後も継続的に活動していく上で、それっぽい組織名にしたほうがいいと思われる。
本家の Google Group 上で Japan Crystal Users Group と名乗っていい? と投げた所、Ary さん曰く問題ないとのことなので、そちらにに統一する方向でいきたい。
https://groups.google.com/forum/?fromgroups#!topic/crystal-lang/YxvtmERLQOs
何か問題あれば、お願いします。
作ったはいいけど運営方針が何も 考えてない 決まってないので、考えていきたいと思います。
Slackであった議論の続きはこっちでしましょう。
これまでのまとめ
HTTP::Server::build_middleware
じゃダメなの?名前はともかく、なんで必要なのかはきちんと話し合った方がいいのかな、と。
(これまでのまとめは結構適当なので適宜直していきます)
現在のCrystalのresponds_to?は見かけ上メソッドのような組み込み構文になっていて、引数にシンボルしか受け付けません。なので、オブジェクトがある名前のメソッドを持っていることを検査できても、そのメソッドがどのような引数に対応しているかが確認できません。
そのため、responds_to?
でメソッドの存在を確認しても、引数が間違っているためにコンパイルエラーになる例があります。
例えばcrustacheのCrustache.render
の第二引数に、文字列型を受け入れないhas_key?
と[]?
を持ったオブジェクトを渡したときなど、予めどのような型が渡されるのか想定できないときに、持っているメソッドで機能を分岐させているときに問題になることがあります。
構文はうまいのが思い付かないのですが、第二引数に型を渡すとか‥‥。
hoge = "Hello"
if hoge.responds_to?(:scan, RegExp -> Array(String))
p "hoge has a `scan` method!"
end
なんか微妙だなぁ。
Heroku などの PaaS で動かす場合のノウハウなどを共有したい
最終的に、「 Crystal を *** で動かす場合のベストプラクティス 」 みたいなものにまとめていきたい
単なるコピーなので、参照もコピー元/コピー先で共有される。
struct Foo
property :arr
def initialize(len : Int32, inital_value : Int32)
@arr = Array(Int32).new(len, inital_value)
end
def get(offset : Int32)
return @arr[offset]
end
def set(offset : Int32, value : Int32)
@arr[offset] = value
end
end
foo1 = Foo.new(10, 0)
foo2 = foo1
foo1.set(5, 100)
foo2.set(5, 42)
p foo1.get(5) # => 42 !!!
そういうわけでpostblit constroctorがほしい。が、いいデザインが思いつかなくて悩んでいる。 Foo.new(self, ...)
みたいに明示的にself渡すとpostblit constructorになる、とか考えたけどキモすぎる。。。
現時点、以下のバージョンにおける文字列のRangeの仕様です。
$ crystal -v
Crystal 0.7.7 [170f859] (Sat Sep 5 02:53:51 UTC 2015)
現在 "A".."z"
は "A" から始まり "...z" で終わるような文字列集合を表します。
p ("A".."z").take(27).to_a #=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA"]
これがどういうことかというと、以下のようなコードを書くとプログラムが停止しなくなります。(実際はOutOfMemoryになるでしょう)
("A".."z").to_a
Rubyでは以下のような仕様になっています。これはRuby内部では String#succ
を単純にたたいてるだけではなくて "Z".ord.succ.chr
のように、文字列としてではなくASCIIコードをひとつ進めるようになっているためです。
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
$ irb
irb(main):001:0> ("A".."z").to_a
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
このあたりを念頭に議論したいと思っています。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.