🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Confronto con i concorrenti
Tutte le tabelle seguenti sono generate automaticamente da test comparativi onesti (benchmarks/compare.php) eseguendo la STESSA operazione per ogni concorrente, PHP 8.3.32, senza Xdebug.
1. Funzionalità
| Capacità | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| PSR-20 ClockInterface (now(): DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Orologio congelato per test deterministici | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Orologio mock con sleep() virtuale | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Orologio monotono (immune agli sbalzi dell’ora di sistema) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Sfasamento temporale tramite decoratore (OffsetClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Scalatura del tempo tramite decoratore (ScaledClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Troncamento degli istanti a un’unità arbitraria | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Value object di durata con precisione al nanosecondo | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Scadenze con tempo residuo (Deadline) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Orologi a passi e a coda per test di scenario | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Cronometro con giri incluso nel pacchetto | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Primitive economiche timestamp()/microtime() senza oggetti data | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Istante legato all’orologio dell’applicazione (DatePoint) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sostituzione con ambito dell’orologio globale con ripristino automatico | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Adattatore per qualsiasi orologio PSR-20 | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Aritmetica di calendario per mesi/anni con controllo dell’overflow (CalendarDate) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| diffForHumans e isoFormat localizzati senza ext-intl | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Predicati e differenze di calendario (isWeekend, diffInDays, next) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Trait PHPUnit per simulare il tempo (mockTime/unmockTime) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| sleep() reale sugli orologi di sistema e monotoni | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Incapsulamento di qualsiasi oggetto con now() come PSR-20 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Iterazione di un periodo di calendario con passo (CalendarPeriod) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Durata leggibile (TimeSpan::forHumans) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Macro: estensione dell’API delle date senza ereditarietà | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Totale | 🏆 24 | 8 | 10 | 2 | 4 | 2 | 0 |
2. Sicurezza e correttezza
| Proprietà | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| Letture immutabili (DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Fuso orario esplicito (indipendente da date.timezone) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Determinismo dei test senza stato globale obbligatorio | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Monotonia (resistente al ritardo dell’orologio di sistema) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Eccezioni tipizzate invece di false/warning al confine di input | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sanificazione dell’input ostile nei messaggi di eccezione | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Controllo dell’overflow di interi per le durate | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Dipendenze minime (≤2, senza ICU/ext-intl) | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Totale | 🏆 8 | 4 | 3 | 4 | 3 | 4 | 2 |
2.1. Conformità agli standard di sicurezza dei pacchetti Composer
| Standard | CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | 🏆 Vincitori |
|---|---|---|---|---|---|---|---|
| Politica di sicurezza (SECURITY.md o processo pubblicato) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | CloudCastle, symfony, carbon, beste, ergebnis |
| Controllo delle vulnerabilità note delle dipendenze (roave/security-advisories + composer audit) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| OpenSSF Scorecard: punteggio pubblicato ≥ 7/10 | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | symfony |
| CWE-20: validazione dell’input con eccezioni tipizzate | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | CloudCastle, carbon |
| CWE-117/CWE-150: neutralizzazione dei caratteri di controllo nei messaggi di errore | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| CWE-190: controllo dell’overflow di interi | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| Catena di fornitura: ≤2 dipendenze di runtime senza polyfill/ICU | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | CloudCastle, lcobucci, beste, ergebnis |
| OpenSSF Best Practices: test automatici con controllo di mutazione in CI | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | CloudCastle, lcobucci, ergebnis |
| Licenza approvata OSI nella distribuzione (MIT) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CloudCastle, symfony, carbon, lcobucci, beste, ergebnis |
| Totale | 🏆 8 | 3 | 3 | 3 | 3 | 4 | CloudCastle |
<sub>Fonti: file SECURITY.md nei repository (API di GitHub), require-dev delle distribuzioni su Packagist, api.securityscorecards.dev (symfony/clock — punteggio del monorepo symfony/symfony; OpenSSF Scorecard valuta solo progetti GitHub, quindi CloudCastle su GitVerse non ha un punteggio — un contro onesto della piattaforma); righe CWE — dai test di sicurezza dei pacchetti; symfony/clock per PHP 8.1 è il ramo 6.4 con polyfill-php83.</sub>
3. Prestazioni: now()
_Recupero del momento corrente now(), 200 000 volte (minimo di 15)._
| Soluzione | Tempo (ms) | Verdetto |
|---|---|---|
| new¹ | 109,7 | linea di base (non una libreria) |
| 🏆 CloudCastle | 114,5 | la più veloce tra le librerie |
| 🏆 ergebnis | 115,6 | alla pari con il migliore (entro il margine di errore) |
| 🏆 lcobucci | 116 | alla pari con il migliore (entro il margine di errore) |
| 🏆 beste | 116,8 | alla pari con il migliore (entro il margine di errore) |
| symfony | 154,6 | concorrente |
| carbon | 649,8 | concorrente |
4. Prestazioni: timestamp unix
_Timestamp unix corrente (secondi interi), 200 000 volte._
| Soluzione | Tempo (ms) | Verdetto |
|---|---|---|
| new¹ | 16 | linea di base (non una libreria) |
| 🏆 CloudCastle | 27,8 | la più veloce tra le librerie |
| ergebnis | 122,3 | concorrente |
| lcobucci | 123 | concorrente |
| beste | 125,6 | concorrente |
| symfony | 164,2 | concorrente |
| carbon | 658,7 | concorrente |
5. Consumo di memoria della libreria
_Crescita di memoria della sola libreria su 200 000 chiamate now() (processo isolato, senza il peso dell’autoloader)._
| Soluzione | Memoria (KB) | Verdetto |
|---|---|---|
| new¹ | 1 | linea di base (non una libreria) |
| 🏆 beste | 3 | la più leggera tra le librerie |
| lcobucci | 5 | concorrente |
| ergebnis | 5 | concorrente |
| symfony | 30 | concorrente |
| CloudCastle | 31 | concorrente |
| carbon | 3 425 | concorrente |
6. Perdite di memoria
_Crescita di memoria dopo il riscaldamento su 200 000 chiamate now() (0 — nessuna perdita)._
| Soluzione | Memoria (KB) | Verdetto |
|---|---|---|
| 🏆 CloudCastle | 0 | senza perdite |
| symfony | 0 | senza perdite |
| carbon | 0 | senza perdite |
| lcobucci | 0 | senza perdite |
| beste | 0 | senza perdite |
| ergebnis | 0 | senza perdite |
| new¹ | 0 | linea di base (non una libreria) |
7. Picco di memoria del processo
_Picco di memoria di un processo isolato su 200 000 chiamate now()._
| Soluzione | Memoria (KB) | Verdetto |
|---|---|---|
| 🏆 CloudCastle | 7 035 | la più leggera tra le librerie |
| 🏆 symfony | 7 035 | alla pari con il migliore (entro il margine di errore) |
| 🏆 lcobucci | 7 035 | alla pari con il migliore (entro il margine di errore) |
| 🏆 beste | 7 035 | alla pari con il migliore (entro il margine di errore) |
| 🏆 ergebnis | 7 035 | alla pari con il migliore (entro il margine di errore) |
| new¹ | 7 035 | linea di base (non una libreria) |
| carbon | 10 303 | concorrente |
8. Qualità del codice
| Strumento | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| PHPStan | ✅ max + strict | ❌ | ✅ | ✅ + strict | ✅ + strict | ✅ + strict |
| Psalm | ✅ level 1 | ✅ (monorepo) | ❌ | ❌ | ✅ | ❌ |
| PHPMD | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| PHPCS / CS-Fixer | ✅ PSR-12 + fixer | ✅ fixer | ✅ | ✅ | ❌ | ✅ fixer |
| Rector | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Deptrac (livelli di architettura) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Test di mutazione (Infection) | ✅ MSI 100.0% | ❌ | ❌ | ✅ | ❌ | ✅ |
| Copertura delle righe (dal vivo) | ✅ 100.0% | — | — | — | — | — |
| Totale | 🏆 8 | 2 | 3 | 3 | 2 | 4 |
<sub>Strumenti dei concorrenti secondo il require-dev delle loro distribuzioni pubblicate (istantanea luglio 2026); symfony/clock — secondo il monorepo symfony/symfony. Le metriche CloudCastle sono risultati reali di esecuzione locale.</sub>
¹ La linea di base (chiamate native senza la completezza di una soluzione) è mostrata per contesto e non compete con le librerie.
I risultati che si discostano meno del 5% dal migliore sono segnati come pari: queste soluzioni condividono un percorso caldo identico carattere per carattere (new DateTimeImmutable('now', $tz)); a quella scala la differenza viene dal rumore della macchina, non dal codice.
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano