Git Product home page Git Product logo

issues's People

Contributors

gitter-badger avatar makenowjust avatar pine avatar rosylilly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

gitter-badger

issues's Issues

TCPSocketをTCPAcceptorとTCPStreamに分離したい

今の実装だと同じTCPScoketでくくってしまうと、Linux/FreeBSDで accept4O_NONBLOCK をセットしたときでも無駄な fcntl 呼び出しが入ってしまうのがイケてないな、と。
今のままでももちろん分離しようと思えばできるけど、そもそもサーバソケットとクライアントソケットは別扱いにしたほうがよさそう。

Crystal-JP の公式サイトが欲しい

公式サイトのドキュメントとは別に、グループの公式サイトが欲しい。

以下の様なことを決める。

  • 必要なのか否か
  • どこで公開するのか
  • 誰が作るのか
  • どうやってつくるのか

暫定組織名からの変更

現在、暫定で Crystal-JP という謎の組織名を名乗っているが、今後も継続的に活動していく上で、それっぽい組織名にしたほうがいいと思われる。

本家の Google Group 上で Japan Crystal Users Group と名乗っていい? と投げた所、Ary さん曰く問題ないとのことなので、そちらにに統一する方向でいきたい。

https://groups.google.com/forum/?fromgroups#!topic/crystal-lang/YxvtmERLQOs

何か問題あれば、お願いします。

運営方針を決める

作ったはいいけど運営方針が何も 考えてない 決まってないので、考えていきたいと思います。

CrystalにもRubyのRack的なものが欲しい

Slackであった議論の続きはこっちでしましょう。

これまでのまとめ

  • なぜRackが必要?
    • Crystalにサーバーが乱立したときの面倒を避ける
    • ミドルウェアスタックが欲しい
      • HTTP::Server::build_middlewareじゃダメなの?
  • 作るとしたら名前は?
    • Crack?
    • Crystack?
    • CSGI?

名前はともかく、なんで必要なのかはきちんと話し合った方がいいのかな、と。

(これまでのまとめは結構適当なので適宜直していきます)

型制限付きのresponds_to?が欲しい

現在のCrystalのresponds_to?は見かけ上メソッドのような組み込み構文になっていて、引数にシンボルしか受け付けません。なので、オブジェクトがある名前のメソッドを持っていることを検査できても、そのメソッドがどのような引数に対応しているかが確認できません。
そのため、responds_to?でメソッドの存在を確認しても、引数が間違っているためにコンパイルエラーになる例があります。

例えばcrustacheCrustache.renderの第二引数に、文字列型を受け入れないhas_key?[]?を持ったオブジェクトを渡したときなど、予めどのような型が渡されるのか想定できないときに、持っているメソッドで機能を分岐させているときに問題になることがあります。

構文はうまいのが思い付かないのですが、第二引数に型を渡すとか‥‥。

hoge = "Hello"
if hoge.responds_to?(:scan, RegExp -> Array(String))
  p "hoge has a `scan` method!"
end

なんか微妙だなぁ。

Crystal を PaaS で動かしたい

Heroku などの PaaS で動かす場合のノウハウなどを共有したい
最終的に、「 Crystal を *** で動かす場合のベストプラクティス 」 みたいなものにまとめていきたい

postblit constructor

単なるコピーなので、参照もコピー元/コピー先で共有される。

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の仕様について

現時点、以下のバージョンにおける文字列の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"]
  • Crystalの仕様は妥当か?
  • Rubyの仕様に合わせるべきか?
  • そうでないならどのような仕様にするべきか?

このあたりを念頭に議論したいと思っています。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.