More Related Content More from Hiroki Mizuno (12) Sml#探検隊13. 考察
SML#
好き
興味ない
名古屋の人たち
SML
8
15. SML#の特徴
多相レコード
# fun get_x x = #x x;
val get_x = fn : ['a#{x: 'b}, 'b.
'a -> 'b]
# get_x { x = 1, y = 2 };
val it = 1 : int
# get_x { x = 1, y = 2, z = 3 };
val it = 1 : int
10
16. SML#の特徴
Cが呼べる
# val puts = _import "puts" :
string -> int;
val puts = fn : string -> int
# puts "hello";
hello
val it = 10 : int
11
18. 魔改造SML#: cop
# op +;
val it = <fun> : (int, int) -> int
# cop +;
val it = <fun> : int -> int -> int
13
31. 型が分からないと困る
.....
struct
structure MLLex =
MLLexFun(structure Tokens = MLLrVals.Tokens)
structure ParserData =
MLLrVals.ParserData
val makeLexer =
fn s => fn arg =>
LrParser.Stream.streamify (MLLex.makeLexer s arg)
val LrParse = fn (lookahead,lexer,error,arg) =>
(fn (a,b) => (MLLrVals.ParserData.Actions.extract
a,b))
(LrParser.parse {table = ParserData.table,
lexer=lexer,
.....
21
32. 型が分からないと困る
.....
struct
structure MLLex =
MLLexFun(structure Tokens = MLLrVals.Tokens)
??????
structure ParserData =
MLLrVals.ParserData
val makeLexer =
fn s => fn arg =>
LrParser.Stream.streamify (MLLex.makeLexer s arg)
val LrParse = fn (lookahead,lexer,error,arg) =>
(fn (a,b) => (MLLrVals.ParserData.Actions.extract
a,b))
(LrParser.parse {table = ParserData.table,
lexer=lexer,
.....
21
36. LoadFile DatatypeCompilati doBitmapANormal doRTLX86Emit
Elaboration doStaticAnalysis doClosureConversi doRTLX86AsmGen
VALRECOptimizati doInlining toYAANormal doRTLX86Assembl
FundeclElaboration doMVOptimization doYAANormalOpti
TypeInference doFunctionLocalize doStaticAllocation
UncurryOptimizatio doStaticAnalysis doAIGeneration2
PrinterGeneration doInlining doRTLX86Select
MatchCompilation doMVOptimization doRTLX86Stabilize
FFICompilation doFunctionLocalize doRTLRename
RecordCompilation doBitmapCompilati doRTLX86Coloring
37. LoadFile DatatypeCompilati doBitmapANormal doRTLX86Emit
Elaboration doStaticAnalysis doClosureConversi doRTLX86AsmGen
VALRECOptimizati doInlining toYAANormal doRTLX86Assembl
FundeclElaboration doMVOptimization doYAANormalOpti
TypeInference doFunctionLocalize doStaticAllocation
UncurryOptimizatio doStaticAnalysis doAIGeneration2
PrinterGeneration doInlining doRTLX86Select
MatchCompilation doMVOptimization doRTLX86Stabilize
FFICompilation doFunctionLocalize doRTLRename
RecordCompilation doBitmapCompilati doRTLX86Coloring
38. 型推論直後を狙う
Elaboration
VALRECOptimization
FundeclElaboration
TypeInference
UncurryOptimization
24
39. 型推論直後を狙う
Elaboration
VALRECOptimization
FundeclElaboration
TypeInference
UncurryOptimization
24
40. 型推論直後を狙う
Elaboration
VALRECOptimization
FundeclElaboration
型情報のダンプを
TypeInference 追加する
UncurryOptimization
24
41. 宣言の型
src/compiler/typedcalc/main/TypedCalc.ppg.smi
datatype tpdecl =
...
| TPFUNDECL of
{ argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPPOLYFUNDECL of
Types.btvEnv
* { argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPVAL of (Types.varInfo * tpexp) list * Loc.loc
25
42. 宣言の型
src/compiler/typedcalc/main/TypedCalc.ppg.smi
datatype tpdecl =
...
型情報
| TPFUNDECL of
{ argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPPOLYFUNDECL of
Types.btvEnv
* { argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPVAL of (Types.varInfo * tpexp) list * Loc.loc
25
43. 宣言の型
src/compiler/typedcalc/main/TypedCalc.ppg.smi
datatype tpdecl =
...
型情報
| TPFUNDECL of
{ argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
位置情報
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPPOLYFUNDECL of
Types.btvEnv
* { argTyList:Types.ty list, bodyTy:Types.ty,
funVarInfo:Types.varInfo,
ruleList:{args:tppat list, body:tpexp} list} list
* Loc.loc
| TPVAL of (Types.varInfo * tpexp) list * Loc.loc
25
44. 式の型
datatype tpexp =
...
| TPSQLSERVER of
{loc:Loc.loc, resultTy:Types.ty,
schema:Types.ty LabelEnv.map LabelEnv.map,
server:string}
| TPTAPP of
{exp:tpexp, expTy:Types.ty,
instTyList:Types.ty list,
loc:Loc.loc}
| TPVAR of Types.varInfo * Loc.loc
26
45. 式の型
datatype tpexp =
...
| TPSQLSERVER of
{loc:Loc.loc, resultTy:Types.ty,
schema:Types.ty LabelEnv.map LabelEnv.map,
server:string}
| TPTAPP of
{exp:tpexp, expTy:Types.ty,
instTyList:Types.ty list,
loc:Loc.loc}
| TPVAR of Types.varInfo * Loc.loc
型情報
26
46. 式の型
datatype tpexp =
...
| TPSQLSERVER of
{loc:Loc.loc, resultTy:Types.ty,
schema:Types.ty LabelEnv.map LabelEnv.map,
server:string}
| TPTAPP of
{exp:tpexp, expTy:Types.ty,
instTyList:Types.ty list,
loc:Loc.loc}
| TPVAR of Types.varInfo * Loc.loc
型情報 位置情報
26
47. 型の型・位置の型
structure Types = struct
val tyToString : ty -> string
end
structure Loc = struct
...
val fileNameOfPos : pos -> string
val lineOfPos : pos -> int
val colOfPos : pos -> int
end
27
48. 型情報のダンプ
fun outputExpr stream (e : tpexp) =
case e of
TPAPPM {funTy, loc, funExp, argExpList, ...} =>
(annot stream loc funTy;
outputExpr stream funExp;
List.app (outputExpr stream) argExpList)
| TPCASEM {ruleBodyTy, loc, expList, ruleList, ...} =>
(annot stream loc ruleBodyTy;
List.app (outputExpr stream) expList;
List.app (fn x => outputExpr stream (#body x)) ruleList)
| TPCAST (exp, ty, loc) =>
(annot stream loc ty;
outputExpr stream exp)
| TPCONSTANT {loc, ty, ...} =>
annot stream loc ty
| TPDATACONSTRUCT {loc, con, argExpOpt, ...} =>
(annot stream loc (#ty con);
case argExpOpt of
SOME x =>
outputExpr stream x 28
49. | TPERROR =>
()
| TPEXNCONSTRUCT {argExpOpt, exn,loc, ...} =>
(case exn of
EXEXN i =>
annot stream loc (#ty i)
| EXN i =>
annot stream loc (#ty i);
case argExpOpt of
SOME x =>
outputExpr stream x
| NONE =>
())
| TPEXN_CONSTRUCTOR {exnInfo, loc} =>
annot stream loc (#ty exnInfo)
| TPEXEXN_CONSTRUCTOR {exExnInfo, loc} =>
annot stream loc (#ty exExnInfo)
| TPEXVAR (info, loc) =>
annot stream loc (#ty info)
| TPFFIIMPORT {loc, ptrExp:tpexp, stubTy:Types.ty,...} =>
(annot stream loc stubTy;
outputExpr stream ptrExp)
29
50. | | TPFNM {bodyExp, bodyTy, loc, ...} =>
(annot stream loc bodyTy;
outputExpr stream bodyExp)
| TPGLOBALSYMBOL {loc, ty, ...} =>
annot stream loc ty
| TPHANDLE {exnVar, exp, handler, loc} =>
(annot stream loc (#ty exnVar);
outputExpr stream exp;
outputExpr stream handler)
| TPLET {body, decls, loc, tys} =>
(List.app (outputExpr stream) body;
List.app (outputDecl stream) decls
)
| TPMODIFY {elementExp , loc, recordExp, recordTy, ...} =>
(annot stream loc recordTy;
outputExpr stream elementExp;
outputExpr stream recordExp)
| TPMONOLET { binds, bodyExp, loc} =>
(List.app (fn (_,exp) =>
outputExpr stream exp) binds;
outputExpr stream bodyExp)
| TPOPRIMAPPLY {argExp, loc, oprimOp, ...} =>
(annot stream loc (#ty oprimOp);
outputExpr stream argExp)
| TPPOLY {exp, expTyWithoutTAbs, loc, ...} =>
(annot stream loc expTyWithoutTAbs;
outputExpr stream exp)
30
| TPPOLYFNM {bodyExp, bodyTy, loc, ...} =>
Editor's Notes \n Twitter&#x3068;&#x304B;Github&#x306F;&#x3053;&#x3093;&#x306A;&#x30A2;&#x30A4;&#x30B3;&#x30F3;&#x3067;&#x3084;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x540D;&#x53E4;&#x5C4B;&#x304B;&#x3089;&#x6C7A;&#x307E;&#x3057;&#x305F;&#x3002;\n ProofGeneral&#x3055;&#x3093;&#x304C;&#x304B;&#x308F;&#x3044;&#x304F;&#x306A;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x30B7;&#x30FC;&#x30EB;&#x304F;&#x3070;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;\n\n \n &#x30FB;&#x30B9;&#x30BF;&#x30FC;&#x30C8;&#x7CFB;&#x30A4;&#x30D9;&#x30F3;&#x30C8;&#x306B;&#x306E;&#x3063;&#x304B;&#x3063;&#x3066;&#x307F;&#x305F;&#x3002;(33&#x4EBA;)\n&#x30FB;&#x5927;&#x5800;&#x5148;&#x751F;&#x3068;&#x4E0A;&#x91CE;&#x3055;&#x3093;&#x307E;&#x3067;&#x6765;&#x305F;&#x8C6A;&#x83EF;&#x30B9;&#x30D4;&#x30FC;&#x30AB;&#x30FC;\n--\n&#x30FB;&#x65B0;&#x3057;&#x3044;LT&#x30B9;&#x30BF;&#x30A4;&#x30EB;&#x304C;&#x3046;&#x307E;&#x308C;&#x305F;\n &#x30FB;&#x540D;&#x53E4;&#x5C4B;&#x306B;&#x306F;&#x3069;&#x3048;&#x308A;&#x3083;&#x3042;&#x3068;&#x3044;&#x3046;&#x30AB;&#x30D5;&#x30A7;&#x304C;&#x3042;&#x3063;&#x305F;&#x3093;&#x3067;&#x3059;&#x304C;&#x3001;&#x305D;&#x3053;&#x3067;10&#x4EBA;&#x304F;&#x3089;&#x3044;&#x3067;&#x30CF;&#x30C3;&#x30AB;&#x30F3;&#x3084;&#x308A;&#x307E;&#x3057;&#x305F;&#x3002;\n&#x30FB;SML#&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x3092;&#x6539;&#x9020;&#x3059;&#x308B;&#x4F1A;\n&#x30FB;&#x3053;&#x306E;&#x3068;&#x304D;&#x306E;&#x6210;&#x679C;&#x7269;&#x306B;&#x3064;&#x3044;&#x3066;&#x306F;&#x3042;&#x3068;&#x3067;&#x3066;&#x8A71;&#x3057;&#x307E;&#x3059;&#x3002;\n &#x5927;&#x5800;&#x672C;&#x306E;&#x8AAD;&#x66F8;&#x4F1A;\n &#x540D;&#x53E4;&#x5C4B;&#x306E;&#x4EBA;&#x305F;&#x3061;&#x306F;SML#&#x306F;&#x597D;&#x304D;&#x3060;&#x3051;&#x3069;SML&#x306B;&#x306F;&#x8208;&#x5473;&#x306A;&#x3044;\n &#x540D;&#x53E4;&#x5C4B;&#x306E;&#x4EBA;&#x305F;&#x3061;&#x306F;SML#&#x306F;&#x597D;&#x304D;&#x3060;&#x3051;&#x3069;SML&#x306B;&#x306F;&#x8208;&#x5473;&#x306A;&#x3044;\n &#x30FB;&#x304A;&#x304A;&#x307B;&#x308A;&#x5148;&#x751F;&#x306E;&#x5A18;&#x3055;&#x3093;&#x304C;&#x304B;&#x3044;&#x305F;\n&#x30FB;not BSD\n &#x30FB;&#x5168;&#x90E8;&#x306E;&#x30EC;&#x30B3;&#x30FC;&#x30C9;&#x306B;id&#x3068;&#x304B;name&#x3068;&#x304B;&#x3064;&#x3051;&#x3066;&#x3082;&#x5927;&#x4E08;&#x592B;&#x201D;&#x201D;\n \n &#x30FB;OCaml 296,591&#x3001;SML# 152,523&#x3001;GHC 364,766\n&#x30FB;&#x5358;&#x7D14;&#x306A;&#x6BD4;&#x8F03;&#x306F;&#x3067;&#x304D;&#x306A;&#x3044;\n&#x30FB;&#x6539;&#x9020;&#x3057;&#x3084;&#x3059;&#x3044;\n SML&#x306E;op&#x306F;Haskell&#x3084;OCaml&#x306E;&#x4EBA;&#x306B;&#x306F;&#x9055;&#x548C;&#x611F;&#x304C;&#x3042;&#x308B;\ncop = curried operator\n \n \n &#x30FB;&#x30D6;&#x30E9;&#x30A6;&#x30B6;&#x4E0A;&#x3067;&#x8A66;&#x305B;&#x308B;\n&#x30FB;&#x30B5;&#x30F3;&#x30C9;&#x30DC;&#x30C3;&#x30AF;&#x30B9;&#x5185;&#x3067;&#x5B9F;&#x884C;&#x3057;&#x3066;&#x3044;&#x308B;\n&#x30FB;SML#&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x81EA;&#x4F53;&#x306B;&#x306F;&#x3001;&#x7D50;&#x5C40;&#x624B;&#x3092;&#x3044;&#x308C;&#x3066;&#x3044;&#x306A;&#x3044;\n \n &#x30FB;&#x30E1;&#x30E2;&#x5E33;&#x3067;Haskell&#x66F8;&#x3044;&#x3066;&#x3044;&#x305F;&#x4EBA;&#x3092;&#x500B;&#x4EBA;&#x7684;&#x306B;&#x77E5;&#x3063;&#x3066;&#x307E;&#x3059;&#x304C;&#x3001;&#x666E;&#x901A;&#x306E;&#x4EBA;&#x306F;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x3092;&#x4F7F;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x4E16;&#x754C;&#x306B;&#x306F;2&#x3064;&#x306E;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x304C;&#x3042;&#x308B;&#x3002;&#x3069;&#x3061;&#x3089;&#x304C;&#x597D;&#x304D;&#x3067;&#x3059;&#x304B;\n---\n&#x30FB;emacs: sml-mode\n---\n&#x30FB;Eclipse\n----\n&#x30FB;&#x3088;&#x3093;&#x305F;&#x3055;&#x3093;&#x304C;&#x4F5C;&#x3063;&#x3066;&#x305F;&#x3002;&#x6700;&#x65B0;&#x7248;&#x306E;SML#&#x3067;&#x306F;&#x52D5;&#x304B;&#x306A;&#x3044;&#x3089;&#x3057;&#x3044;&#x306E;&#x3067;&#x3001;&#x4F7F;&#x3044;&#x305F;&#x3044;&#x3072;&#x3068;&#x306F;&#x5F7C;&#x306B;mention&#x3092;&#x9001;&#x308A;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;\n &#x30FB;&#x30E1;&#x30E2;&#x5E33;&#x3067;Haskell&#x66F8;&#x3044;&#x3066;&#x3044;&#x305F;&#x4EBA;&#x3092;&#x500B;&#x4EBA;&#x7684;&#x306B;&#x77E5;&#x3063;&#x3066;&#x307E;&#x3059;&#x304C;&#x3001;&#x666E;&#x901A;&#x306E;&#x4EBA;&#x306F;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x3092;&#x4F7F;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x4E16;&#x754C;&#x306B;&#x306F;2&#x3064;&#x306E;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x304C;&#x3042;&#x308B;&#x3002;&#x3069;&#x3061;&#x3089;&#x304C;&#x597D;&#x304D;&#x3067;&#x3059;&#x304B;\n---\n&#x30FB;emacs: sml-mode\n---\n&#x30FB;Eclipse\n----\n&#x30FB;&#x3088;&#x3093;&#x305F;&#x3055;&#x3093;&#x304C;&#x4F5C;&#x3063;&#x3066;&#x305F;&#x3002;&#x6700;&#x65B0;&#x7248;&#x306E;SML#&#x3067;&#x306F;&#x52D5;&#x304B;&#x306A;&#x3044;&#x3089;&#x3057;&#x3044;&#x306E;&#x3067;&#x3001;&#x4F7F;&#x3044;&#x305F;&#x3044;&#x3072;&#x3068;&#x306F;&#x5F7C;&#x306B;mention&#x3092;&#x9001;&#x308A;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;\n &#x30FB;&#x30E1;&#x30E2;&#x5E33;&#x3067;Haskell&#x66F8;&#x3044;&#x3066;&#x3044;&#x305F;&#x4EBA;&#x3092;&#x500B;&#x4EBA;&#x7684;&#x306B;&#x77E5;&#x3063;&#x3066;&#x307E;&#x3059;&#x304C;&#x3001;&#x666E;&#x901A;&#x306E;&#x4EBA;&#x306F;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x3092;&#x4F7F;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x4E16;&#x754C;&#x306B;&#x306F;2&#x3064;&#x306E;&#x30A8;&#x30C7;&#x30A3;&#x30BF;&#x304C;&#x3042;&#x308B;&#x3002;&#x3069;&#x3061;&#x3089;&#x304C;&#x597D;&#x304D;&#x3067;&#x3059;&#x304B;\n---\n&#x30FB;emacs: sml-mode\n---\n&#x30FB;Eclipse\n----\n&#x30FB;&#x3088;&#x3093;&#x305F;&#x3055;&#x3093;&#x304C;&#x4F5C;&#x3063;&#x3066;&#x305F;&#x3002;&#x6700;&#x65B0;&#x7248;&#x306E;SML#&#x3067;&#x306F;&#x52D5;&#x304B;&#x306A;&#x3044;&#x3089;&#x3057;&#x3044;&#x306E;&#x3067;&#x3001;&#x4F7F;&#x3044;&#x305F;&#x3044;&#x3072;&#x3068;&#x306F;&#x5F7C;&#x306B;mention&#x3092;&#x9001;&#x308A;&#x307E;&#x3057;&#x3087;&#x3046;&#x3002;\n &#x9078;&#x629E;&#x80A2;&#x304C;2&#x3064;&#x3042;&#x308B;&#x306A;&#x3089;&#x6BD4;&#x8F03;&#x3057;&#x306A;&#x3044;&#x3068;&#x3044;&#x3051;&#x307E;&#x305B;&#x3093;&#x3002;\n \n &#x30FB;fact&#x3050;&#x3089;&#x3044;&#x306A;&#x3089;&#x307E;&#x3060;&#x3057;&#x3082;&#x30EA;&#x30A2;&#x30EB;&#x306A;&#x30B3;&#x30FC;&#x30C9;&#x3060;&#x3068;&#x578B;&#x304C;&#x308F;&#x304B;&#x3089;&#x306A;&#x304F;&#x306A;&#x3063;&#x3066;&#x3057;&#x307E;&#x3046;&#x3002;\n&#x30FB;&#x3069;&#x3046;&#x3084;&#x3063;&#x3066;&#x3082;&#x7121;&#x7406;&#x306A;&#x3089;&#x307E;&#x3060;&#x8AE6;&#x3081;&#x304C;&#x4ED8;&#x304F;&#x308F;&#x3051;&#x3067;&#x3059;&#x304C;&#x3001;&#x5404;&#x5909;&#x6570;&#x306E;&#x578B;&#x60C5;&#x306F;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x306F;&#x77E5;&#x3063;&#x3066;&#x308B;&#x3002;\n&#x30FB;&#x306A;&#x306E;&#x3067;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x3092;&#x6539;&#x9020;&#x3057;&#x3066;&#x3001;&#x305D;&#x306E;&#x60C5;&#x5831;&#x3092;&#x5916;&#x304B;&#x3089;&#x4F7F;&#x3048;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;\n &#x666E;&#x901A;&#x306F;&#x30BD;&#x30FC;&#x30B9;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x3057;&#x3066;&#x5B9F;&#x884C;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x751F;&#x6210;&#x3057;&#x307E;&#x3059;&#x3002;\n--\n&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x3092;&#x6539;&#x9020;&#x3057;&#x3066;&#x578B;&#x60C5;&#x5831;&#x3092;&#x30C0;&#x30F3;&#x30D7;&#x3057;&#x305F;annot&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3082;&#x751F;&#x6210;&#x3059;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;&#x305D;&#x308C;&#x3092;emacs&#x304B;&#x3089;&#x8AAD;&#x307F;&#x3053;&#x3080;&#x3053;&#x3068;&#x3067;&#x3001;&#x578B;&#x60C5;&#x5831;&#x306E;&#x8868;&#x793A;&#x3092;&#x5B9F;&#x73FE;&#x3057;&#x307E;&#x3059;&#x3002;\n &#x666E;&#x901A;&#x306F;&#x30BD;&#x30FC;&#x30B9;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30EB;&#x3057;&#x3066;&#x5B9F;&#x884C;&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3092;&#x751F;&#x6210;&#x3057;&#x307E;&#x3059;&#x3002;\n--\n&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x3092;&#x6539;&#x9020;&#x3057;&#x3066;&#x578B;&#x60C5;&#x5831;&#x3092;&#x30C0;&#x30F3;&#x30D7;&#x3057;&#x305F;annot&#x30D5;&#x30A1;&#x30A4;&#x30EB;&#x3082;&#x751F;&#x6210;&#x3059;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;&#x305D;&#x308C;&#x3092;emacs&#x304B;&#x3089;&#x8AAD;&#x307F;&#x3053;&#x3080;&#x3053;&#x3068;&#x3067;&#x3001;&#x578B;&#x60C5;&#x5831;&#x306E;&#x8868;&#x793A;&#x3092;&#x5B9F;&#x73FE;&#x3057;&#x307E;&#x3059;&#x3002;\n SML#&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x3001;&#x3068;&#x3044;&#x3046;&#x304B;&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x306F;&#x8907;&#x6570;&#x306E;&#x30D1;&#x30B9;&#x306B;&#x3088;&#x3063;&#x3066;&#x69CB;&#x6210;&#x3055;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\nSML#&#x30B3;&#x30F3;&#x30D1;&#x30A4;&#x30E9;&#x306E;&#x5834;&#x5408;&#x3001;&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;(&#x3061;&#x3087;&#x3063;&#x3068;&#x5F85;&#x3064;)\n &#x4ECA;&#x56DE;&#x306F;&#x578B;&#x60C5;&#x5831;&#x306E;&#x30C0;&#x30F3;&#x30D7;&#x304C;&#x76EE;&#x7684;&#x306A;&#x306E;&#x3067;&#x3001;&#x5F8C;&#x534A;&#x306E;&#x6700;&#x9069;&#x5316;&#x3084;&#x30B3;&#x30FC;&#x30C9;&#x751F;&#x6210;&#x306F;&#x7121;&#x8996;&#x3057;&#x307E;&#x3059;&#x3002;\n&#x3067;&#x3001;&#x6700;&#x521D;&#x306E;&#x307B;&#x3046;&#x3092;&#x898B;&#x308B;&#x3068;&#x3061;&#x3087;&#x3046;&#x3069;&#x578B;&#x63A8;&#x8AD6;&#x3092;&#x3084;&#x3063;&#x3066;&#x3044;&#x308B;&#x30D1;&#x30B9;&#x304C;&#x898B;&#x3064;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;\n--\n&#x3053;&#x306E;&#x578B;&#x63A8;&#x8AD6;&#x304C;&#x304A;&#x308F;&#x3063;&#x305F;&#x76F4;&#x5F8C;&#x306B;&#x578B;&#x60C5;&#x5831;&#x3092;&#x30C0;&#x30F3;&#x30D7;&#x3057;&#x3066;&#x3084;&#x308C;&#x3070;&#x3088;&#x3055;&#x305D;&#x3046;&#x3067;&#x3059;&#x3002;\n--\n&#x306A;&#x306E;&#x3067;&#x3053;&#x306E;&#x3042;&#x3068;&#x306B;&#x51E6;&#x7406;&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x3066;&#x3001;&#x30C0;&#x30F3;&#x30D7;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;\n &#x4ECA;&#x56DE;&#x306F;&#x578B;&#x60C5;&#x5831;&#x306E;&#x30C0;&#x30F3;&#x30D7;&#x304C;&#x76EE;&#x7684;&#x306A;&#x306E;&#x3067;&#x3001;&#x5F8C;&#x534A;&#x306E;&#x6700;&#x9069;&#x5316;&#x3084;&#x30B3;&#x30FC;&#x30C9;&#x751F;&#x6210;&#x306F;&#x7121;&#x8996;&#x3057;&#x307E;&#x3059;&#x3002;\n&#x3067;&#x3001;&#x6700;&#x521D;&#x306E;&#x307B;&#x3046;&#x3092;&#x898B;&#x308B;&#x3068;&#x3061;&#x3087;&#x3046;&#x3069;&#x578B;&#x63A8;&#x8AD6;&#x3092;&#x3084;&#x3063;&#x3066;&#x3044;&#x308B;&#x30D1;&#x30B9;&#x304C;&#x898B;&#x3064;&#x304B;&#x308A;&#x307E;&#x3059;&#x3002;\n--\n&#x3053;&#x306E;&#x578B;&#x63A8;&#x8AD6;&#x304C;&#x304A;&#x308F;&#x3063;&#x305F;&#x76F4;&#x5F8C;&#x306B;&#x578B;&#x60C5;&#x5831;&#x3092;&#x30C0;&#x30F3;&#x30D7;&#x3057;&#x3066;&#x3084;&#x308C;&#x3070;&#x3088;&#x3055;&#x305D;&#x3046;&#x3067;&#x3059;&#x3002;\n--\n&#x306A;&#x306E;&#x3067;&#x3053;&#x306E;&#x3042;&#x3068;&#x306B;&#x51E6;&#x7406;&#x3092;&#x8FFD;&#x52A0;&#x3057;&#x3066;&#x3001;&#x30C0;&#x30F3;&#x30D7;&#x3067;&#x304D;&#x308B;&#x3088;&#x3046;&#x306B;&#x3057;&#x307E;&#x3059;&#x3002;\n \n \n \n &#x30FB;&#x5BA3;&#x8A00;&#x306E;&#x578B;&#x306F;&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x30D5;&#x30A9;&#x30F3;&#x30C8;&#x304C;&#x5C0F;&#x3055;&#x304F;&#x3066;&#x307F;&#x306B;&#x304F;&#x3044;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#x3001;&#x307F;&#x306A;&#x3055;&#x3093;&#x306E;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;SML#&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x76F4;&#x63A5;&#x898B;&#x3066;&#x3044;&#x305F;&#x3060;&#x3044;&#x3066;&#x3082;&#x7D50;&#x69CB;&#x3067;&#x3059;&#x3002;...&#x3068;&#x3046;&#x305C;&#x3093;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;&#x3057;&#x3066;&#x3042;&#x308A;&#x307E;&#x3059;&#x3088;&#x306D;?\n&#x30FB;SML#&#x306E;&#x5404;&#x5BA3;&#x8A00;&#x304C;&#x30B3;&#x30F3;&#x30B9;&#x30C8;&#x30E9;&#x30AF;&#x30BF;&#x306B;&#x5BFE;&#x5FDC;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x4E0A;&#x304B;&#x3089;&#x9806;&#x306B;&#x95A2;&#x6570;&#x5BA3;&#x8A00;&#x3001;&#x591A;&#x76F8;&#x306E;&#x95A2;&#x6570;&#x5BA3;&#x8A00;&#x3001;&#x5909;&#x6570;&#x5BA3;&#x8A00;&#x306B;&#x306A;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;\n---\n&#x30FB;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x306F;&#x578B;&#x60C5;&#x5831;&#x3068;&#x4F4D;&#x7F6E;&#x60C5;&#x5831;&#x304C;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;\n &#x30FB;&#x5BA3;&#x8A00;&#x306E;&#x578B;&#x306F;&#x3053;&#x3093;&#x306A;&#x611F;&#x3058;&#x306B;&#x306A;&#x3063;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x30D5;&#x30A9;&#x30F3;&#x30C8;&#x304C;&#x5C0F;&#x3055;&#x304F;&#x3066;&#x307F;&#x306B;&#x304F;&#x3044;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#x3001;&#x307F;&#x306A;&#x3055;&#x3093;&#x306E;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;SML#&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x76F4;&#x63A5;&#x898B;&#x3066;&#x3044;&#x305F;&#x3060;&#x3044;&#x3066;&#x3082;&#x7D50;&#x69CB;&#x3067;&#x3059;&#x3002;...&#x3068;&#x3046;&#x305C;&#x3093;&#x30C0;&#x30A6;&#x30F3;&#x30ED;&#x30FC;&#x30C9;&#x3057;&#x3066;&#x3042;&#x308A;&#x307E;&#x3059;&#x3088;&#x306D;?\n&#x30FB;SML#&#x306E;&#x5404;&#x5BA3;&#x8A00;&#x304C;&#x30B3;&#x30F3;&#x30B9;&#x30C8;&#x30E9;&#x30AF;&#x30BF;&#x306B;&#x5BFE;&#x5FDC;&#x3057;&#x3066;&#x3044;&#x307E;&#x3059;&#x3002;&#x4E0A;&#x304B;&#x3089;&#x9806;&#x306B;&#x95A2;&#x6570;&#x5BA3;&#x8A00;&#x3001;&#x591A;&#x76F8;&#x306E;&#x95A2;&#x6570;&#x5BA3;&#x8A00;&#x3001;&#x5909;&#x6570;&#x5BA3;&#x8A00;&#x306B;&#x306A;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;\n---\n&#x30FB;&#x30DD;&#x30A4;&#x30F3;&#x30C8;&#x306F;&#x578B;&#x60C5;&#x5831;&#x3068;&#x4F4D;&#x7F6E;&#x60C5;&#x5831;&#x304C;&#x542B;&#x307E;&#x308C;&#x3066;&#x3044;&#x308B;&#x3068;&#x3044;&#x3046;&#x3053;&#x3068;&#x3067;&#x3059;&#x3002;\n &#x30FB;(&#x53D7;&#x3051;&#x3066;&#x305F;&#x3089;)&#x30D5;&#x30A9;&#x30F3;&#x30C8;&#x304C;&#x5C0F;&#x3055;&#x304F;&#x3066;&#x307F;&#x306B;&#x304F;&#x3044;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#x3001;&#x307F;&#x306A;&#x3055;&#x3093;&#x306E;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;SML#&#x30B3;&#x30FC;&#x30C9;&#x3092;..\n&#x30FB;&#x4ECA;&#x5EA6;&#x306F;&#x5F0F;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;datatype&#x3067;&#x3059;&#x3002;&#x4E0A;&#x304B;&#x3089;&#x9806;&#x306B;sqlserver&#x3078;&#x306E;&#x63A5;&#x7D9A;&#x3001;&#x9069;&#x7528;&#x3001;&#x5909;&#x6570;&#x53C2;&#x7167;&#x306B;&#x306A;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x3053;&#x308C;&#x3082;&#x578B;&#x60C5;&#x5831;&#x3068;&#x4F4D;&#x7F6E;&#x60C5;&#x5831;&#x304C;&#x57CB;&#x3081;&#x8FBC;&#x307E;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;\n &#x30FB;(&#x53D7;&#x3051;&#x3066;&#x305F;&#x3089;)&#x30D5;&#x30A9;&#x30F3;&#x30C8;&#x304C;&#x5C0F;&#x3055;&#x304F;&#x3066;&#x307F;&#x306B;&#x304F;&#x3044;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#x3001;&#x307F;&#x306A;&#x3055;&#x3093;&#x306E;&#x30ED;&#x30FC;&#x30AB;&#x30EB;&#x306B;&#x3042;&#x308B;SML#&#x30B3;&#x30FC;&#x30C9;&#x3092;..\n&#x30FB;&#x4ECA;&#x5EA6;&#x306F;&#x5F0F;&#x306B;&#x5BFE;&#x5FDC;&#x3059;&#x308B;datatype&#x3067;&#x3059;&#x3002;&#x4E0A;&#x304B;&#x3089;&#x9806;&#x306B;sqlserver&#x3078;&#x306E;&#x63A5;&#x7D9A;&#x3001;&#x9069;&#x7528;&#x3001;&#x5909;&#x6570;&#x53C2;&#x7167;&#x306B;&#x306A;&#x3063;&#x3066;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x3053;&#x308C;&#x3082;&#x578B;&#x60C5;&#x5831;&#x3068;&#x4F4D;&#x7F6E;&#x60C5;&#x5831;&#x304C;&#x57CB;&#x3081;&#x8FBC;&#x307E;&#x308C;&#x3066;&#x3044;&#x307E;&#x3059;\n &#x30FB;&#x578B;&#x306F;tyToString&#x3067;&#x6587;&#x5B57;&#x5217;&#x306B;&#x3067;&#x304D;&#x308B;\n&#x30FB;&#x4F4D;&#x7F6E;&#x60C5;&#x5831;&#x306F;lineOfPos&#x3067;&#x884C;&#x756A;&#x53F7;&#x3001;colOfPos&#x3067;&#x5217;&#x756A;&#x53F7;&#x304C;&#x3068;&#x308C;&#x308B;\n &#x30FB;&#x3053;&#x308C;&#x3067;&#x60C5;&#x5831;&#x306F;&#x305D;&#x308D;&#x3063;&#x305F;&#x306E;&#x3067;&#x30C0;&#x30F3;&#x30D7;&#x3059;&#x308B;&#x30B3;&#x30FC;&#x30C9;&#x3092;&#x304C;&#x3057;&#x304C;&#x3057;&#x66F8;&#x3044;&#x3066;&#x3044;&#x304D;&#x307E;&#x3059;&#x3002;\n&#x30FB;&#x57FA;&#x672C;&#x7684;&#x306B;tpdecl&#x3068;tpexp&#x3092;&#x306A;&#x3081;&#x3066;&#x3044;&#x304F;&#x30B3;&#x30FC;&#x30C9;&#x306B;&#x306A;&#x308A;&#x307E;&#x3059;\n \n \n &#x30FB;&#x5E38;&#x306B;&#x30C0;&#x30F3;&#x30D7;&#x3059;&#x308B;&#x306E;&#x3082;&#x5FAE;&#x5999;&#x306A;&#x306E;&#x3067;&#x3001;&#x30B9;&#x30A4;&#x30C3;&#x30C1;&#x3067;&#x5207;&#x308A;&#x66FF;&#x3048;&#x308C;&#x308B;&#x3088;&#x3046;&#x306B;&#x3059;&#x308B;\n \n \n \n &#x30FB;camlspotter&#x3063;&#x307D;&#x304F;&#x3057;&#x305F;&#x3044;\n&#x30FB;&#x591A;&#x76F8;&#x30EC;&#x30B3;&#x30FC;&#x30C9;&#x306E;&#x578B;&#x304C;&#x3046;&#x307E;&#x304F;&#x6587;&#x5B57;&#x5217;&#x5316;&#x3067;&#x304D;&#x306A;&#x3044;\n &#x3053;&#x308C;&#x3067;&#x307F;&#x306A;&#x3055;&#x3093;&#x3082;SML#&#x3092;&#x6539;&#x9020;&#x3057;&#x305F;&#x304F;&#x306A;&#x3063;&#x305F;&#x3068;&#x601D;&#x3046;&#x306E;&#x3067;&#x3001;&#x3044;&#x304F;&#x3064;&#x304B;&#x958B;&#x767A;tips&#x3092;&#x7D39;&#x4ECB;&#x3057;&#x3066;&#x304A;&#x308F;&#x308D;&#x3046;&#x3068;&#x601D;&#x3044;&#x307E;&#x3059;&#x3002;\n \n &#x6700;&#x8FD1;&#x3001;Mac&#x304C;&#x3068;&#x308C;&#x3066;OS X&#x306E;&#x307F;&#x306B;&#x306A;&#x3063;&#x305F;&#x3068;&#x304B;&#x305D;&#x3046;&#x3044;&#x3046;&#x7D30;&#x304B;&#x3044;&#x3053;&#x3068;&#x306F;&#x8A31;&#x3057;&#x3066;&#x304F;&#x3060;&#x3055;&#x3044;&#x3002;\n64bit&#x3067;&#x30D3;&#x30EB;&#x30C9;&#x3067;&#x304D;&#x306A;&#x3044;&#x308F;&#x3051;&#x3058;&#x3083;&#x306A;&#x3044;&#x3093;&#x3067;&#x3059;&#x304C;&#x3001;&#x307E;&#x3042;&#x3001;&#x3044;&#x308D;&#x3044;&#x308D;&#x3068;&#x9762;&#x5012;&#x306A;&#x306E;&#x3067;&#x3001;&#x3044;&#x308D;&#x3044;&#x308D;&#x8A66;&#x3059;&#x3068;&#x304D;&#x306F;Ubuntu&#x306E;&#x307B;&#x3046;&#x304C;&#x697D;&#x3067;&#x3059;&#x3002;\n \n