stdlib-js / stdlib

✨ Standard library for JavaScript and Node.js. ✨
https://stdlib.io
Apache License 2.0
4.53k stars 503 forks source link

[RFC]: add `reverse` method to `array/fixed-endian-factory` #3153

Open kgryte opened 3 days ago

kgryte commented 3 days ago

Description

This RFC proposes adding support for a reverse method to @stdlib/array/fixed-endian-factory.

This method is the equivalent of the TypedArray.prototype.reverse method, but for fixed-endian typed arrays.

When adding support, the following tasks should be completed:

  1. The ./lib/main.js file should be updated with the added method.
  2. A new test file should be created which includes unit tests testing against expected behavior.
  3. Two benchmark files should be added: one measuring baseline performance and another measuring performance as the array length increases.
  4. The README should be updated to include documentation for the added method.

To provide a concrete example of what a PR adding the desired method should contain, see https://github.com/stdlib-js/stdlib/commit/956a4624c788689b1bca285856b987ea3aa32eb6, which is a commit adding forEach support. This should provide an idea of what is expected.

For an example of specialized typed arrays having customized methods, see

While the method proposed in this RFC will likely not match the implementations found in the above packages, those packages should provide a conceptual idea of what is desired. Do not simply copy-paste the code found in those packages.

Notes

Checklist

stdlib-bot commented 3 days ago

:rotating_light: Important: PLEASE READ :rotating_light:

This issue has been labeled as a good first issue and is available for anyone to work on.

If this is your first time contributing to an open source project, some aspects of the development process may seem unusual, arcane, or some combination of both.

  1. You cannot "claim" issues. People new to open source often want to "claim" or be assigned an issue before beginning work. The typical rationale is that people want to avoid wasted work in the event that someone else ends up working the issue. However, this practice is not effective in open source, as it often leads to "issue squatting", in which an individual asks to be assigned, is granted their request, and then never ends up working on the issue. Accordingly, you are encouraged to communicate your intent to address this issue, ideally by providing a rough outline as to how you plan to address the issue or asking clarifying questions, but, at the end of the day, we will take running code and rough consensus in order to move forward quickly.
  2. We have a very high bar for contributions. We have very high standards for contributions and expect all contributions—whether new features, tests, or documentation—to be rigorous, thorough, and complete. Once a pull request is merged into stdlib, that contribution immediately becomes the collective responsibility of all maintainers of stdlib. When we merge code into stdlib, we are saying that we, the maintainers, commit to reviewing subsequent changes and making bugfixes to the code. Hence, in order to ensure future maintainability, this naturally leads to a higher standard of contribution.

Before working on this issue and opening a pull request, please read the project's contributing guidelines. These guidelines and the associated development guide provide important information, including links to stdlib's Code of Conduct, license policy, and steps for setting up your local development environment.

To reiterate, we strongly encourage you to refer to our contributing guides before beginning work on this issue. Failure to follow our guidelines significantly decreases the likelihood that you'll successfully contribute to stdlib and may result in automatic closure of a pull request without review.

Setting up your local development environment is a critical first step, as doing so ensures that automated development processes for linting, license verification, and unit testing can run prior to authoring commits and pushing changes. If you would prefer to avoid manual setup, we provide pre-configured development containers for use locally or in GitHub Codespaces.

We place a high value on consistency throughout the stdlib codebase. We encourage you to closely examine other packages in stdlib and attempt to emulate the practices and conventions found therein.

In short, the more effort you put in to ensure that your contribution looks and feels like stdlib—including variables names, bracket spacing, line breaks, etc—the more likely that your contribution will be reviewed and ultimately accepted. We encourage you to closely study the codebase before beginning work on this issue.

:sparkles: Thank you again for your interest in stdlib, and we look forward to reviewing your future contributions. :sparkles:

DhruvArvindSingh commented 3 days ago

hey i have started working on it, one question though the buffer created for the original object cannot be replaced by any prototype function as it is set by "setReadOnly()", So do we have to return a new object of the same datatype but reversed data?

kgryte commented 3 days ago

@DhruvArvindSingh You shouldn't need to replace the buffer for the original object. You can mutate that buffer. As mentioned in the OP, see how we do things in other packages. E.g., https://github.com/stdlib-js/stdlib/blob/3bdf9dc95f583863afe2dc2d89d553c4996d123c/lib/node_modules/%40stdlib/array/bool/lib/main.js#L1662.