de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Nikita Volkov
Nikita Volkov
Question

Data.Teks String vs

Sementara pendapat umum dari Haskell masyarakat tampaknya bahwa itu's selalu lebih baik untuk menggunakan Teks bukan String, fakta bahwa masih Api dari sebagian besar dipertahankan perpustakaan Stringyang berorientasi membingungkan neraka keluar dari saya. Di sisi lain, ada proyek penting, yang menganggap String sebagai sebuah kesalahan sama sekali dan memberikan Prelude dengan semua contoh dari Stringyang berorientasi pada fungsi diganti dengan Teks-rekan.

Jadi apa ada alasan bagi orang untuk terus menulis StringApi yang berorientasi kecuali mundur - dan standar Prelude-kompatibilitas dan "switch-membuat intertia"? Apakah ada kemungkinan lain kelemahan Teks dibandingkan dengan String?

Terutama, saya'm tertarik dalam hal ini karena saya'm merancang perpustakaan dan mencoba untuk memutuskan jenis yang digunakan untuk menyampaikan pesan-pesan kesalahan.

72 2013-10-26T15:57:47+00:00 5
Pemrograman
text
string
haskell
 kqr
kqr
26 Oktober 2013 в 4:07
2013-10-26T16:07:08+00:00
Lebih
Sumber
Sunting
#22628993

Saya kira wajar tanpa pengecualian adalah bahwa sebagian besar perpustakaan penulis don't ingin menambahkan lebih banyak dependensi dari yang diperlukan. Karena string adalah bagian dari harfiah setiap Haskell distribusi (it's bagian dari bahasa standar!), hal ini jauh lebih mudah untuk mendapatkan diadopsi jika anda menggunakan string dan don't membutuhkan pengguna untuk memilah-milah Teks distribusi dari hackage.

It's salah satu dari mereka "kesalahan desain" anda hanya harus hidup dengan kecuali jika anda dapat meyakinkan sebagian besar masyarakat untuk beralih malam. Lihat saja berapa lama telah diambil untuk mendapatkan Aplikatif untuk menjadi superclass dari Monad – yang relatif kecil tapi banyak yang menginginkan perubahan dan bayangkan berapa lama itu akan mengambil untuk mengganti semua String hal-hal dengan Teks.


Untuk menjawab pertanyaan yang lebih spesifik: saya akan pergi dengan String kecuali anda mendapatkan kinerja yang nyata manfaat dengan menggunakan Teks. Pesan kesalahan ini biasanya lebih kecil satu dari hal-hal jadi seharusnya't menjadi masalah besar untuk menggunakan String.

Di sisi lain, jika anda adalah semacam ideologi murni yang eschews pragmatisme untuk idealisme, pergi dengan Teks.


* Aku menaruh kesalahan desain dalam menakut-nakuti tanda kutip karena string sebagai sebuah daftar dari karakter yang rapi properti yang membuat mereka mudah untuk mencari alasan dan mengintegrasikan dengan lainnya ada daftar-fungsi operasi.

 kqr
kqr
Jawaban edit 26 Oktober 2013 в 5:16
28
0
Alain O'Dea
Alain O'Dea
26 Oktober 2013 в 4:31
2013-10-26T16:31:29+00:00
Lebih
Sumber
Sunting
#22628994

Jika anda API ditargetkan pada pengolahan sejumlah besar karakter yang berorientasi pada data dan/atau berbagai pengkodean, maka API anda harus menggunakan **Teks.

Jika API anda terutama untuk berurusan dengan satu-off string, kemudian menggunakan built-in String jenis harus baik-baik saja.

Menggunakan String untuk jumlah besar dari teks akan membuat aplikasi yang menggunakan API anda mengkonsumsi secara signifikan lebih banyak memori. Menggunakannya dengan asing pengkodean serius bisa mempersulit penggunaan tergantung pada bagaimana anda API bekerja.

String ini cukup mahal (setidaknya 5N kata-kata di mana N adalah jumlah Karakter dalam String). Kata-kata adalah sama dengan jumlah bit sebagai arsitektur prosesor (ex. 32 bit atau 64 bit): http://blog.johantibell.com/2011/06/memory-footprints-of-some-common-data.html

 mb21
mb21
Jawaban edit 26 Juli 2015 в 3:26
23
0
 permeakra
permeakra
10 Desember 2014 в 4:19
2014-12-10T16:19:42+00:00
Lebih
Sumber
Sunting
#22628995

Setidaknya ada tiga alasan untuk menggunakan [Char] di proyek-proyek kecil.

  1. [Char] tidak bergantung pada setiap arcane staf, seperti asing pointer, baku memori, baku array, dll yang dapat bekerja secara berbeda pada platform yang berbeda atau bahkan tidak tersedia sama sekali

  2. [Char] adalah lingua franka di haskell. Setidaknya ada tiga 'efisien' cara-cara untuk menangani data unicode di haskell: utf8-bytestring, Data.Teks.Teks dan Data.Vektor.Tanpa box.Vektor Char, masing-masing membutuhkan berurusan dengan tambahan paket.

  3. dengan menggunakan [Char] satu keuntungan akses ke semua kekuatan [] monad, termasuk banyak fungsi-fungsi tertentu (alternatif string paket jangan mencoba untuk membantu dengan itu, tapi masih)

Secara pribadi, saya menganggap utf16berbasis Data.Teks` salah satu yang paling dipertanyakan semua keputusan dari haskell masyarakat, karena utf16 menggabungkan kekurangan dari kedua utf8 dan utf32 encoding sementara memiliki tidak ada manfaatnya.

 jub0bs
jub0bs
Jawaban edit 17 Juni 2015 в 12:47
7
0
 Titou
Titou
6 Januari 2017 в 11:31
2017-01-06T11:31:06+00:00
Lebih
Sumber
Sunting
#22628996

Saya tidak berpikir ada satu alasan teknis untuk String yang tetap. Dan aku bisa melihat beberapa orang untuk itu untuk pergi.

Secara keseluruhan saya akan pertama berpendapat bahwa dalam Teks/String kasus hanya ada satu solusi terbaik :

  • String pertunjukan yang buruk, semua orang setuju bahwa

Teks ini tidak sulit untuk digunakan. Semua fungsi-fungsi yang sering digunakan pada String yang tersedia pada Teks, ditambah beberapa lagi dalam konteks string (substitusi, padding, encoding)

  • memiliki dua solusi menciptakan kompleksitas yang tidak perlu kecuali semua basis fungsi yang dibuat polimorfik. Bukti : ada JADI pertanyaan pada subjek otomatis konversi. Jadi, ini adalah ** sebuah masalah.

Sehingga salah satu solusinya adalah lebih kompleks dari dua, dan kekurangan dari String akan hilang pada akhirnya. Lebih cepat lebih baik !

 Community
Community
Jawaban edit 23 Mei 2017 в 12:02
4
0
Passing By
Passing By
2 Maret 2017 в 10:36
2017-03-02T22:36:59+00:00
Lebih
Sumber
Sunting
#22628997

Aku bertanya-tanya apakah Data.Teks selalu lebih efisien daripada Data.String???

"karena ... " misalnya adalah O(1) untuk String dan O(n) untuk Teks. Append adalah O(n) untuk String dan O(n+m) untuk ketat Teks's. Demikian juga,

    let foo = "foo" ++ bigchunk
        bar = "bar" ++ bigchunk

adalah ruang yang lebih efisien untuk String daripada ketat Teks.

Masalah lain yang tidak berhubungan dengan efisiensi adalah pencocokan pola (dipahami code) dan lazyness (bisa ditebak per-karakter dalam String, entah bagaimana implementasi tergantung pada malas Teks).

Teks's yang jelas baik untuk karakter statis urutan dan untuk di-tempat modifikasi. Untuk bentuk-bentuk lain dari struktur editing, Data.String mungkin memiliki keuntungan.

4
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi