working with strongly typed data models in lua for ... · – members may be assigned nil (e.g....
TRANSCRIPT
![Page 1: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/1.jpg)
WorkingwithstronglytypeddatamodelsinLuaforbuildingIndustrialInternetofThings(IIoT)applica=ons
TheConnec=vityPlaAormfortheIndustrialInternetofThings™
RajiveJoshi,Ph.D.PrincipalSolu7onArchitect,Real-TimeInnova7ons,Inc.
LuaWorkshop2016SanFrancisco,CA
2016Oct14
![Page 2: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/2.jpg)
Agenda
• Background• Problem• Solu=on• Tutorial|Demo• Applica=ons• NextSteps
©2015Real-TimeInnova=ons,Inc.
![Page 3: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/3.jpg)
Background
Whatwedo?
![Page 4: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/4.jpg)
TheIndustrialInternetofThingsIndustrialInternetofThings(IIoT)ConsumerInternetofThings(CIoT)
Cyber-PhysicalSystems(CPS)
![Page 5: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/5.jpg)
TheIndustrialInternetofThingsIndustrialInternetofThings(IIoT)ConsumerInternetofThings(CIoT)
Cyber-PhysicalSystems(CPS)
![Page 6: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/6.jpg)
RTIExcelsatIndustrialIoT(IIoT)• ~1000Projects
– Healthcare– Transporta=on– Communica=ons– Energy– Industrial– Defense
• 15+Standards&Consor=aEfforts– Interoperability– Mul=-vendorecosystems
![Page 7: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/7.jpg)
ConnectAnything,Anywhere-Intelligently!
• Proximity• PlaAorm• Language
• Physicalnetwork• Transportprotocol• Networktopology
RTIConnextDDS“DataBus”
Seamlessdatasharingregardlessof:
ü Reliableü Real-Timeü Scalableü Availableü Resilientü Secureü Safeü Composable
![Page 8: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/8.jpg)
RTIConnextPlaAormisbuiltontheDDSStandard
©2015Real-TimeInnova=ons,Inc.
hdp://portals.omg.org/dds/
![Page 9: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/9.jpg)
ProblemDefini=on
“Datadominates.Ifyou'vechosentherightdatastructuresandorganizedthingswell,thealgorithmswillalmostalwaysbeself-evident.Datastructures,notalgorithms,arecentraltoprogramming.(SeeBrooksp.102.)”
- RobertPike
![Page 10: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/10.jpg)
Data-CentricSystems:SharedDataSpace
©2015Real-TimeInnova=ons,Inc.
ComponentX1
Data-Objects(Topic) Component
Y1DataWriter
write()
DataReader
take()read()
![Page 11: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/11.jpg)
Data-CentricSystems:SharedDataSpace
©2015Real-TimeInnova=ons,Inc.
ComponentX1
Data-Objects(Topic) Component
Y1
ComponentXN
ComponentYM
DataWriter
write()
DataReader
take()read()
![Page 12: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/12.jpg)
Data-CentricSystems:SharedDataSpace
©2015Real-TimeInnova=ons,Inc.
ComponentX1
Data-Objects(Topic) Component
Y1
ComponentXN
ComponentYM
DataWriter
write()
DataReader
take()read()
C/C++ Java
.Net/C# Lua
Pickthelanguagemostsuitabletotherequirementsofacomponent
Mul=pleplaAorms,Mul=pleLanguages
![Page 13: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/13.jpg)
Data-CentricSystems:DataModels
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
ComponentX1
ComponentY1
ComponentXN
ComponentYM
C/C++ Java
.Net/C# Lua
![Page 14: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/14.jpg)
Data-CentricSystems:DataModels
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
ComponentX1
ComponentY1
ComponentXN
ComponentYM
C/C++ Java
.Net/C# Lua
InterfaceDefini7onLanguage(IDL)XMLwithEquivalentSchema
DDSX-TypesSpecifica=on
![Page 15: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/15.jpg)
Data-CentricSystems:DataModels
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
ComponentX1
ComponentY1
ComponentXN
ComponentYM
C/C++ Java
.Net/C# Lua
struct { : }
public class{ : }
public class { : }
InterfaceDefini7onLanguage(IDL)XMLwithEquivalentSchema
DDSX-TypesSpecifica=on
?
![Page 16: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/16.jpg)
DataModelConstrainstheData-Objects
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
Data-Objects(Topic)
Constrains
LanguageNeutral LanguageSpecificSta7c:C/C++,Java..NET/C#,Ada.…Dynamic:Lua,Python,Javascript,…
Compilerenforcesinasta5callytypedlanguage
![Page 17: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/17.jpg)
DataModelConstrainstheData-Objects
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
Data-Objects(Topic)
Constrains
LanguageNeutral LanguageSpecificSta7c:C/C++,Java..NET/C#,Ada.…Dynamic:Lua,Python,Javascript,…
Howtoenforceindynamicallytypedlanguages?HowtoenforceinLua?
![Page 18: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/18.jpg)
Solu=on
DDSL:DataDomainSpecificLanguage
![Page 19: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/19.jpg)
DDSL:DataDomainSpecificLanguageAnalgebrafordefining,using,andmanipula5ngX-Types(inLua)
©2015Real-TimeInnova=ons,Inc.
DataModel(Datatype)
structShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
Data-Objects(Topic)
template(Lua)
instances(Lua)
DDSL
EnforcesConstraintsKeepsSynchronized
Create&Modify• Datatypes• InstancesIndexdatafields
![Page 20: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/20.jpg)
Datamodelscanbeverycomplex….Primi7ve
• Atomic(long,double,string,etc…)
• Const• Enums
Structural• Structs• Unions• Sequences(mul=dimensional)• Arrays(mul=dimensional)
©2015Real-TimeInnova=ons,Inc.
Organiza7onal• Typedefs• Module• Annota=ons
![Page 21: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/21.jpg)
WithoutDDSL…
• Thedatatypemustbemaintainedoutsidethescrip=nglanguageenvironment– notaccessibletoprogram(inthelanguage)
• Thedatatypemustbeknowntotheprogrammer,anditsstructurehard-codedinthescript– error-proneduetoduplica=on– bridletodatatypeevolu=onorlarge/complextypes
• Ascriptcannotuseorintroducenewtopicsorendpoints(notknowntotheprogrammer)– impossibletobuildgenericcomponents
©2015Real-TimeInnova=ons,Inc.
![Page 22: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/22.jpg)
WithDDSL…
• Thedatatypecanbemaintainedinsidethescrip=ngenvironment– fullyaccessibletoprogram
• Thedatatypeneednotbeknowntotheprogrammer,anditsstructureneednotbehard-codedinthescript– safe,singleversionoftruth(nodatatypeduplica=on)– robusttodatatypeevolu=onorlarge/complextypes
• Ascriptcanuseorintroducenewtopicsorendpoints(notknowntotheprogrammer)– possibletobuildgenericcomponents
©2015Real-TimeInnova=ons,Inc.
![Page 23: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/23.jpg)
QuickExample…
©2015Real-TimeInnova=ons,Inc.
DataModel-IDLstructShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
Data-Object-Luashape={x=50,y=30,shapesize=20,color=‘GREEN’}
![Page 24: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/24.jpg)
QuickExample…
DataModel–DDSL(template)
localShapeType=xtypes.struct{ShapeType={{x={xtypes.long}},{y={xtypes.long}},{shapesize={xtypes.long}},{color={xtypes.string(128),xtypes.Key}},}}
Data-Object–DDSL(instance)
localshape=xtypes.new_instance(ShapeType)shape.x=50shape.y=30shape.shapesize=20shape.color='GREEN'
©2015Real-TimeInnova=ons,Inc.
DataModel-IDLstructShapeType{longx;longy;doubleshapesize;string<128>color;//@Key};
Data-Object-Luashape={x=50,y=30,shapesize=20,color=‘GREEN’}
![Page 25: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/25.jpg)
DDSLopensupnewpossibili=es...• ADDSLdatatype
– Canbeexaminedandtraversedintheprogram– Canbedefinedandmanipulatedbytheprogram• create|read|update|modifyopera=ons
– Canbesynthesizedandmanipulatedbytheprogram– Canbeusedtoautomatecodeordatagenera=on
whileusingthefullpowerandflexibilityofLua• BringsdatatypestoeveryIoTplaAorm
– DDSLisplaAormindependent• iswrideninpureLuawithnoexternaldependencies(notevenDDS!)• canbeusedonanyplaAormonwhichLuacanbeused(prac=callyeverywhere)
– Evenweb-browsers(e.g.usinglua.vm.js)©2015Real-TimeInnova=ons,Inc.
![Page 26: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/26.jpg)
DDSL
Analgebrafordefining,using,andmanipula=ngX-Types(inLua)
![Page 27: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/27.jpg)
So,whatexactlyisDDSL?
1. ReplacementforIDL,byallowingdatatypesdefini=onsinLua2. Factoryofdata-objects(instances)thatadheretoadatatype3. Analgebratooperateondatatypesandmaintainthe
associateddata-objects(instances)4. Generatorofaccessorstringsforindexingmembersinadata-
objectstore5. Anextensibleframeworkfordatamodeling
©2015Real-TimeInnova=ons,Inc.
![Page 28: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/28.jpg)
1.IDLReplacementinLua
• OMGDDSX-TypesSpecifica=oninLua– includingfeaturesnotyetsupportedinIDL• e.g.customannota=ons
• XML→DDSL– ImportdatatypesdefinedinXML
• DDSL→IDL(→XML)– ExportdatatypestoIDL
• Easytodefinenewkindsofdatatypes– Usefulforexperimen=ngwithnewX-Typesfeatures• e.g.choice
![Page 29: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/29.jpg)
1.IDLReplacementinLua
localMAX_COLOR_LEN=xtypes.const{MAX_COLOR_LEN={xtypes.long,128}}localShapeType=xtypes.struct{ShapeType={{x={xtypes.long}},{y={xtypes.long}},{shapesize={xtypes.long}},{color={xtypes.string(MAX_COLOR_LEN),xtypes.Key}},}}
©2015Real-TimeInnova=ons,Inc.
localMAX_COLOR_LEN=xtypes.const{MAX_COLOR_LEN={xtypes.long,128}}localShapeType=xtypes.struct{ShapeType=xtypes.EMPTY}ShapeType[1]={x={xtypes.long}}ShapeType[2]={y={xtypes.long}}ShapeType[3]={shapesize={xtypes.long}}ShapeType[4]={color={xtypes.string(MAX_COLOR_LEN),xtypes.Key}}
Declara=vestyle(DatatypeConstructor)
Impera=veStyle(DatatypeCRUD)
![Page 30: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/30.jpg)
2.Factoryofinstances
• Instancesareconstrainedbythedatatype– arbitrarymemberscannotbeaddedtoinstances– membersmaybeassignednil(e.g.op=onal);andlaterre-assignedanon-nilvalue– collec=on(arrayandsequence)boundsareenforced;nowallowedtoexceedthemaxcapacity
• Yet,instanceperformanceisonparwithamanuallydefinedinstance– nooverheadinsewng/gewngmembervalues
• itwasanexplicitdesigngoaltonotaddanyoverheadoverrawmemberfieldseders/geders
– onlystructuralconstraintsareenforced!• type-checkingisnotenforcedformembervalueassignment(althoughanapplica=oncouldeasilydosoifdesired)
©2015Real-TimeInnova=ons,Inc.
![Page 31: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/31.jpg)
2.Factoryofinstances--shapeisequivalenttomanuallydefiningthefollowing--localshape_manual={x=50,y=30,shapesize=20,color='GREEN',}
©2015Real-TimeInnova=ons,Inc.
localshape=xtypes.new_instance(ShapeType)print("---Iteratethroughinstancemembers:unordered---")forrole,_inpairs(shape_manual)doshape[role]=shape_manual[role]print('\t',role,shape[role])end
--- Iterate through instance members : unordered --- color GREEN x 50 shapesize 20 y 30
⇒
![Page 32: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/32.jpg)
3.DatatypeAlgebra
• Datatypescanbemutated(unlikeIDL/XML)– the“kind”(meta-datatype)isimmutableanddefinesthestructureandconstraints– allotheraspectsofadatatypecanbechanged,e.g.:name,members,annota=ons,inheritance,switch
• Datatypechangesarepropagatedtoinstances(unlikeIDL/XML)– addingamembertothedatatypealsoaddsittoalltheinstances(withadefaultvalue)– removingamemberfromathedatatypealsoremovesitfromalltheinstances– changingamember'sdatatypepropagatesthechangetoalltheinstances
©2015Real-TimeInnova=ons,Inc.
![Page 33: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/33.jpg)
3.DatatypeAlgebra
ModelsandInstancesADDSLinstancehastwofaces(likeacoin):• anunderlyingdatatypemodel(theblueprint)• fieldswithrolenamesdictatedbythedatatype
Constructorsreturnaspecial“template”instance(e.g.MyType)asahandletothe
underlyingmodel.
Datatypemodelsaremanipulatedusingoperatorsoninstances.Anyoftheinstancescouldbeused,butitsidioma=ctousethetemplateinstance.Templateinstanceslinkmodelelementstoformadatamodelgraph.
©2015Real-TimeInnova=ons,Inc.
MyTypemember_role_1 str|tbl
:
member_role_M str|tbl
MyTypeModelOperatorsi-thmember MyType[i]={role={…}}
#members #MyType
name MyType[NAME]
namespace MyType[NS]
kind MyType[KIND]
() capacity|constvalue|alias
qualifiers|base|switch
MyType[QUALIFIER|BASE|SWITCH]
new_instance()myInstance
member_role_1 value|tbl
:
member_role_M value|tbl
metatable
template
![Page 34: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/34.jpg)
3.DatatypeAlgebra
ModelsandInstancesADDSLinstancehastwofaces(likeacoin):• anunderlyingdatatypemodel(theblueprint)• fieldswithrolenamesdictatedbythedatatype
Constructorsreturnaspecial“template”instance(e.g.MyType)asahandletothe
underlyingmodel.
Datatypemodelsaremanipulatedusingoperatorsoninstances.Anyoftheinstancescouldbeused,butitsidioma=ctousethetemplateinstance.Templateinstanceslinkmodelelementstoformadatamodelgraph.
©2015Real-TimeInnova=ons,Inc.
MyTypemember_role_1 str|tbl
:
member_role_M str|tbl
MyTypeModelOperatorsi-thmember MyType[i]={role={…}}
#members #MyType
name MyType[NAME]
namespace MyType[NS]
kind MyType[KIND]
() capacity|constvalue|alias
qualifiers|base|switch
MyType[QUALIFIER|BASE|SWITCH]
new_instance()myInstance
member_role_1 value|tbl
:
member_role_M value|tbl
metatable
metatable
template
![Page 35: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/35.jpg)
3.DatatypeAlgebra:ModelOperatorsprint('---addmemberz---')ShapeType[#ShapeType+1]={z={xtypes.string(),xtypes.Key}}print_datatype(ShapeType,'ShapeType:')print('---removememberx---')ShapeType[1]=nilprint_datatype(ShapeType,'ShapeType:')print('---redefinemembery---')ShapeType[1]={y={xtypes.double}}print_datatype(ShapeType,'ShapeType:')print('---addabasestruct---')localProperty=xtypes.struct{Property={{name={xtypes.string(MAX_COLOR_LEN)}},{value={xtypes.string(MAX_COLOR_LEN)}},}}ShapeType[xtypes.BASE]=Propertyprint_datatype(ShapeType,'PropertyShapeType:')print_instance(ShapeType,'PropertyShapeTypeaccessors:')
©2015Real-TimeInnova=ons,Inc.
![Page 36: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/36.jpg)
4.GeneratorofAccessorStrings• Datatypeisaspecial‘template’instance
– whosemembersareini=alizedtotheaccessorstringsforaDDSDynamicDataobject– automa=callymaintainedtoconfirmwiththeunderlyingdatamodel– forefficiency,collec=onmemberelementsareallocated(atmostonce)ondemand(i.e.whenaccessed)
©2015Real-TimeInnova=ons,Inc.
--ShapeTypecanbeaccessedasifitwasdefinedas--ShapeType={x=‘x’,y=‘y’,shapesize=‘shapesize’,color=‘color’}
![Page 37: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/37.jpg)
4.Anextensibleframeworkfordatamodeling
• Coreenginesupportsagenericmeta-model– Agnos=ctospecificdatamodelinglanguageconstrains– X-TypesmoduleextendstheddslenginetosupportDDSX-Types(OMGIDL)
• Easytoextendthemodelinglanguage– Newatomicdatatypes,annota=ons,composi=ons,…
• Easytoaddnewconstraints– Dataranges– Dataunits– Seman=cs
©2015Real-TimeInnova=ons,Inc.
![Page 38: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/38.jpg)
DatatypeAlgebra
![Page 39: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/39.jpg)
DDSLNomenclature
©2015Real-TimeInnova=ons,Inc.
MyTypemember_role_1 str|tbl
:
member_role_M str|tbl
MyTypeAPIi-thmember MyType[i]={role={…}}
#members #MyType
name MyType[NAME]
namespace MyType[NS]
kind MyType[KIND]
() capacity|constvalue|alias
qualifiers|base|switch
MyType[QUALIFIER|BASE|SWITCH]
new_instance()myInstance
member_role_1 value|tbl
:
member_role_M value|tbl
metatable
metatable
template
NomenclatureGeneralConcept DDSLTerminology
instance(a.k.a.data-object) instance
datatype template
member
membername role
memberdefini=on roledefini=on(roledef)
annota=on qualifier
![Page 40: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/40.jpg)
DatatypeAlgebra-ModelConstructors
©2015Real-TimeInnova=ons,Inc.
Createadatatypetemplate:
MyType = xtypes.<kind>{...}
where,<kind> is one of: annotation,
const, enum, struct, union, module, typedef
and{...} dependson<kind> e.g. MyType = xtypes.struct{MyType=xtypes.EMPTY} Commondefini=onstyle:
{ <name> = { <definition> } }
![Page 41: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/41.jpg)
DatatypeAlgebra-ModelOperators
©2015Real-TimeInnova=ons,Inc.
Createamember: MyType[i] = { role = {template, [array|sequence,] [[annotation,]...] } Deleteamember: MyType[i] = nil Namespace,Qualifiers,Base(structs),Switch(unions): MyType[xtypes.NS] = AnotherType MyType[xtypes.QUALIFIERS] = { annotation, ... } MyType[xtypes.BASE] = BaseType MyType[xtypes.SWITCH] = DiscriminatorType Name: MyType[xtypes.NAME] = ‘NewTypeName’ tostring(MyType) Kind(immutable): MyType[xtypes.KIND]
![Page 42: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/42.jpg)
DatatypeAlgebra-ModelIterators
©2015Real-TimeInnova=ons,Inc.
structsIterateoverthemembers:
for i = 1, #MyType do local role, roledef = next(MyType[i]) print(role, table.unpack(roledef)) end
unionsIterateoverthemembers:
for i = 1, #MyType do local case = MyType[i] -- case discriminators: print(table.unpack(case)) -- member: local role, roledef = next(case, #case) print(role, table.unpack(roledef)) end
![Page 43: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/43.jpg)
DatatypeAlgebra-InstanceConstructors
©2015Real-TimeInnova=ons,Inc.
Createaninstance: myInstance = xtypes.new_instance(MyType)
Createacollec=onofinstances: myCollection = xtypes.new_collection(MyType,
capacity) NOTE:Asequenceorarraymemberinaninstanceisacollec=on
![Page 44: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/44.jpg)
DatatypeAlgebra-InstanceCollec7ons
©2015Real-TimeInnova=ons,Inc.
Isitacollec=on?if xtypes.is_collection(myCollection)then
print( ‘capacity’, myCollection() ) print( ‘length’, #myCollection )
end Iterateoveracollec=on’slength: for i = 1, #myCollection do print( myCollection[i] ) end Iterateoveracollec=on’scapacity: for i = 1, myCollection() do print( myCollection[i] ) end
![Page 45: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/45.jpg)
DatatypeAlgebra-InstanceIterators
©2015Real-TimeInnova=ons,Inc.
Iterateoverinstancemembers(unordered): for role, value in pairs(myInstance) do print(role, value) end Iterateoverinstancemembers(ordered): for i = 1, #MyType do local element_i, role = MyType[i] role = next(element_i) -- struct
role = next(element_i, #element_i)-- union local value = myInstance[role] print(role, value, table.unpack(MyType(role))) end
![Page 46: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/46.jpg)
DatatypeAlgebra–TemplateInstance
©2015Real-TimeInnova=ons,Inc.
IterateoverDDSDynamicDataaccessorstrings(unordered): for role, accessor in pairs(MyType) do print(role, accessor) end IterateoverDDSDynamicDataaccessorstrings(ordered): for i = 1, #MyType do local element_i, role = MyType[i] role = next(element_i) -- struct
role = next(element_i, #element_i)-- union local accessor = MyType[role] print(role, accessor) end
Fieldvaluesareaccessorstringsforindexingmembersinadata-objectstore
![Page 47: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/47.jpg)
DatatypeAlgebra–MiscOperators
©2015Real-TimeInnova=ons,Inc.
Getthefullyqualifiednamewithinthenamespaces print( xtypes.nsname(MyType) ) Resolveanalias(e.g.typedef)toitsunderlyingdatatype print( xtypes.resolve(MyType) ) Getaninstance’sunderlyingdatatypetemplate print( xtypes.template(myInstance) )
![Page 48: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/48.jpg)
DatatypeAlgebra–U7li7es
• ddsl.xtypes.u=ls– to_instance_string_table(instance)– to_idl_string_table(instance)– nslookup(name,ns)
• ddsl.xtypes.xml– filelist2xtypes(filename_array)– file2xtypes(filename)– string2xtypes(xmlstring)
• Commandline– runxml2ddsl[-d]<xml-file>[<xml-files>...]
©2015Real-TimeInnova=ons,Inc.
![Page 49: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/49.jpg)
Tutorial
![Page 50: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/50.jpg)
Runningthetutorial… git clone github.com/rticommunity/rticonnextdds-ddsl/
export DDSL_HOME=$(pwd -P)
export LUA_PATH+="${DDSL_HOME}tutorial/?.lua;”
cd tutorial/
lua ddsl_tutorial.lua
![Page 51: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/51.jpg)
Applica=ons
©2015Real-TimeInnova=ons,Inc.
![Page 52: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/52.jpg)
CurrentApplica=ons(thatIamawareof)
• DataEmulator– RTIExperimentalProduct• Emulatedata-centricinterfaces• Firstdroptocustomer(2015Jun30)
• DataGeneratorsforReac=veProgramming– ContribuedbySumantTambe– Usefulforsimula=onandtes=ng
![Page 53: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/53.jpg)
Poten=alApplica=ons• Communityofopendatamodelsfor[Industrial]IoT• Dataserializa=onanddeserializa=on• Codegenera=on
– Integra=onwithtempla=nglibraries• Modelmappingandgenera=on– synthesizedatatypesfromseman7cmodels– synthesizedata-modelmappings
• Synthesisofdatamodels– machinelearning
• Experimenta=onwithNewDataModelingIdeas
©2015Real-TimeInnova=ons,Inc.
![Page 54: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/54.jpg)
NextSteps
• GewngStartedGuide– README
• hdps://github.com/r=community/r=connextdds-ddsl
• UsersManual– API
• hdp://r=community.github.io/r=connextdds-ddsl/• UnitTests– test/(formoreadvancedexamples)• ddsl-xtypes-tester.lua
©2015Real-TimeInnova=ons,Inc.
Apache2.0
![Page 55: Working with strongly typed data models in Lua for ... · – members may be assigned nil (e.g. op=onal); and later re-assigned a non-nil value – collec=on (array and sequence)](https://reader034.vdocuments.mx/reader034/viewer/2022052519/5f1e742b5addd7561506c365/html5/thumbnails/55.jpg)
ThankYou!
rajive@r=.com|@RajiveJoshi
WeareHiring!www.r7.com/company/careers.html