close
The Wayback Machine - https://web.archive.org/web/20050305141659/http://www.meta-language.net:80/faq.html
MetaL logo

Frequently asked questions

Search this site with Google  


Remind me when this page changes!

By: Manuel Lemos. Last change: $Date: 2003/07/02 09:15:52 $

Printable version

    Contents

  1. What is MetaL?
  2. Why was developed yet another language?
  3. How does MetaL engine work?
  4. What is meta-meta-programming?
  5. How good are MetaL generated programs?
  6. What are the advantages of meta-programming with MetaL?
  7. Who has created and developed MetaL?
  8. When MetaL started to be developed?
  9. In what language was developed the MetaL engine?
  10. How much does MetaL engine cost?
  11. What is current state of development of MetaL?
  12. Where can I see a sample of MetaL programs source and generated code?
  13. How can I try to use MetaL?
  14. Is there a mailing list about MetaL development?
  15. When will my favorite programming language be supported by MetaL?
  16. Are there any other meta-programming projects like MetaL?

  1. What is MetaL?
  2. MetaL is shorthand for Meta-programming Language. Meta-programming is a method to develop computer programs. It works by generating source code in a target language from a program specification in a higher level language.

    MetaL programs source code is based on XML. MetaL compiler engine can be used to generate the same program from MetaL source code to potentially any target language. Currently supported target languages are PHP, Java and Perl. The support for other languages can be added any time.

  3. Why was developed yet another language?
  4. MetaL is not just yet another language. It is a meta-language which means that it can generate automatically programs in traditional languages, eventually for tasks that are tedious or take too much work to write code manually.

    Therefore, MetaL is not intended to be a competitor of traditional languages but rather a complement that can be used to increase the productivity of software developers.

  5. How does MetaL engine work?
  6. The MetaL compiler engine traverses XML source code and executes actions associated with each command tag. Actions may be immediate, like creating a file, or generating some output, like the lines of code of a program in a given target language.

    Command actions are implemented by compiler modules. Such modules implement the different kinds of commands of the language, like execution flow, variable and expression manipulation, object oriented programming classes, etc.. Each module is responsible for generating the code in each of the supported target languages.

    There are also other modules that do not generate any code but can be used to execute or manage important software development processes like managing the build process like with the make tool or generating project packages to distribute or install in a production environment.

  7. What is meta-meta-programming?
  8. If a meta-programming language can be used to generate programs in any target language, it may as well be used to generate programs in the meta-language itself. This means that there may be very high level commands in a meta-language that can be interpreted to generate source code with only lower level meta-language commands.

    Translation of higher level commands in lower level ones may be done in one or more compiler passes. In a final pass, the meta-programming compiler generates code in a given target language. The method of developing programs with meta-language commands that are translated into lower level commands is called Meta-Meta-Programming or just Meta-N-Programming.

  9. How good are MetaL generated programs?
  10. That depends on how good you are at using the capabilities provided by the existing MetaL compiler modules. The lower level modules generate code that reflects the commands and the logic structure of the original MetaL source code written by the developer. The higher level modules, i.e. those that are based on meta-meta-programming, generate code automatically according to abstract software description that may not be so optimized as hand written code.

    Anyway, like with any compiler, the quality of the generated code is usually subject of improvement over time. Since MetaL is an Open Source project, anybody is allowed to inspect its source code and make it generate better code with smarter algorithms. Naturally, contributions to make MetaL generate better code will be very welcomed and credited to the contributing developers.

  11. What are the advantages of meta-programming with MetaL?
  12. The adoption of MetaL as the language for software development may present opportunities that developers may benefit now and in the future. These are the most important aspects of the opportunities that MetaL may provide that can be seen as advantages:

    • Language of powerful commands
    • Programs written in a language with powerful commands require less code to be written. Therefore it takes to develop such programs and consequently, less time to market them.

      If programs are written with less code, they will eventually have less bugs, which leads potentially to higher code quality. Programs developed with less code are also easier to maintain, taking less time to develop new features, leading ultimately to greater user satisfaction.

    • Domain specific languages
    • A programming tool that is appealing to less qualified developers, may also be appealing to experts on areas that are important for a software product. For instance, a business manager could define business rules to be implemented by a software product, or a translator could localize a software product.

      These experts could participate directly in the development of a software product, especially if they do not have to learn traditional programming languages.

      Domain specific languages could be used by these professionals if they are easy to learn and understand. Also, domain experts that are not programmers, are easier to find and less expensive to hire because they do not all the qualifications.

    • Re-targetable Programming
    • If it can generate a program in different programming languages, it may as well generate its code in a suitable manner to run optimally on different platforms, even those that do not exist today.

    • Future-proof Software
    • The languages that are most appropriate for developing applications today, may not be the best choice for developing future applications. Whatever are the languages of choice in the future, MetaL programs and components may not need to be adapted to be generated in the languages of the future.

  13. Who has created and developed MetaL?
  14. MetaL was created and developed by Manuel Lemos alone.

  15. When MetaL started to be developed?
  16. MetaL development started in the middle of 1999.

  17. In what language was developed the MetaL engine?
  18. MetaL was completely developed in PHP. The current implementation of MetaL compiler engine and the available modules were developed with more than 20,000 lines of PHP code. PHP was used because it provides a good set of powerful commands to dynamically manipulate text strings and associative arrays that were crucial for the rapid development of the MetaL engine.

    PHP is a scripting language that was originally meant for Web programming. It may seem odd to the use PHP for a heavy task such as compiling source files. Today PHP is not such a slow language, thanks mostly to the Zend engine which is an integral part of the PHP runtime engine. The MetaL compiler engine also makes extensive use of caching of previously parsed XML files to speedup the compilation process.

  19. How much does MetaL engine cost?
  20. MetaL is an Open Source project. It is being released with a BSD like software license. Basically this means that you are free to copy and modify it at will as long as you preserve the original copyright notices and license disclaimers.

    MetaL was not developed with any commercial intention, so it is released as an Open Source project. This way others can benefit and eventually contribute with bug fixes and enhancements.

  21. What is current state of development of MetaL?
  22. MetaL has been used in real world applications since the beginning of its development. However, it was decided that it would be released as an Open Source project only when the proof of concept is made. The proof of concept consists of generating the same program in different target languages from the same MetaL source code.

    The proof of concept was made in early 2002 by generating either in PHP and in Java a class and a test program to generate arbitrary XML documents. The test program executed from either the target languages outputs the exact same XML document.

    The class also contains embedded documentation information that is used to generate automatic documentation in HTML. MetaL can generate automatic documentation with syntax and examples that conforms with the target language of choice, i.e. documentation for PHP appears with syntax and examples in PHP. The same for Java or any other language that is supported.

    Initially MetaL was just generating PHP. The effort that made it generate also Java was huge due to significant differences between the languages. The way MetaL compiler modules worked was rethought and a significant part of the modules was rewritten to abstract better the target language code generation. Support for generating code in Perl was started but is not yet finished due to the lack of time.

    At this point it is expected that the MetaL engine does not require more significant changes to support other languages, although some changes may be needed to support differences of languages that were not yet anticipated.

    Anyway, MetaL is considered to be ready for public evaluation and so its source code is opened.

  23. Where can I see a sample of MetaL programs source and generated code?
    • You may take a look at the sample page that presents:

    • The source code of the Hello world! program written in Metal and the generate code in the target languages PHP and Java.
    • The source code of a class of objects written in Metal.
    • The generated code in the target languages PHP and Java.
    • A template document definition written in MetaL for generating class documentation independent of the target format.
    • The generated class documentation with syntax for PHP and Java.

  24. How can I try to use MetaL?
  25. First, you need to download the MetaL engine source code. It comes with three modules in directories named metal which is the MetaL project source code, xmlparser, forms and metabase which is a database abstraction package for developing portable database applications in PHP.

    The MetaL source tree comes with two projects that you can try to build. One is a simple Hello World! project located in the directory metal/test/helloworld. Another is a library of ready to use components made of classes of objects that is located at metal/library.

    To build each project, go into the respective directory and run from the command line:

    php -q build.php PHP

    to generate the resulting PHP script or

    php -q build.php clean

    and

    php -q build.php Java

    to generate the Java version.

    Several classes of library project have documentation that can be build with:

    php -q build documentation PHP

    or

    php -q build documentation Java

    You need PHP with XML module enabled. For Windows, the version available from here was compiled with XML support and only needs to have it enabled in the PHP configuration.

  26. Is there a mailing list about MetaL development?
  27. Yes, there is a mailing list that you may subscribe by sending a message to metal-dev-subscribe@yahoogroups.com or by going to this page.

  28. When will my favorite programming language be supported by MetaL?
  29. For the time being there is not much time or motivation to develop the support for any more languages. However, since MetaL engine is very modular, it is very easy for anybody with some free time to add the necessary modules to support other languages.

    Anybody interested to support other languages is very welcomed to do so and may join the MetaL development mailing list to obtain the necessary support.

  30. Are there any other meta-programming projects like MetaL?
  31. Meta-programming is not exactly a new concept. For instance programs like autoconf are able to produce shell scripts to automatically configure software source code packages so they can be built according the capabilities of the software of system where they are being installed. Programs like this help the users and developers to configure their software automatically, thus without having specify all configuration details manually.

    Using XML as source code is also not a new concept either. For instance, x++ is a programming language that uses XML as source code.

    There are certainly other XML based language and other meta-programming languages. I am not aware of any other XML based meta-programming language but it is possible that others may exist as nobody has the monopoly of good ideas.


For more information contact: info-at-meta-language.net