2023-02-03 17:38 GMT+01:00, Flávio Heleno <flaviohbati...@gmail.com>: > On Fri, Feb 3, 2023 at 6:19 AM Olle Härstedt <olleharst...@gmail.com> > wrote: > >> 2023-02-02 15:19 GMT+01:00, someniatko <somenia...@gmail.com>: >> > 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 >> >> > Why not follow the steps of other projects that have been created > independently from the core and, > at some point, gained enough support/traction that were incorporated into > it?
You'd have to rewrite Psalm or Phpstan in C if you want it to be part of php-src. Or write a completely new project. Olle -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: https://www.php.net/unsub.php