Bits and bytes are fundamental to JavaScript too, which is why the
language has, for a long time, included operations like <<, >>, <<<,
&, |, ^ and ~ on Numbers, exposing the ability to manipulate 32-bit
integers. This is comparable to what C provides. Like C, JavaScript
has a relatively minimal standard library, so collections of these are
not included in the standard library itself.

Uint8ClampedArray is more of a historical artifact than something you
should actually aim to use. Uint8Array is probably what you'd want to
get at as a basis for a user-level library.

On Tue, Aug 11, 2015 at 5:20 PM, Daniel Ehrenberg
<little...@chromium.org> wrote:
> Bits and bytes are fundamental to JavaScript too, which is why the
> language has, for a long time, included operations like <<, >>, <<<,
> &, |, ^ and ~ on Numbers, exposing the ability to manipulate 32-bit
> integers. This is comparable to what C provides. Like C, JavaScript
> has a relatively minimal standard library, so collections of these are
> not included in the standard library itself.
>
> Uint8ClampedArray is more of a historical artifact than something you
> should actually aim to use. Uint8Array is probably what you'd want to
> get at as a basis for a user-level library.
>
> On Tue, Aug 11, 2015 at 11:55 AM, Michael McGlothlin
> <mike.mcgloth...@gmail.com> wrote:
>> SIMD types appear almost as limited in size as using numbers. Often I need 
>> to manipulate thousands or millions of bits efficiently so fumbling around 
>> with numbers is messy.
>>
>> I've looked at several implementations on npm but none seemed very mature or 
>> standard.
>>
>> I guess it's philosophical as much as anything. In my mind the heart of 
>> programming is bits and bytes so I find it odd that most programming 
>> languages treat bits and bytes as strange uncles. In my mind all other data 
>> types are derived from bits and bytes so it should be possible to easily 
>> derive my own types this way or see the bits behind the types that are 
>> built-in.
>>
>> In this case I'm implementing a bit index (which is something I use a lot) 
>> for quickly finding relationships in complex data. Often I want to mess with 
>> bits for working with specifics of file formats and network protocols. When 
>> working with large numbers it's nice to not worry about limits. And I work 
>> directly with bits when doing electronics.
>>
>> I'm not surprised that it's not supported but it seemed to go with the idea 
>> of a byte array so I was hopeful. And it seems more generally useful than 
>> things like SIMD types.
>>
>> Thanks,
>> Michael McGlothlin
>> Sent from my iPhone
>>
>>> On Aug 10, 2015, at 7:36 PM, Daniel Ehrenberg <little...@chromium.org> 
>>> wrote:
>>>
>>> SIMD types have bitwise operators, but SIMD.js exposes just fixed-size
>>> vectors that are optimized to what hardware can optimize certain
>>> operations for. A future extension (the "long SIMD API") may operate
>>> on whole arrays. I wouldn't recommend using SIMD.js unless you really
>>> feel like you're taking advantage of the better performance, and the
>>> particular vector size works for your requirements.
>>>
>>> The point of SIMD is to expose higher-performance hardware features to
>>> users. You may want to use this for implementing bitwise operations in
>>> user code. However, if you don't need that, it may be enough for you
>>> to use existing operators & | ^ ~ etc, in a loop. A search on npm
>>> yields tons of bitarray libraries which probably do this already,
>>> though I haven't assessed how good they are.
>>>
>>> If you were getting at operator overloading in particular, operators
>>> are already well-defined on things like Uint8Array: Roughly speaking,
>>> they will call .valueOf() and, if that results in a Number they will
>>> do the operation on the underlying Number. There's no built-in valueOf
>>> method for that object, but you can always monkeypatch one in. Here's
>>> an example session in the V8 command-line shell:
>>>
>>> d8> Uint8ClampedArray.prototype.valueOf = function() { return 1 }
>>> function () { return 1 }
>>> d8> new Uint8ClampedArray([1, 2]) << 3
>>> 8
>>>
>>> The downside of doing anything beyond existing npm packages and
>>> changing the language is that it increases complexity. What is the
>>> upside you have in mind to building it into the language?
>>>
>>> Have fun!
>>> Dan
>>>
>>>> On Mon, Aug 10, 2015 at 4:35 PM, Isiah Meadows <isiahmead...@gmail.com> 
>>>> wrote:
>>>> Do SIMD types solve your problem?
>>>>
>>>> https://github.com/tc39/ecmascript_simd
>>>>
>>>>
>>>> On Mon, Aug 10, 2015, 10:58 Michael McGlothlin <mike.mcgloth...@gmail.com>
>>>> wrote:
>>>>>
>>>>> Would there be a downside to extending Bitwise operators to work with
>>>>> typed arrays such as UInt8ClampedArray? To me it seems natural to want to
>>>>> perform bit operations on these. Or is there a better way to make a BitSet
>>>>> that I'm missing?
>>>>>
>>>>>
>>>>> Thanks,
>>>>> Michael McGlothlin
>>>>> Sent from my iPhone
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> es-discuss@mozilla.org
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss@mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to