On Thu, Jun 27, 2024, at 2:15 AM, Michael Morris wrote: > If you got this far, thank you. This overall idea to take one of the > better things to happen to JavaScript in the last decade and > incorporate it into PHP has been bothering me for awhile so I figured > I'd share. I don't know how much merit there is to this though.
There's a lot to chew on here, and some interesting ideas. However, reading through it, there's one key question that sticks in my mind: What problem is this trying to solve? What problem would packages/modules/whatever be solving that isn't already adequately solved? There seems to be a bunch of stuff kinda-sorta being addressed in this proposal, but no clear picture of the problem being solved, and how it gets solved. Before we get anywhere close to weeds, there's high-level questions that need to be answered. Which of these are we trying to solve? (Solving all of them at once is unlikely, and some are mutually-incompatible.) 1. Adding a "strict pedantic mode" without messing with existing code? 2. Package-level visibility (public, package, protected, private)? 3. Avoid name clashes? 4. Improved information for autoloaders and preloading, possibly making class-per-file unnecessary in many cases? 5. A larger scope for the compiler to analyze in order to make optimizations? 6. Package-level declares, inherited by all files in the package? 7. Something else? We need to know exactly what we're solving for to be able to determine if a proposal is any good at solving it. For me personally, 2 and 4 would be the main things to address, and if someone with more compiler knowledge than me could do something on 5, that would be neat. 3 is, as Tim noted, a solved problem at this point. 1 we already are working on in stages via deprecations. 6 is potentially unwise, unless we had a good set of things that made sense to specify at a package level. Once we know what we're trying to solve, we need to ask about constraints. The major one being the relationship with namespaces. Do we want: 1. Packages and namespaces are synonymous? (This is roughly how JVM languages work, I believe.) 2. Packages and files are synonymous? (This is how Python and Javascript work.) 3. All packages correspond to a namespace, but not all namespaces are a package? And given the near-universality of PSR-4 file structure, what impact would each of those have in practice? (Even if packages open up some new autoloading options and FIG publishes a new PSR for how to use them, there's only a billion or so PSR-4 class files in the wild that aren't going away any time soon.) My gut feeling is we want 3, but I'm sure there's a debate to be had there. All the other stuff about different operators and file name extensions and stuff is completely irrelevant until there is a solid consensus on these basic questions. For something of this scale, to coin a phrase, "bring me problems, not solutions." --Larry Garfield