🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Comparación con competidores
Todas las tablas siguientes se generan automáticamente a partir de pruebas comparativas honestas (benchmarks/compare.php) ejecutando la MISMA operación para cada competidor, PHP 8.3.32, sin Xdebug.
1. Funcionalidad
| Capacidad | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| PSR-20 ClockInterface (now(): DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Reloj congelado para pruebas deterministas | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Reloj simulado con sleep() virtual | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Reloj monótono (inmune a los saltos de la hora del sistema) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Desplazamiento de tiempo mediante decorador (OffsetClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Escalado de tiempo mediante decorador (ScaledClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Truncamiento de instantes a una unidad arbitraria | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Objeto de valor de duración con precisión de nanosegundos | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Plazos con tiempo restante (Deadline) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Relojes por pasos y de cola para pruebas de escenario | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Cronómetro con vueltas incluido en el paquete | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Primitivas económicas timestamp()/microtime() sin objetos de fecha | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Instante ligado al reloj de la aplicación (DatePoint) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sustitución con ámbito del reloj global con restauración automática | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Adaptador para cualquier reloj PSR-20 | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Aritmética de calendario de meses/años con control de desbordamiento (CalendarDate) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| diffForHumans e isoFormat localizados sin ext-intl | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Predicados y diferencias de calendario (isWeekend, diffInDays, next) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Trait de PHPUnit para simular el tiempo (mockTime/unmockTime) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| sleep() real en relojes del sistema y monótonos | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Envoltura de cualquier objeto con now() como PSR-20 | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Iteración de un periodo de calendario con paso (CalendarPeriod) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Duración legible para humanos (TimeSpan::forHumans) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Macros: ampliación de la API de fechas sin herencia | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 24 | 8 | 10 | 2 | 4 | 2 | 0 |
2. Seguridad y exactitud
| Propiedad | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| Lecturas inmutables (DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Zona horaria explícita (independiente de date.timezone) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Determinismo de pruebas sin estado global obligatorio | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Monotonía (resistente al retroceso del reloj del sistema) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Excepciones tipadas en lugar de false/warning en la frontera de entrada | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Saneamiento de entradas hostiles en los mensajes de excepción | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Control de desbordamiento de enteros para duraciones | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Dependencias mínimas (≤2, sin ICU/ext-intl) | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Total | 🏆 8 | 4 | 3 | 4 | 3 | 4 | 2 |
2.1. Cumplimiento de los estándares de seguridad de paquetes Composer
| Estándar | CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | 🏆 Ganadores |
|---|---|---|---|---|---|---|---|
| Política de seguridad (SECURITY.md o proceso publicado) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | CloudCastle, symfony, carbon, beste, ergebnis |
| Control de vulnerabilidades conocidas en dependencias (roave/security-advisories + composer audit) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| OpenSSF Scorecard: puntuación publicada ≥ 7/10 | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | symfony |
| CWE-20: validación de entrada con excepciones tipadas | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | CloudCastle, carbon |
| CWE-117/CWE-150: neutralización de caracteres de control en mensajes de error | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| CWE-190: control de desbordamiento de enteros | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| Cadena de suministro: ≤2 dependencias de ejecución sin polyfill/ICU | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | CloudCastle, lcobucci, beste, ergebnis |
| OpenSSF Best Practices: pruebas automatizadas con control de mutación en CI | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | CloudCastle, lcobucci, ergebnis |
| Licencia aprobada por OSI en la distribución (MIT) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CloudCastle, symfony, carbon, lcobucci, beste, ergebnis |
| Total | 🏆 8 | 3 | 3 | 3 | 3 | 4 | CloudCastle |
<sub>Fuentes: archivos SECURITY.md de los repositorios (API de GitHub), require-dev de las distribuciones en Packagist, api.securityscorecards.dev (symfony/clock — puntuación del monorepo symfony/symfony; OpenSSF Scorecard solo evalúa proyectos de GitHub, por lo que CloudCastle en GitVerse no tiene puntuación — un contra honesto de la plataforma); filas CWE — según las pruebas de seguridad de los paquetes; symfony/clock para PHP 8.1 es la rama 6.4 con polyfill-php83.</sub>
3. Rendimiento: now()
_Obtención del momento actual now(), 200 000 veces (mínimo de 15)._
| Solución | Tiempo (ms) | Veredicto |
|---|---|---|
| new¹ | 109,7 | línea base (no es una biblioteca) |
| 🏆 CloudCastle | 114,5 | la más rápida entre las bibliotecas |
| 🏆 ergebnis | 115,6 | a la par del líder (dentro del margen de error) |
| 🏆 lcobucci | 116 | a la par del líder (dentro del margen de error) |
| 🏆 beste | 116,8 | a la par del líder (dentro del margen de error) |
| symfony | 154,6 | competidor |
| carbon | 649,8 | competidor |
4. Rendimiento: marca unix
_Marca unix actual (segundos enteros), 200 000 veces._
| Solución | Tiempo (ms) | Veredicto |
|---|---|---|
| new¹ | 16 | línea base (no es una biblioteca) |
| 🏆 CloudCastle | 27,8 | la más rápida entre las bibliotecas |
| ergebnis | 122,3 | competidor |
| lcobucci | 123 | competidor |
| beste | 125,6 | competidor |
| symfony | 164,2 | competidor |
| carbon | 658,7 | competidor |
5. Consumo de memoria de la biblioteca
_Crecimiento de memoria solo de la biblioteca en 200 000 llamadas now() (proceso aislado, sin el peso del autoloader)._
| Solución | Memoria (KB) | Veredicto |
|---|---|---|
| new¹ | 1 | línea base (no es una biblioteca) |
| 🏆 beste | 3 | la más ligera entre las bibliotecas |
| lcobucci | 5 | competidor |
| ergebnis | 5 | competidor |
| symfony | 30 | competidor |
| CloudCastle | 31 | competidor |
| carbon | 3 425 | competidor |
6. Fugas de memoria
_Crecimiento de memoria tras el calentamiento en 200 000 llamadas now() (0 — sin fugas)._
| Solución | Memoria (KB) | Veredicto |
|---|---|---|
| 🏆 CloudCastle | 0 | sin fugas |
| symfony | 0 | sin fugas |
| carbon | 0 | sin fugas |
| lcobucci | 0 | sin fugas |
| beste | 0 | sin fugas |
| ergebnis | 0 | sin fugas |
| new¹ | 0 | línea base (no es una biblioteca) |
7. Pico de memoria del proceso
_Pico de memoria de un proceso aislado en 200 000 llamadas now()._
| Solución | Memoria (KB) | Veredicto |
|---|---|---|
| 🏆 CloudCastle | 7 035 | la más ligera entre las bibliotecas |
| 🏆 symfony | 7 035 | a la par del líder (dentro del margen de error) |
| 🏆 lcobucci | 7 035 | a la par del líder (dentro del margen de error) |
| 🏆 beste | 7 035 | a la par del líder (dentro del margen de error) |
| 🏆 ergebnis | 7 035 | a la par del líder (dentro del margen de error) |
| new¹ | 7 035 | línea base (no es una biblioteca) |
| carbon | 10 303 | competidor |
8. Calidad del código
| Herramienta | 🏆 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 (capas de arquitectura) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Pruebas de mutación (Infection) | ✅ MSI 100.0% | ❌ | ❌ | ✅ | ❌ | ✅ |
| Cobertura de líneas (en vivo) | ✅ 100.0% | — | — | — | — | — |
| Total | 🏆 8 | 2 | 3 | 3 | 2 | 4 |
<sub>Herramientas de los competidores según el require-dev de sus distribuciones publicadas (instantánea de julio de 2026); symfony/clock — según el monorepo symfony/symfony. Las métricas de CloudCastle son resultados reales de ejecución local.</sub>
¹ La línea base (llamadas nativas sin la completitud de una solución) se muestra como contexto y no compite con las bibliotecas.
Los resultados que difieren menos del 5% del mejor se marcan como iguales: estas soluciones comparten una ruta caliente idéntica carácter a carácter (new DateTimeImmutable('now', $tz)); a esa escala la diferencia proviene del ruido de la máquina, no del código.
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano