Re: Design by Contract

From: Date: Thu, 05 Feb 2015 12:42:59 +0000
Subject: Re: Design by Contract
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-81919@lists.php.net to get a copy of this message
2015-02-05 15:32 GMT+03:00 Dmitry Stogov <dmitry@zend.com>: > Hi Alexander, > > Defining contracts through doc-comments is also possible, but this way is > not native. > On the other hand, if you already have this implemented, we may just reuse > it. > Thanks, Dmitry! This would be a really nice feature on engine-level. Ideally, for PHP7-8, I would like to see a hook system from compile-level to userland, to define a language extension. This feature is highly required for custom DSLs and much more. DbC technique can be also implemented as parse-time weaver. E.g. we define a parser-extension: register_parser_extension(ContractExtension::class); this class will receive an AST of PHP file and check interesting nodes. This node can be annotation or something else: [Contract::Invariant => $this->value > 0] class Test { public $value = 100; public function foo($newValue) { $this->value = $newValue; } } and parser extension change the compiled source code by inserting this check into methods: [Contract::Invariant => $this->value > 0] class Test { public $value = 100; public function foo($newValue) { $this->value = $newValue; assert($this->value > 0); // Inserted by parser extension (via opcodes) } } Is it possible to do this?

« previous php.internals (#81919) next »