Rustの実用性が理解できる図を作成してみた 〜C/C++/Java/JS/Python/Go/TS/Elixirとの比較〜

この記事はRust Advent Calendar 2022 - Qiitaの11日目の記事です。
(Zennに投稿した記事と同じものです。)

Rustはプログラマに愛されている言語だと言われています。でも、その愛されている理由をRustを知らない人に説明しようとしたとき苦労した経験はないでしょうか?たくさんの愛を語れば語るほど 「難しそう」 という一言に心を砕かれるのです。

続きを読む

Contextual Abstractionsで様々なコンテキストをうまく抽象化する

プログラミングでは様々な「コンテキスト」を扱う必要が出てきます。コンテキストをうまく扱えないと冗長な記述が必要になったり、コンテキストが複雑になりすぎて混乱を招いたりします。特にコンテキストの引き回しは様々なプログラミング言語やフレームワークで出てくるパターンですが、安易に使うと複雑性、冗長性の増大や密結合等さまざまな問題を引き起こすことが知られています。しかしScala 3の目玉機能であるContextual Abstractions(コンテキスト抽象化) を使えばこの問題を鮮やかに解決できます。

本記事ではContextual Abstractionsがなぜコンテキストをうまく扱うことができるのかを説明したいと思います。

続きを読む

RubyKaigi Takeout 2020

RubyKaigi Takeout 2020を視聴しました。残念ながら仕事の関係でライブ参加は Day2 のみです(Day1 は後から視聴しました)。今年は松本で行われるはずのRubyKaigiが中止になって悲嘆に暮れていたところでしたが、オンラインイベントでも開催して頂けて本当に嬉しかったです。
続きを読む

Rustに影響を与えた言語たち

Rustを使っていると時々「あれ?この機能、他の言語に似てない?」と思うことがあります。最初に思ったのはトレイトで、これはHaskellの型クラスやScalaのImplicitsを使った型クラスパターンと同等な機能と理解しました。クロージャのシンタックスはRubyのブロック記法に似ているなと感じました。そんな「似ている」を少しだけ深堀りしてみたいと思い、Rustに影響を与えた言語を調べて見ました。

続きを読む

Re:FizzBuzzから始めるRust生活

新しいプログラミング言語に入門するためには、やはり手を動かすことが大事です。本を読んで体系的に学ぶのももちろん重要ですが、それは言語の魅力を知ってからでも遅くはありません。

しかし「Hello World」レベルだと簡単すぎて言語の違いを味わえず、ネットワークプログラミングのような高度なプログラミングはフレームワークの力が大きすぎて言語とフレームワークの狭間で立ち往生することになります。

そこで登場するのが「FizzBuzz」です。「FizzBuzz」は単純なプログラムでありながら、プログラムの真髄である「順次」「分岐」「繰り返し」があり、数値計算も学べる興味深い題材です。

その「FizzBuzz」を利用して「Rust」という言語を学んでみようのが本記事の趣旨です。「FizzBuzz」というシンプルなプログラムで「Rust」のような表現力が豊かな言語の機能をどこまで使い尽くせるのかは興味が尽きないところですが、本記事では入門という観点で初歩的なFIzzBuzzから順を追って体を慣らしながらRustのある生活を体験できるようにしたいと思います。

さぁ、FizzBuzzからRust生活を始めましょう。

続きを読む

Scala3と圏論とプログラミング

最近、圏論とプログラミングという素晴らしい資料を拝読しました。圏論とプログラミング愛に溢れる資料で読んでいて目頭が熱くなりました。そうだよな・・・プログラマにも圏論いるよな・・・

ただ、自分にとって残念だったのは、資料で説明用に選択されたプログラミング言語が「Haskell」だったことです。もちろんHaskellは素晴らしい言語です。ただ、自分にとってHaskellは外国語なのでちょっと理解が難しいのです。そしてこの資料が「Scala」で書かれていたらと夢想せずにはいられなかったのです。

Scalaと言えば昨年末にScala3のリサーチコンパイラのDottyがFeature Completeを宣言しました^1。この宣言で新機能の追加は終了して、あとは2020年末のリリースに向けてひたすら品質を上げていく段階に突入しました。つまり、ようやく次世代のScalaが全貌を現したということです。

ここである考えが脳裏を過りました。もしかしたら「圏論とプログラミング」に出てくるHaskellの記述を「素のScala3」で置き換えられるのではないかと。

本記事ではその疑問を検証してみたいと思います。

続きを読む

🎉🎉祝Ruby2.7リリース🎉🎉 クリスマスなのでRubyの22年に渡るコミットの歴史を可視化してみた

この記事はRuby Advent Calendar 2019の25日目の記事です。

本日はクリスマスということで、例年ならRubyの新バージョンがリリースされる日になります。
新バージョンのRuby 2.7はRC2までやってきたので、リリースに向けて着実に進んでいるようです。
🎉🎉 そして無事に本日リリースされました!! おめでとうございます!!! 🎉🎉
(本記事投稿時点ではまだリリースはされていません。)

そこでRuby2.7のリリースのお祝いとコミッターのみなさんのハードワークに感謝の気持ちを込めて、Rubyの22年に渡るコミットの歴史を可視化してみたいと思います。

続きを読む

Scala 3、Pythonのようにインデントベースの構文で書けるようになるってよ!

ここ数年でインデントベースの記述は広くプログラマ界隈で受け入れられるようになってきました。プログラミング言語ではPythonの成功が大きく、ドキュメントではmarkdownとyamlが広く普及しています。そしてScala 3でもとうとうその波に乗ろうという動きが見えてきました・・・

(2019年9月28日追記・更新: 追記内容はここを見てください)
(2019年11月16日追記・更新: 追記内容はここを見てください)

続きを読む

Go Modulesとマルチモジュール構成でGo Homeする方法

Go Modulesでマルチモジュールにする方法がわからなくて調べました。発端は単にgo.modがある別モジュールのパッケージをインポートしようとしても出来なかったことです。そこで、Go Modulesでマルチモジュールを実現するためのシナリオを説明してみたいと思います。

続きを読む
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×