嘘言語

昨日のSQLつづき

昨日の埋め込みについての話はびっくりするほどまとまっていなかった.それとは別にやりたいこと: SQL s="select a,b from Product"; for (%rec : s) { print " a=#{s.a} b=#{s.b} \n"; } ってやると,クエリの結果を表示する.ここまではあたりまえ.しか…

SQL を生成する文字列埋め込みに関する考察

select * from Product where name = 'hoge'; の hogeの部分に埋め込みをしたい.でもSQLインジェクションはさせたくない,という 場合になるべく簡単に書きたい. 方法1: %word="It's ok"; SQL s="select * from Product where name = #{word} "; とかく…

文法定義と型チェックをいっぺんにできないか?

次のプログラミング言語のパーサをつくってみよう. class Foo { int get () { test().get() this.set() } int test() { } } 普通,構文解析にパーサジェネレータを使うが,文法を定義する支援はしてくれても,意味解析はしてくれない.せめて型があっている…

末尾toString最適化

class Kakko{ final int a; String toString() { return ""; } } Kakko k=new Kakko(); k.a=3; System.out.println(k.toString()); // (これ以降kは出てこない) と書くとSystem.out.println("");というコードが生成される仕組みがあると,ライブラリが軽くな…

#{ } と ♭{ }

Ruby でおなじみの #{...} a = "My name is #{name}"; ".. " の中は自然言語,その外側はRubyである,と解釈できるので #{ ... } は,「1レベル上(=外側) の言語を参照する」という意味合いと考えられる.じゃあ,♭{... } があってもいいだろう. ♭{... }は…