唐突ですが、indy*1を使用して、Brainfuck言語処理系を実装してみます。Brainfuckはいわゆる一つの奇妙なプログラミング言語ですが、処理系の実装が容易であることを重視して設計されたチューリング完全な言語であり、試しに実装してみるのには良いでしょう。 とはいえ、残念ながらBrainfuckは動的言語ではないので、あんまりindyが役にたちません。 そこで、一捻りとして、"++--"といった命令列を文字列として保持し、Bootstrapメソッドの実行時に「メソッド呼び出しの列を表現するMH」として生成してみます。"+"がp()、"-"がm()というメソッド呼び出しに対応するとすると、"++--"というオプション引数を受けとったならば、「p(), p(), m(), m(),」という一連の呼び出しを結合したMHをMethodHandles.filterReturnValueで作成
Java8でのラムダの使い方などを説明してきたのですが、構文拡張自体には触れていなかったので、改めてここで簡単に説明しておこうと思います。 まずは、Java8で実際に最もインパクトがある言語拡張、インタフェースのデフォルトメソッドです。 デフォルトメソッドとデフォルト実装 いままでインタフェースには実装をもつことができませんでしたが、Java 8からはインタフェースが実装をもてるようになります。 実装をもつメソッドを定義するときには、キーワードdefaultをメソッドの前につけます。 interface Foo{ void print(String s); default void twice(String s){ print(s); print(s); } } twiceメソッドが実装をもっています。この実装をデフォルト実装といいます。 デフォルトメソッドを実装するクラスで、デフォルトメ
What's Mirage? Mirage is an easy and powerful SQL centric database access library. 2WaySQLThe main feature of Mirage is 2WaySQL. This makes plain old SQL template, and it is executable using any SQL client tools because parameters and conditions are written as SQL comment. SQL less UpdateGenerally, update processing are simpler than search processing. However, especially, large INSERT SQL brings u
socket.ioがJavaやGrailsから扱えるかを調べている関係でvert.xを調べていて興味深かったので、こちらにあるVert.xの記事を翻訳してみました。JGGUG G*Workshopにおける杉浦さんのVert.x資料もお奨めです。 Vert.xは急速に発達つつあるサーバ・フレームワークです。 世にあまたあるサーバ・フレームワークのいずれもが、多様なプロトコルをサポートし、高速であることが特長であると主張していますが、Vert.xはそれらよりも一歩抜きん出ています。例えば、Vert.xは、サーバサイドのネットワーク環境の確立と操作も対象としています。言いかえれば、Vert.xは、単一サーバ上のデーモン実行だけでなく、クラスタリング環境での複数サーバデーモンの実行を考慮しているのです。 したがって、Vert.xを調査するにあたっては、どのように高性能を実現しているかだけではなく、
Java8にlambda構文が入りましたが、これはクロージャーではない、とされています。 では、どのように「クロージャーではない」のか、ちょっと見てみます。 まず、lambdaを返すメソッドを定義します。 public static Supplier<String> createMessenger(String name, String address){ return () -> { return String.format("私は%s、%sに住んでる", name, address); }; } 呼び出すと、こんな感じでSupplierを受け取ります。 Supplier<String> messenger = createMessenger("きしだ", "ふくおか"); このSupplierを実行すると、次のようになります。 System.out.println(messenger.
先日、 [twitter:@seratch]さんから教えていただいたQuerydslがすごい良かったので記事として書きます。 http://www.querydsl.com/ JPAにおける課題 JPAではJPQLとCriteriaという二つのクエリ記述言語があります。 しかしながら、それぞれ使い勝手という意味では難のあるものでした。 JPQL JPQLは以下のような、SQLライクなクエリ記述言語です。 select new com.github.megascus.EmployeeBean(e.code, e.name, e.age) from Employee as e where name like 's%'SQLライクに記述することができるため、SQLが理解できる人にとっては理解しやすいという利点があります。 しかしながら、JPQL自体はただの文字列で定義する必要があります。 そのた
FastRubyはRubyをJavaに変換するコンパイラーです。 Rubyは1.9系になり、高速化されました。現在開発中の2.0系になればさらに高速化されるでしょう。そんな中、さらに高速な実装を目指しているのがFastRuby、RubyからJavaに変換するソフトウェアです。 実行します。 生成されたJavaのコード。 筆者環境ではJavaを実行するとエラーになってしまいましたが、RubyのコードからきちんとJavaが生成されました。JRuby向けに書かれたコードをJavaに変換することで、さらにコンパイルして実行速度を高めるという仕組みのようです。 FastRubyはJava製のソフトウェア(ソースコードは公開されていますがライセンスは明記されてません)です。 MOONGIFTはこう見る 言語の壁を乗り越えるようなプロジェクトが最近の流行かも知れません。JavaScriptで作られた各言
Jansi is a small java library that allows you to use ANSI escape sequences to format your console output which works even on windows. Using jansi is easy. Before you start sending ANSI escape sequences to System.out make sure you run: If you would rather not mess with the System.out settings, you can use the AnsiConsole.out PrintStream instead. For example:
大規模ミッションクリティカル系システムのためのTips。 たった1分遅れただけで、満席になってて座れないぐらいの人気セッションでした。 内容的にも、知らなかったTipsが多い、得るものの多いセッションでした。 このセッションで対象にするシステムは、メモリが16〜100GBぐらい、 スレッドが10〜100ぐらい同時に動くような規模のもの。 1. Heapを抑えるために、Composed OOPS (COOPS) を使いなさい。 方法 : -XX:+UseCompressedOOPS 効果 : ヒープに長く残っている情報を圧縮する。実際2.76GB → 2.27GBになった。 2. 1スレッドで(1リクエストで)たくさんのオブジェクトを生成する場合は、NUMAを使いなさい 方法 : -XX:+UserNUMA 効果 : GCの効率が改善する 3. 共有メモリを良いパフォーマンスで読み出したいな
Java Programming Language JDK7プロジェクトはJDK7の開発がFeature Complete (FC)のマイルストーンに到達したことを発表した。FCは計画されていたすべての機能が実装され、また機能をテストするための試験コードの実装も完了したことを意味している。当初のスケジュールでは2010年12月16日にFCに到達する予定になっていたため1ヶ月遅れでの到達になったが、JDK7のリリースへ向けた開発は着実に進められていることがわかる。 すべての機能が実装されたものがFCと定められているが、ネガティブな影響を与えないものに関してはFCのフェーズをすぎたあとからでもマージが例外的に認められている。JDK7の場合、XMLスタックの更新とJRockitから持ってくる拡張されたJMXエージェントおよびMBeansがそれに該当する。 今後はリリースへ向けたバグ修正や改訂され
On behalf of the team and everyone who has contributed, I am pleased to announce that the Spring Cloud Gateway 3.1.10, 4.0.12, 4.1.8, 4.2.3, 4.3.0 are available now which fix CVE-2025-41235. See the CVE report for breaking changes. Spring Cloud Gateway 4.0.12 is a commercial-only release and is not available in Maven Central. Please refer to the releases page for more detail on what is included in
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く