|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Ну ты же сам ему сказал оптимизировать на скорость, а переходы плохо сочетаются со спекулятивным выполнением в процессорах. Код: sql 1. 2.
а дальше хоть по test rcx, rcx , хоть по таблице переходов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 14:48 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_devrepne scasb Эта конструкция в современных процессорах существует только для взад совместимости и тормозит как последний слоупок. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 15:00 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, есть ещё не менее простой способ: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 15:22 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_dev, А есть ещё проще и лучше И быстрее И качественнее Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Ты скажешь, чел, но тут много mov. А я тебе скажу, если тебе надо заполнить таблицу не 256 символами, а юникодом 65535 то MOV будет столько же. Но при этом скорость извлечение 65535 - 1 элемента будет ровна извлечению 1 символа. Что быстро в 65535 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 18:51 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
booby Впечатление у меня такое: Понятно, что когда-то начиналось с того, что сейчас называют UCS-2. Потом долепились составные символы и получился UTF-16. Так как составные символы "практически никому не нужны" и "интерфейс charAt трогать нельзя", то работа с кодепойнтами прилепилась нашлепкой - "если кому надо, за практическую константу со всем разберутся". Конечно, скорее всего так и происходило. И не только с Явой, но с QString, WinApi, C# и т.д. Это как раз то, о чём я и спорю на этом форуме. В развитых языках программирования существует простой способ работы с Unicode в формате utf-16 без учёта составных символов. И для большинства европейских программистов это нормально и правильно. Но когда я начинаю защищать "wchar_t" свидетели секты utf-8 начинают во все стороны извергать религиозный гнев и кричать, что "wchar_t" — это грехопадение, а истинно правильный только utf-8. При этом сектанты кричат, что Петрав не понимает простейших вещей, что он зашоренный, что там какие-то великие умляуты и декомпозиция без которой вообще жизни нет, что длинна строки не нужна и индексация тоже и т.д. Ярко наблюдаемый религиозный экстаз во всю ширь и высь. Но сами сектанты программируют на QString, Java и JavaScript — где есть индексация и strlen(). Где тот-же самый "wchar_t". А мне предлагают использовать utf-8 для которого нет API в C++ и отказаться от wchar_t для которого API в C++ есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 20:42 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Java тащит на себе груз обратной совместимости. И UTF-16 и модифицированный UTF-8 - это всё "грехи" этого груза. Да, ПетрАВ вправе "себе любимому" изготовить библиотеку для UTF-16 или даже для UCS-2. Для его личных целей это будет "норм". Вот только "А ты не путай свою шерсть с государственной". ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 21:05 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Java тащит на себе груз обратной совместимости. И UTF-16 и модифицированный UTF-8 - это всё "грехи" этого груза. Да, ПетрАВ вправе "себе любимому" изготовить библиотеку для UTF-16 или даже для UCS-2. Для его личных целей это будет "норм". Вот только "А ты не путай свою шерсть с государственной". Груз совместимости? Наверное, ты можешь дать ссылку где хотя бы рекомендуется воспринимать "charAt()" как deprecated. PS: Интересно, почему ты решил, что это аббревиатура и она именно такая? Просто интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 21:15 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_dev, Вот Она Мощь GCC 10.2 Про которую Я писал. Сам, взял, и сделал goto array pointer https://godbolt.org/z/zT6nG3 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2020, 21:53 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav, попробую изложить то, что думаю, хотя мне сама идея что-то излагать не очень нравится. Вы спрашивали про промышленный код. Я считаю, что о промышленном коде речь идет всякий раз тогда, когда программист автоматически, не задумываясь тянется к "библиотечному коду", что бы это ни значило. В этом смысле я сам "промышленный программист", и у меня в целом нет задачи задумываться об адекватности используемого "библиотечного кода". Про 16, 8 и прочие строки. (Как промышленный программист, да ещё и пишущий на бейсике) Строки для "обычного" программиста это то, что предоставляет либо "стандартная библиотека", либо конкретная система, в своих кишках имеющая некоторое "стандартное" представление, что такое "строки" в памяти системы и как с ними работать. Насколько я понимаю, Windows и iOS за строки именно utf-16 считают, а Linux оперирует с utf-8. Поэтому те кто давит за utf-8 просто рассказывает, что вы неудачник, если программируете для ios или windows. Здесь белые нитки по всему чёрному полю. Дальше все просто - хотите бесшовно обмениваться с системой "строками", располагайте такой "библиотечной реализацией", которая сможет это сделать без применения дополнительных преобразований. Иначе такое взаимодействием будет облагаться налогом на преобразование. С одной стороны, нельзя единственной "библиотечной" реализацией покрыть вообще все возможные потребности, в контексте которых возникает термин "строки". С другой, за построение "стандартной строки", при использовании "системных функций" налог все равно платится, если система работает с utf-16 как внутренним представлением в памяти и источником для построения строк является файл, например (файлы с такой кодировкой практически не используются). С другой стороны, счастливая жизнь в другой системе заканчивается, когда какой-то враг подсовывает этой другой системе файл в кодировке, отличной от utf-8. Очевидно, что такой враг должен быть проклят вместе со своим файлом. Касательно wchar_t есть мутные моменты - зачем-то он заявлен платформно-зависимым. Как точно думали об этом те, кто так сделал, не представляю. Как не представляю, прилетит ли на самом деле какая-нибудь подстава с этой стороны тем, кто на этот тип положился. В общем, то, что я хотел сказать состоит в том, что, может быть, это большое везение, что c++ так до с их пор и не обзавелся единым и закостенелым представлением о том, что такое строки и как с ними жить. Конечно, это кустарщина, а не "промышленное программирование", но зато ты предупрежден о том, что это твое дело, решать - что ты будешь в своих задачах принимать за "строки", и как с ними обходиться. Это не делает богом, но даёт возможность обжигать горшки. Что касается строк с целью "интернационализации", была такая компания ICU, выпускавшая библиотеки, обеспечивающие работу со всеми видами юникодных кодировок. Сейчас она принадлежит IBM, и уже с маркировкой от IMB выпуск таких библиотек для явы и си продолжается. Если нужен (любой) юникод - бери используй, грубо насмехаясь над теми, кто этого не делает (для utf-16, кажется, там именно wchar_t в качестве "символа") // http://site.icu-project.org/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 03:15 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Unicode = evil. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
тынц ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 03:51 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Unicode vs UTF Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 03:52 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
однако в C++ довольно странное превращение из utf-8 в utf-16, которое всё равно выливается в wchar_t... https://stackoverflow.com/questions/7153935/how-to-convert-utf-8-stdstring-to-utf-16-stdwstring ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 04:07 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
ВсеРазумный, четыре кэшлайна ради четырёх символов? Что-то я не уверен в оптимальности решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 09:04 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav где хотя бы рекомендуется воспринимать "charAt()" как deprecated ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 09:13 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov rdb_devrepne scasb ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 10:28 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Basil A. Sidorov petrav где хотя бы рекомендуется воспринимать "charAt()" как deprecated Ну если это груз совместимости, то следовало бы написать в документации: "charAt()" считается устаревшим, не рекомендуется к использованию, вот вам итератор по символам. И так во всех книгах по Яве. Ведь utf-8 это круче, нужно готовить подрастающее поколение. Вот в Qt5 поступили по-взрослому: раз и кодировка по умолчанию utf-8 и это не обсуждается (не настраивается). Кстати, а не подскажешь итератор по символам в Яве, который даёт доступ к четырёх байтовым символам? Если не сложно пример кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 10:32 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
booby Насколько я понимаю, Windows и iOS за строки именно utf-16 считают, а Linux оперирует с utf-8. Поэтому те кто давит за utf-8 просто рассказывает, что вы неудачник, если программируете для ios или windows. Здесь белые нитки по всему чёрному полю. Я скажу во первых что - ничего подобного. Наш разговор распался на 2 бранча еще давно. Одна часть - это интернационализация, сериализация и стандарты текстовых файлов и интернета. И другая часть - это внутренняя форма представления строк в API вызовах конкретной операционной системы. И наш технический спор - спор очень многосторонний и многогранный часто переходит границы этих бранчей. Мы прыгаем то на одну тему то на другую. Моя идея о том что строка это не массив а Stream<Char> это вообще философская идея от итераторов и ФП и я ее продолжаю отстаивать как свое видение будущего для всех строковых типов данных всех языков. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 11:01 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton, Не имеет значения, на что распался разговор. Где switch и где итераторы... исключительно в плане уточнения - правильно ли я понимаю, что сейчас вы называете итераторами то, что C++ называет итераторами, и не подразумеваете итераторов в java? То что ты говоришь про итераторы - здорово. Но поворачивает на несколько страниц назад. Итератор, вероятно, должен уметь указывать на/возвращать символ. А символ-то, в конце концов, это кто? И вообще - сама строка состоит ли из символов или символ извлекается из неё, но неизвестно, из чего она там состоит? В этом месте в utf-16 мы с разбегу утыкаемся лбом в грабли, брошенные со времен ucs-2 со строгими приговором - не сметь трогать charat. Что бы вы ни думали там себе про символы - получите в качестве такового именно, что вернет charat, или пользуйтесь дописанным после default новым интерфейсом. От дырки во лбу спасают только заговоры - "да никогда в жизни вы своим кодом не упретесь ни в какие композиционный символы, поэтому фактически нигде никакой ваш код не сломается, если вы используете только charAt". Может и правда оно так. Но в этом месте желательно хотя бы сознательно понимать, что ты для себя автоматически и бессознательно выбираешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 11:44 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav следовало бы Есть концептуальная вещь: нельзя индексировать строку по "символам". По кодовым точкам можно, но "вам не понравится". Эта концепция от языка не зависит и создаёт вполне обоснованные преференции для UTF8. Поскольку зоопарк (даже всего трёх) кодировок - плохо, то UTF-16/-32 должны "сдохнуть". Это тоже концептуально и тоже не зависит от языка программирования. А вот ваши домыслы про charAt() и java-доки - лучше удерживать при себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 11:47 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Есть концептуальная вещь: нельзя индексировать строку по "символам". ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 12:12 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Тема достойна пятничного топика. Я подниму завтра. Мы обсуждаем только одну сторону. Оператор индекса или charAt. Это узко. Мы же не узко-мыслящие? Верно? Строка это масссив или Stream? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 12:14 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton Строка это масссив или Stream? Как там в школе учили? Свет — это одновременно и волна, и частица. Дуалистическая теория? Для простых применений массив. Для, например, сложного морфологического анализа — поток. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 12:45 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton ... Строка это масссив или Stream? а по какой причине - не двусвязный список? Он знает, для всякого символа - есть у конкретного символа предыдущий. Раз уж ты сказал "итераторы", в том смысле, в каком их "должно быть достаточно" для построения любого алгоритма, стой на своем, то за вычетом причуд какой-то конкретной реализации, разговор сводится к тому, какие алгоритмы на самом деле ломаются и не могут быть или дорого переписываются при переходе от представлению строки "массивом" к "двусвязному" и затем "односвязному" списку (здесь в качестве модели stream) Конкретный выбор кодирующего представления можно и проигнорировать, хотя от него может приходить какая-то своя степень сумятицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 12:46 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
booby mayton ... Строка это масссив или Stream? а по какой причине - не двусвязный список? Он знает, для всякого символа - есть у конкретного символа предыдущий. Раз уж ты сказал "итераторы", в том смысле, в каком их "должно быть достаточно" для построения любого алгоритма, стой на своем, то за вычетом причуд какой-то конкретной реализации, разговор сводится к тому, какие алгоритмы на самом деле ломаются и не могут быть или дорого переписываются при переходе от представлению строки "массивом" к "двусвязному" и затем "односвязному" списку (здесь в качестве модели stream) Конкретный выбор кодирующего представления можно и проигнорировать, хотя от него может приходить какая-то своя степень сумятицы. Я думаю что мы начнем с односвязного. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 12:49 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_dev нужно, если необходимо построить отношения при пересечении строковых множеств на основе символьного ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2020, 13:54 |
|
|
start [/forum/topic.php?fid=57&msg=39985287&tid=2017371]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 189ms |
0 / 0 |