-
Notifications
You must be signed in to change notification settings - Fork 1
Is version part of M3 Metamodel? #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
If we store it as part of the |
It's very tempting. I see this M3 as a way to describe what to expect in an AST, and as such, I'd like to avoid aspects like dependency management etc. as much as possible until it turns out that it's really an improvement. Metadata stored alongside an actual model could serve the purpose of declaring dependencies (and which versions) as well. |
We should not have both a language version and a model version. Until today, I don't understand what that means in MPS. |
Required for language evolution
|
This is an example as base for discussions. This assumes a slightly changed M3: {
"metamodel nodes": [
{
"id": "1",
"concept": "LIonCore_M3_Metamodel",
"properties": {
"name": "Library",
"id": "a",
"version": "7"
},
"children": {
"LIonCore_M3_Metamodel_dependsOn": [
"1_1"
],
"LIonCore_M3_Metamodel_elements": [
"1_2"
]
},
"references": {},
"parent": null
},
{
"id": "1_1",
"concept": "LIonCore_M3_Dependency",
"properties": {
"LIonCore_M3_Dependency_version": "4"
},
"children": {},
"references": {
"LIonCore_M3_Dependency_metamodel": [
{
"resolveInfo": "NamedStuff",
"reference": "2"
}
]
},
"parent": "1"
},
{
"id": "1_2",
"concept": "LIonCore_M3_Concept",
"properties": {
"LIonCore_M3_NamespacedEntity_simpleName": "Book",
"LIonCore_M3_NamespacedEntity_id": "a_a",
"LIonCore_M3_Concept_abstract": "false"
},
"children": {
"LIonCore_M3_FeaturesContainer_features": [
"1_3"
]
},
"references": {
"LIonCore_M3_Concept_implements": [
{
"resolveInfo": "INamed",
"reference": "2_1"
}
]
},
"parent": "1"
},
{
"id": "1_3",
"concept": "LIonCore_M3_Property",
"properties": {
"LIonCore_M3_NamespacedEntity_simpleName": "pages",
"LIonCore_M3_NamespacedEntity_id": "a_a_a",
"LIonCore_M3_Feature_optional": "false"
},
"children": {},
"references": {
"LIonCore_M3_Property_type": [
{
"resolveInfo": "integer",
"reference": "LIonCore_M3_builtin_integer"
}
]
},
"parent": "1_2"
},
{
"id": "2",
"concept": "LIonCore_M3_Metamodel",
"properties": {
"name": "NamedStuff",
"id": "b",
"version": "4"
},
"children": {
"LIonCore_M3_Metamodel_elements": [
"2_1"
]
},
"references": {},
"parent": null
},
{
"id": "2_1",
"concept": "LIonCore_M3_ConceptInterface",
"properties": {
"LIonCore_M3_NamespacedEntity_simpleName": "INamed",
"LIonCore_M3_NamespacedEntity_id": "b_a"
},
"children": {
"LIonCore_M3_FeaturesContainer_features": [
"2_2"
]
},
"references": {},
"parent": "2"
},
{
"id": "2_2",
"concept": "LIonCore_M3_Property",
"properties": {
"LIonCore_M3_NamespacedEntity_simpleName": "name",
"LIonCore_M3_NamespacedEntity_id": "b_a_a",
"LIonCore_M3_Feature_optional": "false"
},
"children": {},
"references": {
"LIonCore_M3_Property_type": [
{
"resolveInfo": "string",
"reference": "LIonCore_M3_builtin_string"
}
]
},
"parent": "2_1"
}
],
"metamodels": [
{
"id": "a",
"version": "7"
},
{
"id": "b",
"version": "4"
}
],
"nodes": [
{
"id": "__underscore__",
"concept": "a_a",
"properties": {
"b_a_a": "The Hitchhiker's Guide to the Galaxy",
"a_a_a": "160"
},
"children": {},
"references": {},
"parent": null
}
]
} also checked in at https://github.com/LIonWeb-org/organization/blob/niko/more-leveled-metamodels/lioncore/metamodel-versioning.puml |
Open questions:
|
Decisions discussed 2023-03-03:
We refer to
We refer from M1 to M2 via a triplet, discussed in #89. We discuss uniqueness in #91.
No, the
They are completely independent and unrelated. LIonCore (M3) makes no assumptions about version control a la git. Any implementation may chose to put M3 instances (aka Metamodels) under version control.
This is implementation dependent. LIonWeb shall provide all necessary information so clients can make an informed decision.
We use stable keys to refer from M1 to M2. Thus, M1 chunks are compatible with different repositories, assuming they all know that metamodel. |
Do we store the version of a
Metamodel
not at all, as a property, as an annotation, or in external metadata?Argument for storing it inside the
Metamodel
: This way, it can become part of the FQN of the metamodel, so we can disambiguate different versions.The text was updated successfully, but these errors were encountered: