Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。この本では、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...
![Scala.jsを使って、ScalaをJavaScriptにコンパイルする](https://cdn-ak-scissors.b.st-hatena.com/image/square/bae0747fc04004fd680a1cbd72faad9e9f489903/height=288;version=1;width=512/https%3A%2F%2Fcdn.infoq.com%2Fstatics_s1_20240705081916%2Fstyles%2Fstatic%2Fimages%2Flogo%2Flogo-big.jpg)
独習 Scalaz これまでいくつのプログラミング言語が羊の衣を着た Lisp に喩えられただろうか? Java は馴染み親しんだ C++ のような文法に GC を持ち込んだ。それまで他にも GC を載せた言語はあったけども、現実的に C++ の代替となりうる言語に GC が載ったことは 1996年には画期的に思われた。やがて時は経ち、人々は自分でメモリ管理をしないことに慣れていった。JavaScript と Ruby の両言語もその第一級関数 (first-class function) やブロック構文を持つことから羊の衣を着た Lisp と呼ばれたことがある。S式の同図像性がマクロに適することから Lisp系の言語はまだ面白いと思う。 近年の言語はもう少し新しい関数型言語から概念を借りるようになってきた。型推論やパターンマッチングは ML にさかのぼることができると思う。時が経てば、人
Java8 から追加されるインターフェイスの default 実装ですが、C# の拡張メソッドに似てますよね。 実際、このどちらも「シンインターフェイス」を定義するだけで「リッチインターフェイス」が手に入ります。 しかし、C# の拡張メソッドと Java のインターフェイスの default 実装には、それぞれの利点と欠点があります。 拡張メソッドの利点 拡張メソッドの利点は、インターフェイスの実装者だけでなく、 インターフェイスの使用者に対してもインターフェイスの拡張が開かれている点です。 既存の型ですら、後付けでメソッドを追加することができるということです。 using System; public static class StringExtension { // インターフェイスでなくても、どんな型に対しても拡張可能 public static int ToInt(this str
要求開発アライアンスのセッション『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』で使用するスライドについて背景説明を行ってきました。 関数型言語の技術マップオブジェクト・モデリングのボトルネック代数的構造デザインパターン今回は背景説明第4弾で、「圏論デザインパターン」として用意した以下の図を説明します。 関数型言語の技術マップで説明したように、型クラスの導入によって代数的構造や圏論の理論をプログラミング言語で直接利用できるようになりました。 代数構造的デザインパターンは、基本中の基本概念であるので、モノイド以外のパターンもいずれ広く使われるようになることが予想されますが、今の所広く使われているのは圏論デザインパターンの方です。 代表的な圏論デザインパターンは以下のものです。 圏(category)対象と射(対象間の構造を保
はじめに 関数型といえばモナド、モナドといえば難しいという事が巷で言われていますが、いきなりモナドを理解しようとするから難しく思えるだけで、圏論から順序を追って理解していけば全然難しく無いんだよって事を分かって貰えればいいなぁと思い書いて見ることにしました。 ただ、圏論といっても適用範囲がとっても広く、応用編になると分けわかんなくなってくるので、ここではプログラミング分野に特化したFP(functional programing)圏論*1について書きます。 また、説明を簡単にする為に細かい部分をいろいろ省略しています。学術的な定義としては正確ではないので、このエントリの説明は大体合ってる位の気持ちで読んでくださいね。 尚、ぼくは圏論の詳しい事はさっぱり分からないので、学問的な話を振られても回答できませんキリッ 圏ってなんなの? 圏論と言えば、圏です。 圏って何なのかというと、対象(obje
Scala2.8から、Predefに<:<とか=:=とかが定義されていて、これなんだろ?とずーっと疑問だった訳ですよ。で、ついったーで質問投げてたらやっと理解できました。 教えて頂いた @ScalaTohoku さん、@okomok さん、@tioa さん、有り難うございました! "generalized type constraints"というヤツで、型パラメータに与えられた型が、特定の条件を満たす場合にのみ呼び出せるメソッドを定義できるというものです。しかもコンパイル時に静的にチェックされる!! これはスゴい!! What do <:<, <%<, and =:= mean in Scala 2.8, and where are they documented? - Stack Overflow =:=や<:<や<%<で特定の型のみ呼び出せるメソッドを定義する 具体的な例で説明します。
この記事はLL/ML Advent Calendarの4日目です。 LL/ML Advent Calendarの首謀者のひとりである@bleisさんが、最近スライドに貼りまくっていることりちゃんがどのように誕生したかについて書いてみようと思います。 ※ 記憶に基づくものなので、一部事実と異なる可能性があります。 その前に ことりちゃんの画像については、自由に転載・改変していただいてかまいません。 またオリジナルサイズの画像は以下にあります。 http://f.hatena.ne.jp/mzp/20121206231515 http://f.hatena.ne.jp/mzp/20121206231514 はじまり そもそもの発端は、@dico_lequeさんがモナド/do記法の薄い本を書いていることまでさかのぼります。 mzp「内容はでこちゃんだから問題ないとしても、たぶん地味な内容になるの
これが……型の力かッ……!! spray | Blog » The Magnet Patternという記事で、「The Magnet Pattern」というデザインパターンが紹介されている。 これは、メソッドオーバーロードで解決していた問題を、型クラスとDependent method typesを組み合わせて置き換えることで、オーバーロードの際の様々な制約(Type Erasureなど)を突破し、より柔軟な拡張性を得ることができるというもの。このパターンでは、引数の型に応じて異なる結果型を返すようにできる。 この記事で、今まで何のために使われるのかわからんかったDependent method typesの有効性が理解でき、あらためて型の力を思い知った。 以前に"Generalized type constraints"(Scalaで<:<とか=:=を使ったgeneraliz
subtyping (部分型)の話。僕が知る限りのごく狭い範囲では、メインストリームの静的型付け言語では nominal subtyping によって、動的型付け言語では duck typing によって、それは成されるようだ。それらには一長一短がある。間を取りたくなったら structural subtyping の出番だ。静的型付けの堅さを維持しながら、それでいて動的型付け言語の柔軟性にも触手を伸ばす。structural subtyping は、ハイブリッドな subtyping なのだ。 ちなみに先に告白しておくけど、本エントリでは OCaml、C++、Scala を題材とするが、僕は、いずれの言語をも使ったことがなく、一行たりともコードを書いたことはない。そんな人間が Web で拾った情報だけを頼りに書いている不甲斐ない文章だということを割り引いた上で、この先を読み進めていただけ
これはScalaを使った開発の雰囲気を感じてもらうための文章です。 ここでできるようになること Scalaプロジェクトの作成 簡単なScalaコードの作成 テストコードの実行 ログの表示 コードの実行時間の計測 システムにインストールできる形のパッケージを作成 準備 UNIX環境(Linux、 Mac OS X、あるいは Cygwin をWindowsでセットアップする) javaコマンドが使えること (環境変数PATHの設定など) その他、curl, GNU makeなどのコマンド インターネット接続 (ここから15分です) Scalaプロジェクトの作成 Scalaプロジェクトの必要最低限のひな形をGitHub上にscala-minとして作成してあります。以下のようにダウンロードしながら展開します。 $ mkdir myproject $ cd myproject $ curl -L h
先日の渋谷での第74回Scala勉強会では、nescalaの資料を読んだのですが 勉強会のwikiページ そのなかで、この資料 Dead-Simple Dependency Injection にでてくる Free Monad について。 勉強会中、とりあえずひと通り読んで、なんとなーく理解した後に 「あれ、これってIOモナドとか他のものでも書けるんじゃね?何が違うんだろう?」 的な意見がでて、だがしかしそれを詳しく説明出来る人もいないし、考えても調べてもすぐに分かるような問題じゃない・・・ので放置してた。 が、まさにそのことについて発表した本人が twitter 上で話していたのでメモ。 まぁこれもまた、なんとなくしか理解できてないですが・・・一応怪しい訳で、自分なりに簡単にまとめると Free Monad 以外でも書ける けど、Free Monad で書いたほうがプログラムが明確になる
有限会社ITプランニング勤務のプログラマー。Scala、OCaml、F#などの静的型付け関数型言語を利用したシステム開発業務に従事。定理証明支援器Coqやモデル発見器Alloyといった形式手法ツールの業務への応用にも興味を持っている。 前回は、アクターとはメッセージ受信ループを内包した並行に動く計算主体であること、Scalaにはアクタースタイルの並行プログラミングをサポートする基本機能やタイムアウト、Futureなどの便利な機能が備わっていることをご紹介しました。 今回は、アクターを実戦に投入するに当たって知っておきたい、パフォーマンスに関する議論について解説します。やや詳細に踏み込んでいきますが、「アクターには飽きたー」などと言わず、最後までお付き合いください。 なお、本稿ではScala Version 2.8.0を前提とします。Version 2.7.7のアクター用タスクスケジューラー
本Webページの作成には Emacs org-mode を用い, 数式等の表示は MathJax を用いています. IEでは正しく表示されないことがあるため, Firefox, Safari等のWebブラウザでJavaScriptを有効にしてお使いください. また org-info.js を利用しており, 「m」キーをタイプするとinfoモードでの表示になります. 利用できるショートカットは「?」で表示されます. 数学では,定義の中に自分自身が現れることがある. たとえば n の階乗は次のように定義される. \begin{eqnarray*} n! & = & \left\{ \begin{array}{ll} 1 & (n=0) \\ n\times (n-1)! & (n\geq1) \end{array} \right. \end{eqnarray*} このように定義の中に自分自身が
与えられた整数で割り切れる数をリストから取り除くにはfilterを用いる. scala> Range(2, 10).toList.filter(_ % 2 != 0) res: List[Int] = List(3, 5, 7, 9) エラトステネスの篩を実装する. 1: object Sieve { 2: def sieve(xs: List[Int]): List[Int] = 3: if (xs.isEmpty) 4: Nil 5: else 6: xs.head :: sieve(xs.tail.filter(_ % xs.head != 0)) 7: 8: def primes(n: Int) = sieve(Range(2, n).toList) 9: 10: def main(args: Array[String]) { 11: primes(100).foreach { p
どう書く?orgでScalaを書いてくれる人もでてきたので、超一部の方向けにScalaのことでも書いてみようと思います。言うなれば、基礎を終えた人のScalaミニtips。知っている人は知っている、でもあまり知られていないことを並べていきます。 下に行くほどマニア度あがります、たぶん。FPよりの話が多いかもしれません。はやりのYコンビネータの話とか。たぶん。 ではいってみましょう。 Predefされているものは把握しておきましょう Scalaにはscala.Predefというオブジェクトがあります。この中で定義されているものは常にインポートされていて使える状態になっているので把握しておきましょう。 例: 1def exit(status: Int): Nothing = { 2 java.lang.System.exit(status) 3 throw new Throwable() 4}
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く