Difference between revisions of "Project Ideas"

From D Wiki
Jump to: navigation, search
(Lowerer)
Line 2: Line 2:
  
 
This tool would "translate" compilable D code to compilable D code. See initial idea discussed in [https://issues.dlang.org/show_bug.cgi?id=5051 Issue 5051]. It would offer a variety of lowering services for purposes of tooling, debugging, and project management:
 
This tool would "translate" compilable D code to compilable D code. See initial idea discussed in [https://issues.dlang.org/show_bug.cgi?id=5051 Issue 5051]. It would offer a variety of lowering services for purposes of tooling, debugging, and project management:
 +
 +
* do not output function bodies, <tt>.di</tt> style
 +
 +
* write deduced attributes for functions (useful when function bodies are not written)
  
 
* expand all possible mixins in the code
 
* expand all possible mixins in the code
Line 8: Line 12:
  
 
* explicitate all user-defined operators, e.g. <tt>a + b</tt> becomes <tt>a.opBinary!"+"(b)</tt>
 
* explicitate all user-defined operators, e.g. <tt>a + b</tt> becomes <tt>a.opBinary!"+"(b)</tt>
 
* do not output function bodies, <tt>.di</tt> style
 
  
 
* replace all wholesale <tt>import</tt>s with detailed <tt>import</tt>s that specify the symbols needed
 
* replace all wholesale <tt>import</tt>s with detailed <tt>import</tt>s that specify the symbols needed
Line 32: Line 34:
  
 
* introduce named values instead of temporaries wherever order of evaluations is defined
 
* introduce named values instead of temporaries wherever order of evaluations is defined
 
* write deduced attributes for functions
 
  
 
== <tt>fork()</tt>-based Garbage Collector ==
 
== <tt>fork()</tt>-based Garbage Collector ==

Revision as of 00:03, 4 November 2016

Lowerer

This tool would "translate" compilable D code to compilable D code. See initial idea discussed in Issue 5051. It would offer a variety of lowering services for purposes of tooling, debugging, and project management:

  • do not output function bodies, .di style
  • write deduced attributes for functions (useful when function bodies are not written)
  • expand all possible mixins in the code
  • execute lookup on all symbols and write the full symbol, e.g. writeln becomes .std.stdio.writeln
  • explicitate all user-defined operators, e.g. a + b becomes a.opBinary!"+"(b)
  • replace all wholesale imports with detailed imports that specify the symbols needed
  • write specialized versions for all templates used within the module (this is likely to be tricky)
  • lower all scope statements into try statements
  • lower all foreach statements into for statements
  • specify the exact symbols needed for each import statement (which means: if no symbols, the import is redundant - easy to mark as a warning by a subsequent tool)
  • evaluate all static ifs possible
  • lower code using version(), i.e. make the unused branch disappear
  • make all comments disappear
  • make only non-documentation comments disappear
  • evaluate all possible CTFEs (tricky)
  • introduce named values instead of temporaries wherever order of evaluations is defined

fork()-based Garbage Collector

Interfacing with C++

Linux debugger