Size: a a a

2019 May 16

ТБ

Тимур Бухараев in Kotlin JVM
Andrew Mikhaylov
Именно. А как вы представляете их себе на уровне языка при работе на JVM?
на уровне языка - ну что это некие базовые типы, которые понимает компилятор и генерит для них специальный байт-код
источник

AM

Andrew Mikhaylov in Kotlin JVM
Тимур Бухараев
на уровне языка - ну что это некие базовые типы, которые понимает компилятор и генерит для них специальный байт-код
А зачем, если есть инлайн-классы, на которых можно сделать то же самое?
Собственно, частично беззнаковые поддерживаются и компилятором, конкретно в разрезе литералов и вывода типов. Но не более того.
источник

BP

Bogdan Panchenko in Kotlin JVM
Тимур Бухараев
на уровне языка - ну что это некие базовые типы, которые понимает компилятор и генерит для них специальный байт-код
ну инлайн классы и генерят специальный байткод 🤔
источник

ТБ

Тимур Бухараев in Kotlin JVM
Andrew Mikhaylov
А зачем, если есть инлайн-классы, на которых можно сделать то же самое?
Собственно, частично беззнаковые поддерживаются и компилятором, конкретно в разрезе литералов и вывода типов. Но не более того.
ну например делать какие-то оптимизации, которые сложнее сделать если компилятор не знает про беззнаковые явно
ну и беззнаковые и знаковые типы выглядят равноправными, поэтому если одни встроены в язык, то то что другие являются библиотечными классами выглядит несколько несимметрично
источник

BP

Bogdan Panchenko in Kotlin JVM
Тимур Бухараев
ну например делать какие-то оптимизации, которые сложнее сделать если компилятор не знает про беззнаковые явно
ну и беззнаковые и знаковые типы выглядят равноправными, поэтому если одни встроены в язык, то то что другие являются библиотечными классами выглядит несколько несимметрично
какие оптимизации вы хотите ? a + b ?
источник

AM

Andrew Mikhaylov in Kotlin JVM
Тимур Бухараев
ну например делать какие-то оптимизации, которые сложнее сделать если компилятор не знает про беззнаковые явно
ну и беззнаковые и знаковые типы выглядят равноправными, поэтому если одни встроены в язык, то то что другие являются библиотечными классами выглядит несколько несимметрично
Я не особо представляю себе, о каких оптимизациях речь. Интринсиков в JVM под беззнаковые, по-моему, не было.
источник

AM

Andrew Mikhaylov in Kotlin JVM
Но я могу ошибаться. В любом случае, это просто часть stdlib, в которой при необходимости эти самые интринсики можно и использовать.
источник

BP

Bogdan Panchenko in Kotlin JVM
или начнём что такое чисkо - последовательность битов. В одном определении они значать одно, в друго- другое. Например Int\Long и Double, на платформе будт одинаковыми, и только компилятор определяет на этапе компиляции как с ними работать
источник

ТБ

Тимур Бухараев in Kotlin JVM
Bogdan Panchenko
какие оптимизации вы хотите ? a + b ?
ну например если мы делаем сравнение a >= 0 для беззнакового, то компилятор может понять что оно всегда true
источник

BP

Bogdan Panchenko in Kotlin JVM
Тимур Бухараев
ну например если мы делаем сравнение a >= 0 для беззнакового, то компилятор может понять что оно всегда true
а зачем писать такой код ? Ну возможно и делается. В крайнем случаее подберет JIT
источник

AM

Andrew Mikhaylov in Kotlin JVM
Тимур Бухараев
ну например если мы делаем сравнение a >= 0 для беззнакового, то компилятор может понять что оно всегда true
Дык никто не мешает компилятору оптимизировать операции с типами из стандартной библиотеки. Я без идей, есть ли там сейчас такое, но проблем не вижу.

Хотя идея, я гляжу, такой инспекцией не обладает.
источник

AM

Andrew Mikhaylov in Kotlin JVM
Bogdan Panchenko
а зачем писать такой код ? Ну возможно и делается. В крайнем случаее подберет JIT
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/unsigned/src/kotlin/UnsignedUtils.kt#L10
Такое JIT вряд ли подберёт, но это копейки в любом случае.
источник

BP

Bogdan Panchenko in Kotlin JVM
не нужные ифы ? в первую очередь подберается, ненйтив код компилится без ифа. Сам процесорр ифы ненавидит и там есть блок "Ванга", которая определяет какую из веток ифа загрузить на конвеер
источник

BP

Bogdan Panchenko in Kotlin JVM
Bogdan Panchenko
не нужные ифы ? в первую очередь подберается, ненйтив код компилится без ифа. Сам процесорр ифы ненавидит и там есть блок "Ванга", которая определяет какую из веток ифа загрузить на конвеер
>  ненйтив код компилится без ифа

Если можно гарантировать, не просто так статистика соберается
источник

AM

Andrew Mikhaylov in Kotlin JVM
Bogdan Panchenko
не нужные ифы ? в первую очередь подберается, ненйтив код компилится без ифа. Сам процесорр ифы ненавидит и там есть блок "Ванга", которая определяет какую из веток ифа загрузить на конвеер
Ну там после инлайна будет if((a xor Int.MIN_VALUE).compareTo(0) >= 0), насколько я понимаю. Хрен его знает, насколько очевидно, что это no-op :)
источник

BP

Bogdan Panchenko in Kotlin JVM
ну тут чесный XOR
источник

AM

Andrew Mikhaylov in Kotlin JVM
Хотя о чём это я, compareTo на примитиве ж тоже развернётся.
источник

ТБ

Тимур Бухараев in Kotlin JVM
Bogdan Panchenko
а зачем писать такой код ? Ну возможно и делается. В крайнем случаее подберет JIT
ну мало ли
написал сначала для знакового, потом заменил на беззнаковое и вот оно осталось
хотя тут скорее warning нужен
источник

AM

Andrew Mikhaylov in Kotlin JVM
a xor Integer.MIN_VALUE >= 0. Уже проще, есть шансы :)
источник

ТБ

Тимур Бухараев in Kotlin JVM
Bogdan Panchenko
а зачем писать такой код ? Ну возможно и делается. В крайнем случаее подберет JIT
в C++ я такие баги неоднократно видел
источник