Learn Languages 2018 in ODC (LL2018) に参加しました。 今年も オープンデベロッパーズカンファレンス2018 の中での開催でした。
会場
往復共に新幹線にして、余裕を持って前日に移動して近くで泊まっていました。
オープニング
- ハッシュタグは
#ll2018jp
Language Update (1)
- 最近2年ぐらいの話と将来の話
- Go Language Update
- LL イベント久しぶり
- Vuls などの会社の人
- 年収が高い言語 (非機能要件)
- 前回の Language Update は 2013 の LL 祭り
- 5年分ぐらい入れた
- Go 1.2 から
- Plan 9 のサポートが手厚い
- Go 1.5 が近年で一番大きな変更だった
- セルフホスト化 (go で go をビルド)
- GC が速くなった
- Go 1.8
- GC が速くなってスレッド切り替えより速い
- Go 1.10 ぐらいになってくると大きな変更は減ってくる
- Go 1.11 は昨日 (2018-08-25) リリース
- modules
- WebAssembly はバイナリが大きくて使いにくいらしい
- コミュニティの発展
- GoCon
- connpass にもイベントがたくさん
- 日本語情報の増加
- 書籍も増えている
- Progate のオンライン教材も
- Go の未来
- Go 1.11 and beyond
- Go 2
- 機能ファーストではなく問題ファーストで考えて提案してほしい
- GOPATH はなくなりそう
- Learn Language 2018 Java Language Update
- LL イベント久しぶり
- Java チャンピオン
- 組み込みから基幹まで
- 1.x の頃はリリース間隔が短かったが、6 のあたりは長かかった
- 9 から半年ごとのリリース (3月, 9月)
- 予定していた機能が完成したらリリースだったので 6 から 7 は 5 年かかった
- 8 ラムダ式 (Project Lambda)
- 9 モジュール (Project Jigsaw)
- 10, 11 var (Project Amber)
- 12 switch 文の拡張 (Project Amber)
- モジュールの話
- モジュールがなかった頃の問題点: 実行時にならないと誰が誰を使うかわからない, public が public すぎる
- 入るのに10年かかった
java -p mods --module a/Foo
- 現状は対応しているものと対応していないものが混在しているので数年は大変
var
- 使えるのは2箇所
- ローカル変数 (Java 10)
- (C++ の auto っぽい?)
- ラムダ式の引数 (Java 11)
- 静的コードチェッカー用のアノテーションを入れたい時に使うかも
- 未来の話
- できたものから次のリリースに入る
- Project Amber: 文法の変更
- Project Loom (織機): 軽量スレッドと継続
- Project Valhalla: プリミティブ型←→参照型 : Value 型とか generics にプリミティブ型を使えるようにするとか
- Project Panama: ネイティブ←→JVM : jffi
- まとめ
- Java 11 が 3 年サポート LTS なので早めに試すのがおすすめ
- 質疑応答
- 継続について
以下のような話もあるようです。
- 2018 年残暑の Perl
- 色々なところで Language Update 的な話をしている
- Perl 5.26 / 5.28 が出ています
- おもな変更点は perldelta 参照
- ヒアドキュメントがインデント可能に (5.26)
- 異なる種類のハンドルの共有はエラーに (5.28)
- open my $hd, … して opendir $hd, … がエラーに
- 文字列用のビット演算子 (5.28)
use utf8; say "生" &. "死"; # 愛
- 影響の大きな変更
-
@INC
からカレントディレクトリが除去 (5.26)- ruby で
$LOAD_PATH
から除去された時に話題になったが CPAN のモジュールが大量に壊れることがわかっていたので見送られていた - debian のパッケージシステムで問題が起きたのでついに対応することに
- ruby で
- encoding プラグマの変更 (5.26)
use encoding 'cp932', Filter => 1;
- Test2 フレームワークの導入 (5.26)
- 仕切り直しになったもの
- 正規表現中のあいまいな
{
の扱い (5.26)- 5.16 で廃止、 5.22 で警告、 5.26 でエラーに
- CPAN のみならず golang のテストなどにも影響
- autoconf で問題発覚。該当の表現のみ警告に
- 正規表現中のあいまいな
{
の扱い (5.28)- 一部はふたたび警告に
- スマートマッチ問題 (5.28)
- サブルーチンシグネチャの再修正 (5.28)
- いろいろと議論はありました
- PPR (2017)
- 正規表現で Perl をパース
- Babble (2018)
- Perl 版 Babel
- 構文拡張系のモジュール
- DBD::MariaDB (2018)
- Perl 6 について
- 毎月リリースは継続中
- 6.d がリリース予定
- IDE: https://commaide.com/
子供向けプログラミング教室・最新事情 〜今、どんな取り組みが行われているのか〜
- CoderDojo
- 教室ではなくクラブ
- Dojo ごとに基本的に独立
- やっていることもバラバラ
- DojoCon Japan 2018 というイベントが昨日あった
- CoderDojo ひばりヶ丘
- メンター : 共感・寄り添い
- Scratch
- 単なるプログラミングツールではない : SNS 的な機能とか
- NHK の Why!?大喜利
- 作品例
- Scratch 以外の例
- カムロボ + IchigoJam
- Music Blocks
- Scratch 3.0 + micro:bit
- Scratch 3.0 は8月から公開ベータで 2019-01-02 リリース予定
- 色々と学べることがある
- ライフロング・キンダーガーテン 創造的思考力を育む4つの原則
- KidsVenture
- さくらインターネットなどの人
- 週刊アスキーで IchigoJam 知った
- 買ったが半田付けができなかった知り合いにもらった
- KidsVenture の誕生
- 数回の試行錯誤
- 初回はゲームが盛り上がる
- 各地で開催
- コンセプト
- きっかけを与えることに注力
- 選択肢が少ない場所へ届ける
- 意識していること
- 作って創る
- 体験から経験
- 楽しいをきっかけに
- 子供からも学ぶ
- 熱量 (情熱) をもって活動!
- 秋葉原プログラミング教室
- 週刊アスキーの編集長を長くやっていた
- UEIエデュケーションズ
- ベーシックコース (JavaScript), AI プログラミングコース
- 公文式のような方式
- 母親とくると入ることが多いが、父親とくると入らないことが多い
- 質疑応答
- CoderDojo は寄付とかで成り立っている
- ループの概念はいつごろからわかってそうか?
- 概念は小さい頃からわかってそうだが「繰り返し」という言葉がわかるのは小2ぐらいからに感じる
- 個人差も大きい
- 英語
- 子供の集中力問題
- 子供が興味を持ってくれるかどうかはやってみないとわからない
- 長くて1時間とか1時間半とか
- 人によっては帰ってくれないぐらいの子供いる
- ものづくりでゲームに興味があれば休憩ありで4時間ぐらいは持つ
- 9分間メソッド
- 効果音を出すようにすると良い
Language Update (2)
- アルファベット順で前半3言語,後半4言語に分けた
- Language Update PHP 2018
- 自己紹介
- PHP の原作者は言語にあまり興味がない
- 「最初の開発者」であって BDFL ではない
- RFC → ML で議論 → 投票
- https://wiki.php.net/rfc
- php RFC watch
- PHP RFC Bot
- 昔ながらのレンタルサーバーで便利
- いろんな要素をあわせ持つ
- ほかの言語にあるような昨日は概ねある
- イテレータ・ジェネレータ
- トレイト (trait)
- 本物の trait
- クラスの遅延ロード
- Composer を利用するのが鉄板構成
- 最近は12月1日前後にリリースされる
- 2018年で PHP 5.x のサポートは終了
- OS ベンダーのサポート期間は別
- PHP 7.x
- PHP 8?
- コミュニティ
- PhpStorm の普及
- PHPDoc の現状
- 並列処理・非同期処理
- Python update in 2018
- 最近追加されたPythonの便利機能とこれからのPython in #ll2018jp - ぴよぴよ.py
- 自己紹介
- Most popular languages in Github で Java を抜いて2位に
- Jupyter Notebook は含まれていない
- Python 2 か 3 か問題は 3 に収束しつつある
- Recent update
- pathlib module
- 3.6 以降は open などの引数にも使えるように
- Type hints : 3.5 から
- 3.7 で実行時に
- Data Classes : 3.7 から
- Other especially update
- Future
- Guido が BDFL をやめた話
- Python 3.8
- 2019年10月リリース予定
- Guido 引退のきっかけにもなった PEP 572 代入演算子
:=
- Ruby
スライドはいつも通り Rabbit Slide Show (RubyGems), SlideShare, Speaker Deck にあげています。(ソースは github にあげています。)
ディスプレイのサイズは rabbit -S 1024,768 language-update-2018-ruby.md
でした。
- Rustこれまでとこれから
- 発表直前に twitter アカウントがロックされた
- 初なので差分はないので言語の紹介から
- 2015年に1.0リリース
- 偽物の trait
- 所有権システムにより GC がない
- エルゴノミクスにこだわった設計 : explicit な言語
- 後方互換を大事に
- 学習難易度は高め
- エラーメッセージが親切
- 学習曲線 : ライフタイムがわかれば一気にあがる
- The Rust Programming Language がよくできている
- ドキュメントが充実
- コミュニティベースの開発
- Mozilla が開発を支援 : 「Mozilla が作った言語」ではない
- stable, beta, nightly
- Mozilla の Firefox などと同じ?
- 6週間ごとにリリース
- 新機能は feature gate で試してから
- Survey でデータ・ドリブンで注力する領域を決めている
- 4つの Working Group とその目標
- Network, CLI, WASM, Embed
- 最近の話題
- SIMD Intrinsic
- メモリアロケータが選択可能に
- 非同期 : future, async/await
- Generic Associated Type : 雑にいうとProlog処理系をコンパイル時に動かす
- Compile Time Function Execution : 雑に言うとRustインタプリタをコンパイル時に動かす
- Rust 2018
- 構文の変更などが入る
- Rust 2015: stability
- Rust 2018: productivity
- 互換性はないけど相互運用性はある
- それぞれでコンパイルしてリンクするなど
次回の Language Update がいつになるかは未定。
twitter アカウントロックは休憩時間中に復活できたらしい。
LL.pm 最近のパッケージマネージャってどれがお勧め?
- 開始
- Learn Language’s Package Managers
- npm vs yarn
- 2018.06.25: search.cpan.org → metacpan.org
- OS の範囲は?
- 壁紙や起動音も
- パッケージマネージャ
- よく使う Linux コマンドは? → 1. sudo, 2. apt-get install
- 発表順はアルファベット順で
- C++
- パッケージマネージャあるの? というところからお願いします、という振りで始まった
- conan が使いにくいので poac を作った話 → 作っている
- 18年度未踏クリエータ
- (チャンネル指定で snap を連想した。) (conan のバージョンとチャンネル指定の両方あるのは最近だと semver 使えの方がいいのでは…)
- conan はパッケージの検索方法がわかりづらい
- サイトもわかりづらい
- poac
- プロジェクト名の由来
- 商標とかもちゃんと調査している
- 打ちやすさとか
- 全体の構成
- ランニングコストが高い
- ソースの一部の紹介
- GCC のバグを踏んだ
- サブコマンド
- ドキュメント生成も対応
- 最終目標
- javascript
- npm or yarn, that is a problem.
- 速度比較
- cache 無効 : yarn の勝利
- cache 有効 : yarn の勝利
-
npm ci
サブコマンド- CI/CD 用の余計なことをしないサブコマンド
- CI などでは yarn よりも高速
- yarn は開発用途に向いている
- npm は開発・運用でサブコマンドを分けている
- yarn にあって npm にない機能
- yarn licenses list
- yarn upgrade-interactive
- npm にあって yarn にない機能
- npm audit
- 最近はセキュリティが熱い (やばい)
- npm audit は npm の独自機能を使っている
- yarn は開発ツールとして優秀
- npm は運用ツールとして優秀
- yarn の罠
- 重複モジュールを削除する機能が npm と compatible な動きをしない
- yarn dedupe 不完全問題
- 実際には webpack モジュールとその依存で一回 NG になった
- npm の罠
- npm install で毎回 lock ファイルを書き換えてくる問題
- バグとして認識されているがなおっていない
- workaround: npm install –nosave OR npm ci
- Perl5 のパッケージマネージャ
- cpm の作者
- module のインストール : cpanm
- cpanm 自体のインストール方法
- 便利オプションの紹介
- 依存 module の宣言 : cpanfile
- requires にバージョンだけ書くと「固定」ではなく「以上」の意味になる
- 依存 module の version 保存、再現 : carton
- cpanm の他に CPAN.pm, CPANPLUS, cpm
- carton の他に carmel
- cpm は cpanm の3倍速い
- 最近の Perl バイナリマネージャー Perl 編
- めっちゃ古い Perl で動かないというバグレポートがめっちゃ来る
- Feb 2010 : perlbrew
- perlbrew 自体が perl で実装されているので遅い
- ruby などでは rbenv が流行り始めた
- rbenv を書き換えて plenv を作った
- perl-build
- 最近のイシュー : search.cpan.org が終わった (個人運用のサイトだった)
- Devel::PatchPerl
- 古いバージョンの Perl に対するパッチ集
- CPAN にあがっている
- 有志でメンテナンスされている
- Security fix のバックポート
- Perl 6
- rakudobrew
- panda (deprecated) → zef
- Pythonパッケージマネージャーはどれがおすすめ?
- Python は昔から使っている
- Python が流行っているのはドッキリではないかと疑うことがある
- PEP (Python Enhancement Proposals)
- PEP に従っていない anaconda の話はしない
- PyPA
- 作る人 : setuptools → twine → PyPI (pypi.org)
- 使う人 : pip virtualenv
- pip を使い始めるまで
- 今は
python get-pip.py
- ensurepip : 別途インストール不要になる, ディストリビューションによっては無効にされている
- 今は
- virtualenv / venv
- ensurepip が無効だと venv で問題が起きる
- lock ファイルのようなものはない
- development 環境をわけるとかできない
- pipenv
- development 環境をわけられる
- pip install pipenv (まだ黎明期だからのはず)
- パッケージマネージャーの選択肢
- virtualenv + pip
- pipenv
- pipenv がドキュメントに追加される予定
- pipenv から始めてみましょう
- Gems on Ruby
- RubyGems/Bundler/rbenv
- 日本語で読みたい人は WEB+DB PRESS Vol.103 をどうぞ
- 歴史
- RAA : パッケージ紹介サイト (2013/08 終了)
- RubyForge : 2009/10 終了
- gems.github.com : 2009/10 終了
- gemcutter.org → rubygems.org
- bundler
- 誰かが作ったものが流行っていく文化
- “Official” means “Matz controllable”
- チームが違う問題
- セキュリティ修正リリースもつらい
- bundler
- ライブラリーのバージョンを固定するツール
- dependency resolver (Molinillo) のバージョンが RubyGems と Bundler で違う
- rbenv
- バージョンマネージャー
- rubygems, bundler とはそもそも用途が異なる
- 英語での RVM と rbenv の聞き分けが難しい
- RVM, rbenv/ruby-build, chruby/ruby-install
- chruby がやっていることが少ない分一番軽い
- rbenv は柴田さんがメンテナなので issue が日本語でも読んでもらえる
- RVM はパッチをたくさん当てるのでトラブルシューティングが大変になることがある
- RubyGems 3
- 最初の Ruby は 2.3 という人も多い
- 古いバージョンの ruby 対応は捨てる
- 2FA : Google SoC で開発中
- RubyGems 4
-
--user-install
をデフォルトにしたい - 移行パスは考える必要がある
-
- RubyGems/Bundler integration
- 本格的に手をつけるのは bundler 2 リリース待ち
クロージング
- 今回も本の抽選は全員もらえるらしい
休み時間に Goならわかるシステムプログラミング の最後の1冊を買ってサインをもらったのですが、 抽選では Go言語でつくるインタプリタ が当たったので、 Go言語をもうちょっと頑張ろうと思いました。
Disqus Comments