ronniko
> когда Богданчик успел полюбить java
большая часть софта на адроид пишется на java. Старое железо что он ковыряет, в основном андроид железки.
большая часть софта на адроид пишется на java.
Ах вон оно, что.
Zefick
> под iOS на чём-то кроме свифта
RoboVM еще жив вроже?
monobogdan
> RoboVM еще жив вроже?
Компания Microsoft свернула проект RoboVM, полученный с покупкой Xamarin (15 апреля 2016 года). На гитхабе два человека делают по одному пушу в месяц. Последняя fully supported версия iOS - 16, у неё уже кончилась официальная поддержка. Подобные проекты начали массово закрываться после выпуска GraalVM от Оракла. Но и без этого iOS с недавнего времени начала окукливаться, всё больше делая упор на свифте. Они даже Objective-C так до этого не форсили как сейчас форсят свифт.
Хы :)
Надо было мне для одной задачки (на питоне) сделать учет и расход некоторых ресурсов. Есть несколько поставщиков разнотипных дискретных ресурсов (то есть, штуками, целочисленно), при этом некоторые поставщики могут предлагать неограниченное количество какого либо ресурса.
Надо учесть все возможные ресурсы, а потом планировать расход. Сначала взялся реализовывать "в лоб" мапой (тип_ресурса, количество), задав для неограниченного количества специальное значение (по инерции взял None). Естественно, это требовало дополнительной писанины с условиями (если текущий поставщик предлагает None, если в мапе уже записано None). И при расходе также условия (уменьшать только если не None, сравнивать с нулем только если не None).
Но потом подумал - а нет ли како-го то способа, чтоб все эти частные случаи автоматом учитывались без всяких ручных условий? Гугление дало неожиданное решение - использовать в качестве такого хитрого значения плавучий +inf. Поскольку это питон, он легко переваривает суммирование/вычитание плавучего +inf с целочисленными.
Но вот подумалось - а если бы я писал не на питоне, а, скажем, на Си++ или Расте - какие варианты можно было бы использовать там? Первое, что приходит в голову - хранить количество не интами, а double/f64 (ведь пока целое число влезает в мантиссу, плавающий петух не проявляется). Но как-то это некошерно, мало ли что-там может при потенциальном рефакторинге попасть в этот "целочисленный double". А как было бы кошерно?
Dmitry_Milk
в расте, думаю, было бы кошерно
enum DSAjjasdb { Unlimited, Limited(u64) }
и во всех местах через match предусматривать преобразования) можно конечно и операции переопределить)
Dmitry_Milk
> А как было бы кошерно?
Ну видимо класс IntWithInfinity
kkolyan, 1 frag / 2 deaths, неужели ничего готового нет? Точнее готового, но кошерного (т.к. double с его +inf вполне годился бы, если б не мысли о возможном рефакторинге).
Dmitry_Milk
Ну а как кошерно сделать? Тебе придётся либо память жрать на состояние бесконечности, либо одно состояние считать за "бесконечное". А бы посоветовал сложение-с-сатурацией, но оно тут поможет, только если у тебя только сложения.
Dmitry_Milk
мысли о возможном рефакторинге) плюс потенциальные корнер кейсы, которые у inf могут отличаться. просто если выбирается раст, то это уже значит что априори готовы вложиться в надежность кода)
Dmitry_Milk
> Но вот подумалось - а если бы я писал не на питоне, а, скажем, на Си++
Проще чем на петухоне, ибо имеешь реальное понимание какими ресурсами и возможностями обладаешь. Твоя задача сводится только к тому, как определить по размеру это "очень много" и придумать так, чтобы это твое "очень много" в обозримом будущем не смогло исчерпать разумные пределы.
Dmitry_Milk
> Сначала взялся реализовывать "в лоб" мапой
Вот на этом ваш петухон и все, полномочия его окончены, ибо мыслить надо на более низком уровне, за гранью парадигмы шоблонных контейнеров и алгоритмов общего назначения.
Dmitry_Milk
> Первое, что приходит в голову - хранить количество не интами, а double/f64
Как вариант, безлимитных поставщиков складывать в отдельную структуру ;)
totoro
> Проще чем на петухоне
Я тебе сейчас такой питухон устрою, что параша с мыльницу покажется! Вот это https://stackoverflow.com/questions/42315541/difference-between-n… -and-floatinf что такое? Транслятор питона был на чём написан, я спрашиваю?! Гусь.jpg
1 frag / 2 deaths
> Ну а как кошерно сделать?
Посмотреть в исходниках NumPy, Maxima, Scalab или прочих математических программ. https://numpy.org/devdocs/reference/constants.html
Почему надо решение любой задачи на программирование превращать в строительство даже не велосипедного, а завода по строительству завода велосипедов?
Алексей Патрашов
> Я тебе сейчас такой питухон устрою
Караул, хулиганы зрения лишают! :)
Алексей Патрашов
> Вот это https://stackoverflo… -and-floatinf что такое?
Ну если по правде, то в сишке все действительно проще реализуется, обычно для признака бесконечности/невалидности/чего-то еще используют most significant bit, дешево и сердито.
Dmitry_Milk
> Но вот подумалось - а если бы я писал не на питоне, а, скажем, на Си++ или Расте - какие варианты можно было бы использовать там?
Пряч просто всё за интерфейсом.
isInfinity
getNumberValue // выбивает исключение если isInfinity
incBy
decBy
asString
totoro
> Твоя задача сводится только к тому, как определить по размеру это "очень много" и придумать так, чтобы это твое "очень много" в обозримом будущем не смогло исчерпать разумные пределы.
Мой вопрос в первую очередь был про то, как делать так, чтоб иметь более простой код, без кучи ифов с условиями, в которых можно запутаться. В принципе все советы выше сводятся к тому, что "сделай свой (у)инт_с_бесконечностью", других вариантов, кроме некошерного использования плавучки для хранения интов, не придумалось.
А насчет
totoro
> и придумать так, чтобы это твое "очень много" в обозримом будущем не смогло исчерпать разумные пределы.
в "этом нашем петухоне"-то как раз с этим все красиво и не сломается, и ничего придумывать не надо потому что:
- инт безразмерный, сколько надо, столько и влезет, пока менеджер кучи не покажет болт (легко и непринужденно можно посчитать количество элементарных частиц во всей наблюдаемой Вселенной)
- переменную с количеством можно сослать не на целочисленное значение, а на плавучий +inf, который будет складываться/вычитаться с интами именно с таким поведением, какое мне и надо (+inf + целое == +inf, целое + +inf == +inf), и сравниваться с нулем тоже так, как мне надо (+inf > 0 == True ).