Я пишу язык программирования, и когда я натолкнулся на этот вопрос , я сразу подумал, что языки должны оптимизировать логические значения в битовые флаги для программиста. Это позволило бы сохранить все преимущества скорости и эффективного использования памяти, одновременно снимая бремя обслуживания и возможности ошибок, вызванных более сложными манипуляциями с битами.
Единственный случай, когда вам может не понадобиться такая оптимизация, - это ситуация, когда хранится только один набор логических значений. В основном, если у вас есть 8 bits for flags + 8 bit masks * 8 bits per bit mask = 72 bits
вместо 8 booleans * 8 bits per boolean = 64 bits
. Но как только у вас есть хотя бы две копии логических значений, оно становится 2 copies * 8 bits for flags + 8 bit masks * 8 bits per bit mask = 80 bits
против 2 copies * 8 booleans * 8 bits per boolean = 128 bits
. Кажется, что несколько случаев, когда логические значения были бы более оптимальными для хранения, было бы легко обнаружить, поэтому можно было бы не применить оптимизацию.
Есть ли причина, по которой языки не поддерживают эту оптимизацию? Я оглянулся вокруг, и не похоже, чтобы это делали какие-либо языки (возможно, я просто не смотрю в нужных местах).