¿Alguien puede explicar los pros y los contras del uso de los tipos de datos Data.Text
y Data.ByteString.Char8
? ¿Funciona el texto con ASCII solo cambiar estos pros y contras? ¿Sus variantes perezosas cambian la historia también?Data.Text vs Data.ByteString.Char8
Respuesta
Data.ByteString.Char8
proporciona funciones para tratar los valores ByteString
como secuencias de caracteres ASCII de 8 bits, mientras que Data.Text
es un tipo independiente que admite la totalidad de Unicode.
ByteString
y Text
son esencialmente lo mismo, en cuanto a la representación: matrices estrictas, sin caja con variantes perezosas basadas en listas de trozos estrictos. La principal diferencia es que ByteString
almacena octetos (es decir, Word8
s), mientras que Text
almacena Char
s, codificado en UTF-16.
Si está trabajando con texto solo en ASCII, entonces el uso de Data.ByteString.Char8
probablemente será más rápido que Text
, y usará menos memoria; sin embargo, debe preguntarse si está realmente seguro de que solo va a trabajar con ASCII. Básicamente, en el 99% de los casos, usar Data.ByteString.Char8
sobre Text
es un hack de velocidad - los octetos no son caracteres, y cualquier Haskeller puede aceptar que al usar el tipo correcto se debe priorizar en comparación con la velocidad bruta sin metal. Por lo general, solo debe considerar si ha perfilado el programa y es un cuello de botella. Text
está bien optimizado, y la diferencia probablemente será insignificante en la mayoría de los casos.
Por supuesto, hay situaciones no relacionadas con la velocidad en las que Data.ByteString.Char8
está garantizado. Considere un archivo que contiene datos que son esencialmente binarios, no texto, pero separados en líneas; usar lines
es completamente razonable. Además, es completamente concebible que un entero pueda estar codificado en decimal ASCII en el contexto de un formato binario; usar readInt
tendría mucho sentido en ese caso.
Así que, básicamente:
Data.ByteString.Char8
: Para situaciones ASCII puro, donde el rendimiento es de suma importancia, y para manejar los datos binarios "casi" que tiene algunos componentes ASCII.Data.Text
: texto, incluyendo cualquier situación en la que existe la más mínima posibilidad de que se utilice algo distinto a ASCII.
- 1. Text.Printf with Data.Text?
- 2. Parsec con data.text
- 3. ¿Hay un equivalente de Show type class para Data.Text?
- 4. ¿Por qué los ejemplos de Data.Text no me funcionan?
- 5. Convertir entre Data.ByteString y Data.Text codificado en Latin1
- 6. ¿Existe un análogo del paquete stringsearch para Data.Text en lugar de ByteString?
- 7. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 8. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 9. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 10. ACE vs Boost vs Poco vs wxWidgets
- 11. VS 2008 vs VS 2008 Express
- 12. Atomikos vs JOTM vs Bitronix vs?
- 13. Acumular vs fold vs reducir vs compress
- 14. .NET vs ASP.NET vs CLR vs ASP
- 15. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 16. método vs función vs procedimiento vs clase?
- 17. Rhino simulacro vs Typemock vs JustMock vs
- 18. inline vs __inline vs __inline__ vs __forceinline?
- 19. Exec vs vs ExecWait ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs vs ExecDos ExeCmd
- 20. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, ¿qué tienen en común?
- 21. Crystalspace vs. Irrlicht vs. .....?
- 22. NetSqlAzMan vs AzMan vs (?????)
- 23. SpiderMonkey vs JavaScriptCore vs.
- 24. Django -vs- Grails -vs-?
- 25. Stackpanel: Altura vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 26. Mathematica: sin evaluar vs vs Defer Hold vs vs HoldForm HoldAllComplete vs etc, etc
- 27. NSImage vs. CIImage vs. CGImage?
- 28. Bitmap vs ImageView vs Drawable
- 29. DIP vs. DI vs. IoC
- 30. Boo vs C# vs Python?
Puedo garantizar que habrá texto ASCII solamente, ya que mi programa procesa archivos C generados por computadora muy específicos. Intentaré ambos en cualquier caso. –
Probablemente iría por 'Data.ByteString.Char8', entonces, ya que esencialmente tratará con un formato binario que solo * se asemeja a * texto. (También recomendaría revisar [attoparsec] (http://hackage.haskell.org/package/attoparsec) para analizar los archivos.) – ehird
También menciona que el texto codifica como UTF-16 y ByteString como un octeto. ¿Esto en general afecta el uso de la memoria? Mi aplicación es una reescritura de código, y tal como está, usa enormes cantidades de memoria que puedo rastrear usando String. Ya practico mis cuerdas, por lo que cualquier mejora sería bienvenida. Es por eso que quiero cambiar los tipos de datos. –