Valim,Rubyにおける並行プログラミングのためのいくつかのアイデアを提案。Valim,Rubyにおける並行プログラミングのためのいくつかのアイデアを提案。Valim,Rubyにおける並行プログラミングのためのいくつかのアイデアを提案。2013が開催されています。基調講演をそれぞれレポートします。司会の角谷さんにより「再起動したRubyKaigiの基調講演に最もふさわしい人物の一人」と紹介をされたJoseは,Rubyにおける並行プログラミングの可能性について話しました。自己紹介Joseは,2006年からRubyを書き始めたそうです。coreチームにジョインしています。Elixirという言語の作者でもあります。ElixirはErlangのVMの上で動作するスクリプト言語で,並行プログラミングと相性が良く,強力なメタプログラミングの機能を持っています。現在のバージョンは0.9.0となっています。現在はplataformatecに所属しています。して,いま,並行性(concurrency)なのかJoseはまず,並行性をテーマとした背景を説明しました。それぞれのサーバ上のCPUのコアは一つでしたが,いまや数多くのCPUコアを持ったサーバを利用することは非常に現実的な選択となりつつあります。50コアを持ったサーバが2,600ドルで購入可能な例を説明しました。CPUの性能向上に比例してソフトウェアが速くなっていたという事情を説明しました。コア数が1つでCPU自体のクロック数を向上させれば良かった時代には,プログラムの側もそのような「フリーランチ」の恩恵を受けていたとのことでした。メニーコアが前提となったプログラミングにおいては,プログラム自体をそのようなアーキテクチャに対応させなければいけない,そのような状況は未来のものだと思われていたが,その「未来」はもう来ているのではないか,と話しました。プログラム自体をそのようなメニーコアに対応させる場合,Rubyの場合はスレッドを利用して実現することになりますが,その中でもいろいろな問題が起こりうることを示しました。クラスのアクセサにおけるレースコンディション一つの問題は,スレッドによるレースコンディションです。単純なクラス変数へのアクセサを経由した代入を考えてみます。WebアプリケーションのUser.current_userという変数があるとします。コントローラーで次のような処理をしているとします。...(3)しかしながら,このような処理を行うと,例えば(1)?(3)がユーザごとに直列で実行されているような場合には問題は無いのですが,いくつかのスレッドを同時に動かしている状況においては,問題のある挙動をしてしまう場合があります。具体的には,ユーザー「Jose」がアクセスして,その(2)の処理が動いている間に別のユーザー「Matz」がアクセスしてしまうと,current_userが置き換わってしまい,結果的にJoseに送るべきメールがMatzに送られてしまうということが起こりうると説明しました。このようなUser.current_userは,「⁠共有されていて,変更可能な状態で,グローバル変数のようなものだ」とのことです。実は,そういう風にセットできる値がRailsにはかなりの数存在し,例えばActionMailer::Base.from,ActionController::Base.loggerなどがそうだとのことです。実はJose自身のライブラリであるDeviseなどにもそのような設定項目はあります。実装による違いJoseは,Rubyには様々な実装が存在することを紹介しました。スレッドセーフとは,実装によって意味が様々に変わってくるという主張をしました。RailsのActionView::Resolverが内部で行っているように,ある変数にHashオブジェクトを代入し,そのハッシュをキャッシュのように利用することが,Rubyのプログラムではしばしば行われます。ここで問題があります,では,このHashオブジェクトはスレッドセーフなのでしょうか?実は,この答えは実装によって変わります。2.0ではnoとなります。Lock,OSレベルのスレッドを一つしか走らせないロック)が存在するため,複数スレッドからのハッシュへのアクセスは安全に行われるのです。そのような機構が無いほかの言語では,複数のスレッドからハッシュへのアクセスが発生することが起こり得ます。そのため,例えばRailsでは,実装の間での差異を吸収するためにthread.rbに定義されているMutexを導入しています。Joseはそのような方法は個人的にでは古くさい,好きではないと言います。あまりにも低レイヤーの実装を,開発者にさせてしまうことになるからです。この手の低レイヤーなプログラミングについて,次のように表現しました。コードのメンテナンス性が下がるYARVのパフォーマンスも下がる開発者の幸福度も下がる!そこで,適切な,並行プログラミングのためのセマンティクスをRubyに定義することが必要であると述べました。Ruby著者プロフィール近藤宇智朗(こんどううちお)業務システム→ECサイト→オンラインゲームな雑食プログラマ。Sinatra,Padrino,Rackなどが好き。PRESS誌でも,連載「一歩先行くRuby」(vol.69~現在),特集「コードレビュー実践入門」(vol.72)など,何点か寄稿している。最近興味があるのは型システムが強力な言語。レポート田中哲さん「Rubyの開発はこれからも多様性との戦い。Valim,Rubyにおける並行プログラミングのためのいくつかのアイデアを提案。2日目まつもとゆきひろさん,Rubyに影響を与えた言語とRuby開発初期を語る。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。