コンテンツへスキップ
GitHubリポジトリ フォーラム RSSニュースフィード

2017年のCrystalの新年目標:1.0

サンティアゴ・パラディーノ

Crystalは、私たちが5年以上前に始めた当初から、長い道のりを歩んできました。かつてはコンパイルされるRubyのような言語が可能かどうかを試す実験でしたが、今では7,000以上のGitHubスター1,400近くのシャードを持つトレンドの言語になっています。その人気はここ数年で大幅に上昇しており、私たちが構築したものが開発コミュニティでこれほど共鳴しているのを見るのは、信じられないほど誇らしいことです。

Crystalの主な目標は、それが繁栄することを見ることです。多くの人が言語を知り、仕事で実生活の問題を解決するために使用するなど、仲間の開発者からの成功事例を聞くのが大好きです。そうは言っても、私たちはこの目標を達成する方法を検討し始め、言語が広く使用される上での主な障害を探しました。

主な問題は明らかです。安定性です。Crystalは遊ぶには美しい言語ですが、長期的に維持する必要があるシステムを実装するために仕事で使用することに投資するのは、多くの開発者にとって危険なようです。そして、もっともな理由があります。Crystalは、すでにかなり長い間、本番環境に対応できていたにもかかわらず、まだアルファ版としてラベル付けされています。

したがって、言語の成長を見たいという私たちの目標に沿って、2017年にCrystalが1.0マイルストーンに到達するという新年目標を設定しています

1.0が意味するもの

アルファ版、ベータ版、安定版(つまり1.0)は、Crystalチーム内でも、人によって意味が異なる場合があります。1.0マイルストーンを達成する背後にある基本的な考え方は、言語のコアに対する破壊的な変更が最小限に抑えられる地点に到達することです。もちろん、その後も言語への追加や機能、さらにはツールや標準ライブラリの変更がある可能性はありますが(信じてください)、言語の後続バージョンへの移行が容易なタスクであるようにしたいと考えています。

1.0リリースへの道

1.0に到達するためには、言語に対する破壊的な変更が必要となる可能性のある主要な機能に取り組む必要があります。そして、以下のものを特定しました。

  • 並列処理:これは私たちが現在取り組んでいる次の大きなものです。ファイバーは同時実行に非常に優れていますが、利用可能なすべての計算能力を活用できるようにしたいと考えています。Crystalの主な目標の1つが可能な限り最高のパフォーマンスを提供することであることを考えると、これを1.0だけでなく、実際にはベータ版でも(ベータ版の定義がどうであれ)達成したいと考えています。
  • Windowsサポート:Crystalに興味を持っているWindowsで作業している開発コミュニティのかなりの部分があることを認識しています。また、Windowsサポートにより、Crystalはクロスプラットフォームのデスクトップアプリを開発するのに適したものになります。このタスクの達成に向けた取り組みを見積もり、ガイドするために、コミュニティと緊密に連携し、言語の主要な要素がUNIX固有のものに結び付けられていないことを確認する予定です。
  • 型システム:Crystalのエレガントな型システムとグローバル型推論は、その優れた機能の1つですが、特にジェネリックとその制約に関して、見直す必要のある点がいくつかあることを認識しています。私たちは型システムを整理し、隅々に驚きが潜んでいないと確信するまで、それを形式化する方法さえも検討し始めます。
  • インクリメンタルコンパイル:最大のCrystalプロジェクトのコンパイル時間が現在それほど長くなくても(Crystal自体は約20秒で最たる例です)、開発エクスペリエンスを向上させたいのであれば、これらの時間を短縮できる必要があります。言語でインクリメンタルコンパイルまたはモジュールコンパイル機能を試作し、これを達成するために追加する必要がある可能性のある制限を特定したいと考えています。これは1.0にとって必須事項とは考えていませんが、それによって発生する可能性のある言語の変更が必須であるため、潜在的な実装を調査する必要があります。
  • マクロ:動的言語のメタプログラミング機能に対するCrystalの応答は、ほとんどの同じ問題を解決する方法を提供するコンパイル時マクロです。マクロは、ASTを操作して新しいコードを出力したり、外部プログラムを呼び出したり、型システムにアクセスしたり、コンパイルプロセスにフックしたりすることができます。そのため、1.0前の作業の一部はそれらをレビューし、1.0後にマクロ言語に破壊的な変更を加えたくないため、言語の残りの部分とうまく連携していることを確認することです。
  • 構文:上記の点と同様に、1.0がリリースされると、言語の構文に対する変更はすべてフリーズされます。CrystalはRubyの構文のほとんどを継承していますが、Crystal固有の項目には独自の構文が必要です。率直に言って、ここで大きな変更があるとは予想していませんが、適切なレビューなしにフリーズするのは無責任でしょう。

そこに到達する方法

標準ライブラリでの作業を並行して進める予定であり、途中で発生するバグを修正することも考えると、上記のすべての項目を1年以内に達成するのは簡単なことではありません。

まず第一に、Manasの私たちはこれが実現するのを熱望しているので、Crystal自体への献身を増やします。ManasのCrystalの現在のチームである、Ary (asterite)Juan (waj)、およびBrian (bcardiff)に、Gustavo (ggiraldez)María (mdavidmanas)Martín (mverzilli)Matias (matiasgarciaisaia)、および私 (spalladino)が加わります。コミュニティ管理、サポート、ドキュメント、ツール、シャード開発、さらにはコア言語開発を支援します。私たちのうち何人かはすでに自由な時間に言語に貢献していましたが、Manas.Techから直接、公式にこの取り組みを支援しています。

そして2番目ですが、それほど重要でないわけではありません。オープンソースコミュニティのすべての力を活用する予定です。Crystalに貢献を始めたいと思っている(金銭的な寄付だけでなく)人が増えており、その専門知識が大きな追加になることを認識していますが、これらの取り組みをガイドするには慎重な計画が必要です。これらのプロセスを容易にし、コミュニティチャネルを整理し、ロードマップを最新の状態に保つために、貢献ガイドラインを改善し、課題トラッカーを整理します

その後、コミュニティの観点から、言語への新規参入者の障壁を下げることに取り組む予定です。特に動的言語のバックグラウンドから直接来ている人が多いので、Crystalとは何か、そうでないかを明確にしたいと考えています。ドキュメントだけでなくチュートリアルにも焦点を当て、Crystalの使用例を定義するのを支援します。それが、言語自体を形成する可能性があります。

次のステップ

2017年にCrystalにやってくるすべてのことに興奮していますが、差し迫った次のステップを見失いたくありません。まず並列処理に力を入れ、Windowsサポートに向けた既存の取り組みを活用します。コミュニティの観点からは、貢献ガイドラインを見直し、GitHubの課題ラベルを再考し、必要に応じて課題に再タグを付けます。新規参入者が貢献するための課題と、コミュニティの経験豊富なメンバーが取り組むための課題を用意したいと考えています。

ここまたはコミュニティチャネルのいずれかを通じて、コメントをお寄せください。新年おめでとうございます。そしていつものように、楽しいCrystallingを! :-)




この目標の達成を支援したい場合は、BountySourceでCrystalをサポートすることを検討してください!