2023-02-02 15:19 GMT+01:00, someniatko <[email protected]>: > Hi Internals > > The main gist: > -------------- > > I suggest to introduce an official type-checker / static analyser / > preprocessor / transpiler for PHP, somewhat similar to TypeScript in > the JavaScript world, which will allow to introduce the features > otherwise impossible for the PHP world, at the cost of including an > additional transpilation step. > > The reasoning: > -------------- > > You all know there are a lot of problems with the language, especially > large gaps with the current type system, which have large community > demand to overcome, but still cannot be solved due to the paradigm > chosen by PHP. And the paradigm is to be statically typed (to some > extent), but dynamically checked language, which limits the number of > available options due to performance reasons. > > The introduction of static types have gradually eliminated the need of > using external means of communicating the types (phpdoc @param and > @return annotations), replacing them with native language constructs, > making the language more expressive and enterprise-ready. However, > there are a lot of things still missing, like types of arrays, > including lists, hash-maps and structure-like arrays, and of course > generic classes and functions. These are still covered nowadays with > external means like phpdoc annotations and static analysers / type > checkers to validate them. This leaves PHP in the odd mixture of > native types and externally validated annotations via comments. > > Paradigm of a dynamically checked language also leaves out the problem > of type-checking before running the code. Even though the types are > defined statically, you still have to physically run the code, with > all possible execution paths, to catch a type error. To avoid that you > still would have to use an external typechecker / static analyser, > even if PHP could cover 100% of type demand natively. > > Python solves this problem nicely I think. It is dynamically typed, > but it allows a special syntax for static types and also has a > separate static type checker. I think this is really a good approach > and it would be great if PHP followed this path for the beginning, but > we have what we have already. > > There were attempts to create preprocessors for PHP (like PHP++ IIRC), > which allowed features like generics, but they did not gain enough > popularity, weren't baked by large enough companies, didn't make their > way to major IDEs support. I believe the only solution is to make an > official one. > > Therefore, I suggest the following thing: > 1. Introduce a new #declare directive which will mark the file as > requiring pre-processing. > 2. Let PHP introduce special features that only work in such > "pre-processing required" files, such as typed lists and generics. > 3. Implement a static type-checker in PHP that will verify those typed > lists and generics are indeed used in a valid way.
No need to waste resources implementing a new one when we already have two very competent already: Psalm and Phpstan? Or why is those not enough for your use-case? "The greatest enemy to a perfect solution is a good enough solution already in place." ;) Olle -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php
