-
Notifications
You must be signed in to change notification settings - Fork 1
metaL manifest
Dmitry Ponyatov edited this page Sep 14, 2020
·
7 revisions
current version | вариант на ИТ-русском | book drafts en/ru
-
no-syntax language defined over executable data structures
- there are no syntax parser and source code files
- any composite data structure can be Active by using EDS-interpreter which executes it programmatically
- the most universal data structure is the object graph of frames
- frame concept is taken from Marvin Minsky's frames [minksy] extended with ordered storage
- any Object must have these fields:
-
class:tag
tag holds the type of any object in runtime (low-cased class name)- host languages with RTTI/reflection are able to hold references to class as is
- low-level host languages such as C++ should reference to static class name string
-
scalar:val
single scalar value: object name, string, number,.. (in host-language type) -
dict:slot{}
associative array of names which were bound to subgraphs -
vector:nest[]
ordered storage for nested subgraphs -
set:par||
parent elements (required for attribute grammar attributes computation and parent nodes addressing from children nodes)-
ref ~ len(par)
reference counter not used directly, aspar
registry takes its role and must be recounted to check is the current object used anywhere
-
-
uint32:gid
unique global storage id — fast 32-bit xxhash over object contents- metaL looks very intently to the UnisonWeb concept about immutable global storage which holds shared objects by its content hashes
- optional behavior-specific fields
-
- any graph combined from the Object-inherited nodes has unified interfaces for its building and manipulations
- the main method of programming is the generative metaprogramming
- the metaL method is the sandwich of three languages:
- host language in which most work is going and other language layers implemented /Python/
- the metaLayer implemented by executable data structures interpretation (homoiconic object graph)
- target languages: all projects use not less than 3..5 programming and scripting languages, and config file formats
-
frame graph is an universal unified data structure for arbitrary knowledge representation
- source code in any languages in a form analogous to AST and attribute grammar trees (extended to cyclic attributed no-syntax graphs)
- generic program representation and procedures for graph transformations
- domain and source code models (Model-Driven Engineering)
- any application-specific data
- programmer writes the target application model by combining software model elements
- every graph node class knows how to compiler itself into source code in target languages, or into other graph node types which able to do it in turn
- all models are shared between projects which programmers do over time, so
- projects and its dedicated components can be classified and inherited
- the metaL method is the sandwich of three languages:
- the programmer builds his own version of the metaL system from scratch
- all required knowledge to write minimal reference implementation should be described in a manual step by step
- first steps are easy enough to make your custom language system usable without familiarity with classical books such as [SICP], [PLAI], [TAPL], and [dragon]
- the desire of using more effective programming methods stimulates you in learning more complex concepts from classical & modern CS.
- the programming process is free in the selection of programming paradigms, methods, and approaches -- anything that some programmer is able to implement at a metaLevel, can be used with the condition of personal understanding of how it works
- resulting target code can be distributed to the working group as is, without forcing anybody to dive into senior-level concepts, cryptic language, and disclosure of programming methods were used
- metaL can be used as a secret weapon and personal know-how without inflicting risks on the employer and working team
- the more effective development tool suggests you investigate into leveling-up your skills and makes you more valuable to the labor market
- your programming knowledge and skills are represented in a computer form thus it is machine-readable, executable, and transformable
- metaL can be treated as a CASE system without braindead GUI, but it is some sort of language-based self-bootstrapping RAD
- all required knowledge to write minimal reference implementation should be described in a manual step by step
Reference implementation: https://github.com/ponyatov/metaL/tree/master/distill