📄 id.602271.mal
字号:
# Monet Mil to Mal compiler# Copyright (c) 2001-2004, CWI. All rights reserved.#Predefined code segment#The compiler can not guarantee an accurate compilation,#because MIL unlike MAL is a dynamically typed language.#A few guidelines to maximize usefullness.#- make the type of variables explicit, in particular 'nil'#- upon advice of M2m to remap identifiers, change it in your program directly#use the "mil_schema" for additional support routines# io.print("# Date:\t\t2002-08-30 00:57\n");# io.print("# Priority:\t5\n");# io.print("# Submitted By:\tAlex van Ballegooij (bally)\n");# io.print("# Assigned To:\tNiels Nes (nielsnes)\n");# io.print("# Category:\tNone\n");# io.print("# Status:\tClosed\n");# io.print("# Summary:\n");# io.print("# oid v.s. void bat behavior\n");# io.print("# \n");# io.print("# void bats behave differntly fomr oid bats under insertion, \n");# io.print("# yet it is possible to unexpectedly end up with void \n");# io.print("# bats after certain operations (e.g. join), which could \n");# io.print("# lead to unpredictable behavior. \n");# io.print("# Build two simple bats, using OIDs.\n"); aa_a := new(nil:oid,nil:oid); ba_a := oid(0); ca_a := oid(0); da_a := insert(aa_a,ba_a,ca_a); ea_a := oid(1); fa_a := oid(1); oid_oid_bat := insert(da_a,ea_a,fa_a);# io.print("var oid_oid_bat := insert(insert(bat(oid,oid),oid(0),oid(0)),oid(1),oid(1));"); ga_a := print(oid_oid_bat);# io.print(""); ha_a := new(nil:oid,nil:int); ia_a := oid(0); ja_a := insert(ha_a,ia_a,0); ka_a := oid(1); oid_int_bat := insert(ja_a,ka_a,1);# io.print("var oid_int_bat := insert(insert(bat(oid,int),oid(0),0),oid(1),1);"); la_a := print(oid_int_bat);# io.print("# Monet decides to make the join result VOID (which is possible),\n");# io.print("# what makes this problematic however is the difference in behavior in\n");# io.print("# the subsequent insert-tests.\n"); void_int_bat := join(oid_oid_bat,oid_int_bat);# io.print("var void_int_bat := join(oid_oid_bat,oid_int_bat);"); ma_a := print(void_int_bat);# io.print("# inserting 'in-sequence' into an OID bat\n");# io.print("# a single (OID) tuple \n"); na_a := copy(oid_int_bat); BAT_WRITE:= mil.take("BAT_WRITE"); oa_a := access(na_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); pa_a := oid(2); qa_a := insert(oa_a,pa_a,2); ra_a := print(qa_a);# io.print("# a complete (OID) bat.\n"); sa_a := copy(oid_int_bat); ta_a := access(sa_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); ua_a := new(nil:oid,nil:int); va_a := oid(2); wa_a := insert(ua_a,va_a,2); xa_a := insert(ta_a,wa_a); ya_a := print(xa_a);# io.print("# a complete (VOID) bat.\n"); ab_a := copy(oid_int_bat); bb_a := access(ab_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); cb_a := new(nil:oid,nil:int); fb_a := oid(2); gb_a := insert(eb_a,fb_a,2); hb_a := insert(bb_a,gb_a); ib_a := print(hb_a);# io.print("# inserting 'out-of-sequence' into an OID bat\n");# io.print("# a single (OID) tuple \n"); jb_a := copy(oid_int_bat); kb_a := access(jb_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); lb_a := oid(10); mb_a := insert(kb_a,lb_a,10); nb_a := print(mb_a);# io.print("# a complete (OID) bat.\n"); ob_a := copy(oid_int_bat); pb_a := access(ob_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); qb_a := new(nil:oid,nil:int); rb_a := oid(10); sb_a := insert(qb_a,rb_a,10); tb_a := insert(pb_a,sb_a); ub_a := print(tb_a);# io.print("# a complete (VOID) bat.\n"); vb_a := copy(oid_int_bat); wb_a := access(vb_a,BAT_WRITE);# io.print("print(insert(access(copy(oid_int_bat),BAT_WRITE),"); xb_a := new(nil:oid,nil:int); yb_a := oid(10); bc_a := oid(10); cc_a := insert(ac_a,bc_a,10); dc_a := insert(wb_a,cc_a); ec_a := print(dc_a);# io.print("# inserting 'in-sequence' into a VOID bat\n");# io.print("# a single (OID) tuple \n"); fc_a := copy(void_int_bat); gc_a := access(fc_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); hc_a := oid(2); ic_a := insert(gc_a,hc_a,2); jc_a := print(ic_a);# io.print("# a complete (OID) bat.\n"); kc_a := copy(void_int_bat); lc_a := access(kc_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); mc_a := new(nil:oid,nil:int); nc_a := oid(2); oc_a := insert(mc_a,nc_a,2); pc_a := insert(lc_a,oc_a); qc_a := print(pc_a);# io.print("# a complete (VOID) bat.\n"); rc_a := copy(void_int_bat); sc_a := access(rc_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); tc_a := new(nil:oid,nil:int); uc_a := oid(2); wc_a := oid(2); xc_a := insert(vc_a,wc_a,2); yc_a := insert(sc_a,xc_a); ad_a := print(yc_a);# io.print("# inserting 'out-of-sequence' into a VOID bat\n");# io.print("# a single (OID) tuple \n");# io.print("# This test gives an error:\n"); bd_a := copy(void_int_bat); cd_a := access(bd_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); dd_a := oid(10); ed_a := insert(cd_a,dd_a,10); fd_a := print(ed_a);# io.print("# These two tests give incorrect answers:\n");# io.print("# a complete (OID) bat.\n"); gd_a := copy(void_int_bat); hd_a := access(gd_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); id_a := new(nil:oid,nil:int); jd_a := oid(10); kd_a := insert(id_a,jd_a,10); ld_a := insert(hd_a,kd_a); md_a := print(ld_a);# io.print("# a complete (VOID) bat.\n"); nd_a := copy(void_int_bat); od_a := access(nd_a,BAT_WRITE);# io.print("print(insert(access(copy(void_int_bat),BAT_WRITE),"); pd_a := new(nil:oid,nil:int); qd_a := oid(10); sd_a := oid(10); td_a := insert(rd_a,sd_a,10); ud_a := insert(od_a,td_a); vd_a := print(ud_a);# io.print("#\n");# io.print("# The void-bats behave strange under insertion,\n");# io.print("# Either errors should be given consequently \n");# io.print("# (as soon as a tuple 'out-of-sequence' is inserted)\n");# io.print("# or void bats should be materialized to oid when needed.\n");# io.print("#\n");# io.print("# I would argue for the latter, as there is no real reason \n");# io.print("# for a user to expect the bat in this example to be void,\n");# io.print("# (a join result of a [oid,oid] and a [oid,int] bat), yet\n");# io.print("# it behaves differently from what a user would expect from\n");# io.print("# the (expected) [oid,int] bat.\n");# io.print("#\n");# io.print("# The provided stable output has been hand-crafted to \n");# io.print("# depict that which I argue to be the 'correct' outpu.\n");# io.print("#\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -