Jump to: navigation, search

Difference between revisions of "EDT:EGL Language"

m (add edt category)
 
(25 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== General Notes  ==
 
== General Notes  ==
  
*<u>'''This document is not finished yet!'''</u>
+
*This document was populated from design meetings. Meeting notes are at [[EDT:Discussion topics from the language meetings]].
 +
*"N/S" means Not Supported. We may support N/S features in the future.
 +
*Anything that exists in RBD but isn't mentioned here is not included in EDT. Or maybe we forgot about it. Nobody's perfect.<br>
 +
*The work in the Core category includes the parser, model, and validation.<br>
 +
*The work in the JavaScript, Java, and Debug categories includes both the generator and runtime.<br>
 +
*Text <span style="background:#FFA500">with an orange background</span> shows differences in features supported by both EDT and RBD.
 +
*Features <span style="background:#FFFF00">with a yellow background</span> are planned for EDT 1.0, but not EDT 0.7.0.
 +
*'''Developers:''' include a link to Bugzilla for features not done yet, and mark items "Done" when you're finished.
  
*"N/S" means Not Supported.
+
== Language Elements ==
*Anything that exists in RBD but isn't mentioned here is not included in EDT. Or maybe we forgot about it. Nobody's perfect.<br>
+
*The work in the Core category includes the parser, model, and validation.<br>
+
*The work in the JavaScript, Java, and Debug categories includes both the generator and runtime.<br>
+
*'''Developers:''' include a link to Bugzilla for features not done yet, and mark items "Done" when you're finished.<br>
+
*[[EDT:Discussion topics from the language meetings]]<br>
+
  
== Table 1: Part Types ==
+
*[[EDT:EGL Language Part Types]]
 +
*[[EDT:EGL Language Function Parameters]]
 +
*[[EDT:EGL Language Primitive Types]]
 +
*[[EDT:EGL Language Primitive Type Conversions]]
 +
*[[EDT:EGL Language System Types and Functions]]
 +
*[[EDT:EGL Language Statements]]
 +
*[[EDT:EGL Language Literals]]
 +
*[[EDT:EGL Language Operators and Expressions]]
 +
*[[EDT:EGL Language Stereotypes and Annotations]]
 +
*[[EDT:EGL Language Tests]]
 +
*[[EDT:EGL Language conversion]]
  
{| width="400" cellspacing="1" cellpadding="1" border="1" style=""
+
  [[Category: EDT]]
|-
+
| bgcolor="#999999" align="center" | '''''Part Types'''''
+
| bgcolor="#999999" align="center" | '''Core'''
+
| bgcolor="#999999" align="center" | '''JavaScript'''
+
| bgcolor="#999999" align="center" | '''Java'''
+
| bgcolor="#999999" align="center" | '''Debug'''
+
|-
+
| bgcolor="#cccccc" | ''DataItem<sup>1</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Function<sup>2, 5</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Top-level function<sup>2, 5</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Delegate<sup>2</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Record''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Structured Record''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''ExternalType''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Handler''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Library''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Service''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Interface<sup>3</sup>''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Enumeration''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Program<sup>4</sup>''<br>
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Array''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Nullability''<br>
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''DataTable''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Form''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|}
+
 
+
'''Notes on Table 1'''<br>
+
 
+
#In RBD a DataItem can only be used for primitive types.  In EDT it can be used for any type.
+
#See also Table 2: Function Parameters.<br>
+
#Interfaces can be implemented by services and handlers (every kind of "logic part" which can be instantiated).<br>
+
#There are no called programs. Use libraries for "local calls" and services for "remote calls".<br>
+
#We intend to support function overloading in all implementations, even JavaScript.<br>
+
 
+
== Table 2: Function Parameters  ==
+
 
+
{| width="400" cellspacing="1" cellpadding="1" border="1" style=""
+
|-
+
| bgcolor="#999999" align="center" | '''''Function Parameters'''''
+
| bgcolor="#999999" align="center" | '''Core'''
+
| bgcolor="#999999" align="center" | '''JavaScript'''
+
| bgcolor="#999999" align="center" | '''Java'''
+
| bgcolor="#999999" align="center" | '''Debug'''
+
|-
+
| bgcolor="#cccccc" | ''In<sup>1</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Out''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Inout<sup>1</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Ellipsis''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Const''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Field''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''SqlNullable''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|}
+
 
+
'''Notes on Table 2'''<br>
+
 
+
#The default parameter modifier is In for references and Inout for values.<br>
+
 
+
== Table 3: Primitive Types  ==
+
 
+
{| width="400" cellspacing="1" cellpadding="1" border="1" style=""
+
|-
+
| bgcolor="#999999" align="center" | '''''Primitive Types'''''
+
| bgcolor="#999999" align="center" | '''Core'''
+
| bgcolor="#999999" align="center" | '''JavaScript'''
+
| bgcolor="#999999" align="center" | '''Java'''
+
| bgcolor="#999999" align="center" | '''Debug'''
+
|-
+
| bgcolor="#cccccc" | ''Any''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Boolean''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Dictionary''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''String(N)<sup>1</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''String<sup>2</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Timestamp<sup>3</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Blob''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Clob''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Smallint''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Int''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Bigint''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Decimal(N,M)''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Decimal(N)''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Decimal<sup>4</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Float''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Smallfloat''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Number<sup>5</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Byte(N)<sup>6</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Byte<sup>7</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Arraydictionary''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Char''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Dbchar''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Mbchar''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Unicode''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Hex<sup>6</sup>''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Date<sup>3</sup>''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Time<sup>3</sup>''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Interval<sup>3</sup>''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Bin''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Num''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Numc''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Pacf''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Money''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|}
+
 
+
'''Notes on Table 3'''<br>
+
 
+
#String(N) is a reference type in EDT.<br>
+
#String is a reference type in EDT.<br>
+
#Timestamp is the only supported date/time type. Use it in place of RBD's date, time, and interval. Date/time math produces timestamps or numbers.<br>
+
#Decimal with no length or decimals is a reference type with an immutable value.<br>
+
#Number is a reference type with an immutable value. Unlike in RBD, number variables can be declared anywhere a variable declaration is allowed.<br>
+
#Byte(N) is a value type similar to RBD's hex. N indicates the number of bytes in the value.<br>
+
#Byte with no length is a reference type with an immutable value of any length.<br>
+
 
+
== Table 4: Statements  ==
+
 
+
{| width="400" cellspacing="1" cellpadding="1" border="1" style=""
+
|-
+
| bgcolor="#999999" align="center" | '''''Statements'''''
+
| bgcolor="#999999" align="center" | '''Core'''
+
| bgcolor="#999999" align="center" | '''JavaScript'''
+
| bgcolor="#999999" align="center" | '''Java'''
+
| bgcolor="#999999" align="center" | '''Debug'''
+
|-
+
| bgcolor="#cccccc" | ''Variable declaration''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Const declaration''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Assignment''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Move<sup>1</sup>''
+
| <br>
+
| <br> N/S
+
| <br> N/S
+
| <br> N/S
+
|-
+
| bgcolor="#cccccc" | ''Return''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Function invocation''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Call<sup>2</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Label''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Transfer''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Throw''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Try''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Case''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''If''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''While''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''For''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Foreach<sup>3</sup>''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Exit''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Continue''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Empty statement (a semicolon)''
+
| <br>
+
| <br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Add''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Close''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Delete''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Get''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Replace''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Execute<sup>4</sup>''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Prepare<sup>4</sup>''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Open<sup>4</sup>''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''FreeSQL<sup>4</sup>''
+
| <br>
+
| N/S<br>
+
| <br>
+
| <br>
+
|-
+
| bgcolor="#cccccc" | ''Goto''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Set''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Converse''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Display''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Print''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Forward''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''Show''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|-
+
| bgcolor="#cccccc" | ''OpenUI''<br>
+
| <br>
+
| N/S
+
| N/S
+
| N/S
+
|}
+
 
+
'''Notes on Table 4'''<br>
+
 
+
#In RBD, a move statement between two references does a deep copy. Reference types should include a deep copy function to provide the same functionality in EDT.<br>
+
#EDT doesn't have called programs, but services and native programs can be called.<br>
+
#EDT's foreach statement will support iterating over an array.<br>
+
#Support for these statements is tentative, pending the design for JPA in EDT.<br>
+
 
+
== What's left...<br>  ==
+
 
+
*Revisit decision to not support date and time
+
*Revisit decision to not support char and structured records
+
*Revisit decision to not support move
+
*Revisit decision to not support set (empty and initial)
+
*Literals
+
**null
+
**boolean
+
**integer, fixed-decimal, floating-point
+
**string
+
**char, mbchar, dbchar, hex
+
**literal array
+
**byte
+
**date, time, timestamp
+
*Operators and expressions
+
**result of errors in each case?
+
**. (member access)
+
**=
+
**function invocation
+
**new
+
**{ } (set-values block)
+
**@
+
**[ ] (array access)
+
**[ ] (dynamic access)
+
**[ ] (substring), as L-value and R-value
+
**as
+
**isa
+
**% * ** / %= *= **= /=
+
**+ - (both binary and unary) += -=
+
** :: ::=
+
**?: ?:=
+
**&& || And Or !
+
**< > <= >= == !=
+
**& | Xor &= |= Xor=
+
**is/not systemType
+
**is/not blanks, numeric
+
**is/not trunc, cursor, data, modified
+
**is/not IO error states
+
**like
+
**matches
+
**in
+
*Conversions
+
**result of conversion errors?
+
**defaultNumericFormat, defaultMoneyFormat, defaultTimestampFormat, defaultDateFormat, defaultTimeFormat
+
**numeric to/from numeric
+
**string to/from numeric
+
**string to/from boolean
+
**string to/from byte
+
**string to/from timestamp
+
**numeric to/from boolean
+
**numeric to/from byte
+
**numeric to/from timestamp
+
**byte to/from boolean
+
**byte to/from timestamp
+
**boolean to/from timestamp
+
*Stereotypes
+
**program stereotypes
+
***BasicProgram
+
***UIProgram
+
***TextUIProgram
+
***VGWebTransaction
+
**library stereotypes
+
***BasicLibrary
+
***NativeLibrary
+
***RUIPropertiesLibrary
+
**record stereotypes
+
***BasicRecord
+
***Exception
+
***SQLRecord
+
***CSVRecord
+
***DLISegment
+
***PSBRecord
+
***IndexedRecord
+
***RelativeRecord
+
***SerialRecord
+
***MQRecord
+
***ConsoleForm
+
***VGUIRecord
+
**handler stereotypes
+
***BasicHandler
+
***RUIHandler
+
***RUIWidget
+
***BirtHandler
+
***JasperReport
+
***JSFHandler
+
**externaltype stereotypes
+
***NativeType
+
***JavaObject
+
***JavaScriptObject
+
***HostProgram
+
**datatable stereotypes...form stereotypes...
+
*Annotations (details TBD)
+
*Language compliance test (details TBD)
+
 
+
<br>
+

Latest revision as of 16:45, 24 October 2011

General Notes

  • This document was populated from design meetings. Meeting notes are at EDT:Discussion topics from the language meetings.
  • "N/S" means Not Supported. We may support N/S features in the future.
  • Anything that exists in RBD but isn't mentioned here is not included in EDT. Or maybe we forgot about it. Nobody's perfect.
  • The work in the Core category includes the parser, model, and validation.
  • The work in the JavaScript, Java, and Debug categories includes both the generator and runtime.
  • Text with an orange background shows differences in features supported by both EDT and RBD.
  • Features with a yellow background are planned for EDT 1.0, but not EDT 0.7.0.
  • Developers: include a link to Bugzilla for features not done yet, and mark items "Done" when you're finished.

Language Elements