|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav, Современная Java хранит строки чуть сложнее. У строки уже есть 2 варианта хранения. При едином интерфейсе снаружи. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 21:17 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton, Угу. Правда от константы для charat они все равно не отказались. Им самим это больно было бы. И боролись там не за скорость, а за память. Нюанс состоит в том, что всяка ява/basic исходит из того, что строка уже есть . И за всяки плюшки, сорта длины строки или её хеш-кода уже заплачено к моменту, когда пришло время за константу обращаться к её символам или определять длину/хеш-код. Между тем, есть масса задач, для которых представление строки "стандартным" библиотечным типом - это слишком дорогой платеж за её построение. Из этого не следует, что не требуется опознавать текущий символ в каком-нибудь CharSequence, или даже опознавать в нём целый набор отслеживаемых слов. Но топик, вообще-то имени switch. Прочитал на днях, что уже после первой стандартизации ANSI ещё какое время goto case 5: признавали за легальную, но не рекомендуемую конструкцию. Потом зачем-то решили разделить метки на правые и левые. Конструкция goto case 5: при таком разделении оказалась левой. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 21:38 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton petrav, Современная Java хранит строки чуть сложнее. У строки уже есть 2 варианта хранения. При едином интерфейсе снаружи. А что возвращает оператор [] у Ява String? PS: Если вам не интересно, то не отвечайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 21:57 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav Вот в Европе какой процент программистов перед вызовом [] резко остановится и начнёт думать, а что там такое записано? Может суррогатная пара? Вот какой процент по вашему мнению? Я понимаю, что в вэбе это редко нужно. Дональд Кнут считает что нужно сначала писать правильную и работающую программу. А потом ее уже оптимизировать. Моя точка зрения с этим вобщем совпадает. Ты должен в первую очередь прототипировать задачу. Решать ее в виде теч-демо и предлагать заказчику. Дальнейшие улучшения - это технические дебты которые можно пустить отдельной категорией. Разумеется я трачу время на обдумывание алгоритмов и структур данных. Но поверь я ни секунды не думаю над строками. Их API в моих языках вылизан десятилетиями и как правило он лучше чем я о нем думаю. Интринзики на ассемблере давно покрыли все строковые операции типа compare, substing, indexOf e.t.c. даже в Java. Ну нету сегодня ни одного основания думать о том как реализован get(i) для i-го символа. Он - константа уверяю тебя. Все о чем писал Василий в части Unicode стандартов - это правильно. Другое дело что это правильно в каком-то узком диапазоне кейсов. Я работал и DeucheBank и уверяю тебя ни секунды у меня не было багов с нормализацией. Да я просто не ведал что это такое. Весь контент в Excel файлов и в базах данных мы получали обычным utf-8 или unicode-16. И символы немецкого языка были в виде ä, ö, ü (0x0228, 0x0246, 0x0252) односимвольных букв. Возможно немцы сами никогда не используют эти combining characters или нам просто везло. Попробуй полазить по немецким сайтам и посмотреть как отдается веб-содержимое. Найдешь хоть один комбо-символ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 22:01 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav mayton petrav, Современная Java хранит строки чуть сложнее. У строки уже есть 2 варианта хранения. При едином интерфейсе снаружи. А что возвращает оператор [] у Ява String? PS: Если вам не интересно, то не отвечайте. Давай глянем. В последней транковой версии исходников OpenJDK. Почему я беру именно эту версию? Это эстраполяция на будущие разработки. То что входит в эту ветку потом релизится. remote.origin.url=https://github.com/unofficial-openjdk/openjdk Вот вобщем 2 разных реализации. Для UTF16 и латиницы. src/java.base/share/classes/java/lang/String.java Код: java 1. 2. 3. 4. 5. 6. 7.
Operator[] отсуствует. Тоесть он есть но определён только для массивов. Перегрузку индексатора для произвольного класса java не поддерживает. Java - это достаточно консервативный язык. Те кто хотят синтаксических сахаров - идут в Scala/Kotlin. И получают более мощный ЯП но в принципе байткод тот-же самый. Местами байткод будет хуже т.к. подтянет больше зависимостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 22:42 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
ВсеРазумный ВсеРазумный Для обычного switch это goto array pointer address. Ну это в лучшем случае, при хорошем оптимизаторе. А так - да, может быть так что switch обычный будет перебираться пока не найдёт свой собственный элемент конструкцией else-If. Так что вы были не далеки от правды. и чё если там миллионы их и всё это в цикле? да это противоречит всей философии C/C++, где именно на программисте лежит ответственность за то, где он что разместит. Невозможность убрать такой неэффективный поиск - это какой-то нонсенс. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 23:10 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav ВсеРазумный petrav, Просто в тексте поиска заменяйте Й,И,E,Ё на X и в искаемом тексте. Проблемы не будет Я собственно это и предлагаю. Просто Сидоров рассуждает так: UC-32 нам не подходит, потому что нам всё равно нужны составные символы для поиска. Типа для поиска нужно Ё заменить на два символа. И пока он не смог обосновать зачем это нужно. а тут предлагается английский текст искать русскими буквами или мы всё таки сначала определяемся с таблицей, по которой ищем? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2020, 23:23 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton Попробуй полазить по немецким сайтам и посмотреть как отдается веб-содержимое. Найдешь хоть один комбо-символ? https://www.bike-components.de/ прям сразу в верхнем меню но это utf, а не unicode ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 00:17 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
maytonStringUTF16.charAt(value, index); Теперь лезем глубей: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Внезапно никаких проверок на композиты, и прочую фигню, тупо пара байт по заданному смещению. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 00:22 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Алексей Роза, Давайте на примере разберёмся что есть что. Возьмём к примеру GCC 10.2 так как я им пользуюсь в основном. Возьмём для примера обычное извлечение из массива Код: plaintext 1. 2. 3. 4. 5.
Получаем Код: sql 1. 2.
Теперь испробуем конструкцию switch создав подобную ситуацию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Получаем на выходе аналогичный код Код: sql 1. 2.
А теперь имитируем через switch в плане else - if Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
На выходе получаем страшный и уродливый ASM представляющий из себя else - if конструкцию где если 10000 элементов, то он будет долго перебирать до последнего. Ты пишешь Алексей Роза где именно на программисте лежит ответственность за то, где он что разместит. Невозможность убрать такой неэффективный поиск - это какой-то нонсенс. Есть возможно контралировать. И вот тут как раз придуман goto array pointer, что бы не иметь миллион else - if Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На выходе мы получаем красивый код Прыжка Адресации Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 00:45 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Самая лучшая идея это создание goto array pointer Теперь вспомним что большинство автоматов к примеру в PHP работает со стандартным switch. Можно только представить на сколько скорость увеличится, если избавиться от switch конструкции в целом. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 00:52 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav Я придумал хорошую аналогию. P.S. Насчёт "не пользуешься - не платишь" - это вы загнули. Платишь. Необходимостью помнить семантику разных типов конструкторов, способов инициализации и всякой прочей неочевидной чешуи, которая мне, например - никуда не впилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 05:52 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
petrav А что возвращает оператор [] у Ява String? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 05:54 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
mayton Попробуй полазить по немецким сайтам и посмотреть как отдается веб-содержимое. Найдешь хоть один комбо-символ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 05:57 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Внезапно никаких проверок на композиты, и прочую фигню, тупо пара байт по заданному смещению. Именно по этой причине в NIO (java 1.4+) существует CharSequence и "вот это вот всё". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 06:09 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Basil A. Sidorov mayton Попробуй полазить по немецким сайтам и посмотреть как отдается веб-содержимое. Найдешь хоть один комбо-символ? Я не сомневаюсь что комбо существует. Я говорю - если мы возьмём 100 немецких сайтов, и 97 из них не используют комбо - то я делаю вывод что практика их применения настолько редка, что ей можно пренебречь. Именно это я хотел сказать Петраву. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 08:40 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А некоторые советуют размещать ветки в порядке возрастания значений. Это, якобы, позволяет компилятору генерировать более оптимизированный код... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 08:59 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_dev SQL2008, кто тебе сказал такую глупость? :) Существует определенный сложившийся стиль написания кода. Разумеется никто не запрещает писать "через задницу", а нормальный текст назвать глупостью. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 11:57 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
rdb_dev SQL2008, кто тебе сказал такую глупость? :) Давайте вернемся к коду Итак, какой смысл в данном случае имеет оператор default? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 12:01 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
SQL2008, 22172656 boobyСтартовый код прост как палка: для набора значений, известных как "хорошие случаи" просто goto на метку return True. Иначе провести доп проверку (с побочным действием) и решить - true оно return или нет. Если вы переместите default в конец, то либо увеличите число выходов из функции, ухудшив и читаемость и её размер, либо если еще захотите структурированного "единственного выхода", добавите переменных для хранения возвращаемого результата. Код в любом случае ухудшится и для чтения и для компиляции. А в своем исходном виде он легко читается и компактно компилируется. 2Basil A. Sidorov в интерфейсе строки в java есть работа с codepoints. Нормальная в смысле возврата int в качестве значения Но подозреваю, что там может оказаться подстава. В том смысле, что у меня нет уверенности, что ява-строки умеют работать с набором кодовых плоскостей в одной строке. Надо смотреть реализацию. Если у кого-то есть ссылки на актуальные исходники, например для 8-ки, бросьте пожалуйста ссылку в этот топик. Глянуть может быть и интересно было бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 12:57 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
SQL2008, ассемблер осилишь или транслировать в "ыудусе"? 22170869 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 13:12 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
ВсеРазумный Есть возможно контралировать. И вот тут как раз придуман goto array pointer, что бы не иметь миллион else - if Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
На выходе мы получаем красивый код Прыжка Адресации Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
А сравнить с другими вариантами, где case 2 выше всех, например? Вы таки утверждаете, что в асме всегда будет "по-своему" отсортированный код и там не учтутся предпочтения программиста в упорядочивании поиска? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 13:19 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
Алексей Роза, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
=> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
=> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
=> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Код: plaintext 1. 2. 3. 4. 5. 6.
В таком случае, в котором ты написал default выше... Ему всё равно где он стоит Тоже самое но с switch - else - if Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
=> Код: 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
=> Код: 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
=> Код: 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
=> Код: 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.
То есть теперь, глядя на это... Можно смело покрутить у виска человеку, который говорит что расположение DEFAULT в коде влияет на что - то. И вроде ты просил поменять ещё сторонами goto array Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
=> Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Сохранил свой порядок ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 13:38 |
|
Очень интересны нюанс с оператором switch
|
|||
---|---|---|---|
#18+
booby Если вы переместите default в конец, то либо увеличите число выходов из функции, ухудшив и читаемость и её размер, либо... rdb_dev SQL2008, ассемблер осилишь или транслировать в "ыудусе"? 22170869 Компилятор не глупый. Давайте посмотрим что он на деле сделает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Никто не был прав) Потому что код - говнокод без логики ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2020, 13:43 |
|
|
start [/forum/topic.php?fid=57&msg=39984628&tid=2017371]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 158ms |
0 / 0 |