On Fri, May 19, 2023, 09:26 Mike Schinkel <m...@newclarity.net> wrote:
> > On May 18, 2023, at 1:34 PM, Rowan Tommins <rowan.coll...@gmail.com> > wrote: > > On Thu, 18 May 2023 at 16:27, Deleu <deleu...@gmail.com> wrote: > >> Monolog is a great example of what PHP is missing - a single library > for a > >> purpose. I have never worked with any other library besides Monolog and > I > >> never worked on any project which didn't have it installed. Perhaps my > >> bubble might be a limiting factor here, but I get a feeling that > Monolog is > >> considered to be The Logging PHP Library. > > > > Then in what sense is it "missing"? What value would be served by placing > > an elephant logo on it, and renaming it "PHPLog™"? > > > > I know that's a bit of a sarcastic response, but it's also a serious one > - > > what would we define as the aims of a replacement for Monolog, which > aren't > > currently being served? > > > > We could guarantee it was installed with every version of PHP, but only > by > > severely restricting its release cycle, so that every PHP version had > > exactly one version of Monolog. If it remains an independently versioned > > Composer package, I can't think of much that would change. > > > > <snip> > > > > Taking the logging example, imagine we decided that, to paraphrase Dr > > Strangelove, "We can't allow a logging gap!" So we hack together a > logging > > package that's worse in every way than Monolog, but call it "official". > > Half the community will ignore it and carry on using Monolog; the other > > half won't realise that a better alternative exists, and be worse off > from > > Today. > > That statement only envisions inclusion of OR replacement for Monolog, but > not adding support to PHP core that would offer a standard way to USE > Monolog. Let me explain. > > And it is helpful logging was mentioned as an example because we can look > to other languages to see what they have done, and Go just recently did > exactly that. > > Go proposed[1] then added[2] a Structured Logging package to the Go > standard library even though there are many logging packages already > available for Go and in wide use[3], just as PHP has several logging > packages[4]. Their design doc[5] explains their rationale. > > Basically they wanted to include a common set of code that will operate on > a new standard interface. For PHP logging there is already a standard > interface; PSR-3[6], but what PHP does not have is an actual implementation > of PSR-3 can be depended on to always exists nor a common way all code can > get a PSR-3 logger. > > So rather than providing Monolog in core, provide a minimal implementation > in core — SimpleLogger maybe? — as well as the PSR-3 interfaces and PSR-3 > helper classes[7] plus a few new standard functions to always be available > in PHP. One of those functions — setLogger() maybe? — could allow users to > specify the PSR-3 logger they want to use, and many developers could choose > to use Monolog\Logger. > > Another of those functions — getLogger() maybe? — could then be called by > any PHP code to return an instance of `Psr\Log\LoggerInterface` so that all > code can depend a logger existing. If no PHP code had previously called > setLogger() then getLogger() would first instantiate a new SimpleLogger, > pass it to setLogger(), and then return that object for the caller to use. > > So what is "missing" is not the logging library per se, but instead the > plumbing that would make it possible for code from multiple different > authors working independently to all be able to write code that logs which > will still be interoperable, know that a logger will be guaranteed to be > available (it could even be a null logger), and also have the option to use > Monolog, some other PSR-3 library, or write their own new special-purpose > logger; whatever their choice. > > Said another way, the value gained by placing an elephant logo on it would > be: > > 1. Interoperability, > 2. Flexibility, and > 3. A guarantee of existence when called. > > > I actually wonder if some things in core should be removed to encourage > > userland replacements - ext/soap, for instance, and some of the data > > structures in ext/spl. > > Having a PHP core standard library could allow for some of those things to > be reimplemented in PHP but still included in PHP core. That would reduce > the need to maintain them in C, and would be a way to slowly deprecate them > for userland alternatives, ideally with some inclusion of new simple > standard interfaces and some new functions for could make working with > instances — setSOAPClient()/getSOAPClient() maybe? — to allow people to > use the built-in ones or to replace with their own. > > ext/spl could be moved to a PHP core standard library assuming doing so > was performant enough and/or new features were added to core to allow them > to be implemented in a performant manner that did not kneecap > performant-sensitive code that use them. > > > IMHO, the things that would benefit from being written in PHP then > bundled > > are things that are so low-level that it's hard to get them wrong; the > > building blocks that the community will use to build things like Monolog > > and Guzzle. > > Imagine all the PSR interfaces as well as default simple implementations > for each and where applicable a set of functions to set and get those > instances to be included in a PHP standard core library. > > If those were implemented in a PHP standard core library that there might > even be motivation to develop new PSR interfaces derived from existing best > practices in the wild, as right now that useful effort seems to have > stalled. For example, I could see an interface and default implementation > for working with ChatGPT like AI being something that people might want to > look into in the near future. > > Again, the value IMO for having a PHP core standard library is not > necessarily about being able to add functionality, but to add code that can > enable code from multiple developers to work independently yet > inter-operably with new or existing functionality out in the wild. > > Said another way, don't think of is as a Core VS. Composer, think of it as > Core AND Composer. > > -Mike > > P.S. I know this thread was motivated by desire to allow PHP functions to > be added to core, and I won't argue that would not be a nice-to-have > option, but I think the real value would be to include interfaces, simple > implementations and related functions that could enable and encourage > interoperability across PHP code written by different authors > independently. And having that latter would certainly not preclude the > former, from time to time. > > [1] https://github.com/golang/go/issues/56345 > [2] https://pkg.go.dev/golang.org/x/exp/slog > [3] https://blog.logrocket.com/5-structured-logging-packages-for-go/ > [4] https://www.loggly.com/ultimate-guide/php-logging-libraries/ > [5] > https://go.googlesource.com/proposal/+/master/design/56345-structured-logging.md > [6] https://www.php-fig.org/psr/psr-3/ > [7] https://packagist.org/packages/psr/log > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: https://www.php.net/unsub.php I think this whole thread can be summarized into a single statement: "Let's integrate PSR standards into PHP core and ship those interfaces as part of the language". > >