glibc
Packagist
glibc | Packagist | |
---|---|---|
45 | 61 | |
1,213 | 1,712 | |
3.2% | 0.2% | |
9.8 | 9.0 | |
9 days ago | 16 days ago | |
C | PHP | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
glibc
- I cut GTA Online loading times by 70% (2021)
-
Cray-1 performance vs. modern CPUs
I wonder if you’re using a different definition of ‘vectorized’ from the one I would use. For example glibc provides a vectorized strlen. Here is the sse version: https://github.com/bminor/glibc/blob/master/sysdeps/x86_64/m...
It’s pretty simple to imagine how to write an unoptimized version: read a vector from the start of the string, compare it to 0, convert that to a bitvector, test for equal to zero, then loop or clz and finish.
I would call this vectorized because it operates on 16 bytes (sse) at a time.
There are a few issues:
1. You’re still spending a lot of time in the scalar code checking loop conditions.
2. You’re doing unaligned reads which are slower on old processors
3. You may read across a cache line forcing you to pull a second line into cache even if the string ends before then.
4. You may read across a page boundary which could cause a segfault if the next page is not accessible
So the fixes are to do 64-byte (ie cache line) aligned accesses which also means page-aligned (so you won’t read from a page until you know the string doesn’t end in the previous page). That deals with alignment problems. You read four vector registers at a time but this doesn’t really cost much more if the string is shorter as it all comes from one cache line. Another trick in the linked code is that it first finds the cache line by reading the first 16 bytes then merging in the next 3 groups with unsigned-min, so it only requires one test against a zero vector instead of 4. Then it finds the zero in the cache line. You need to do a bit of work in the first iteration to become aligned. With AVX, you can use mask registers on reads to handle that first step instead.
-
Setenv Is Not Thread Safe and C Doesn't Want to Fix It
That was also my thought. To my knowledge `/etc/localtime` is the creation of Arthur David Olson, the founder of the tz database (now maintained by IANA), but his code never read `/etc/localtime` multiple times unless `TZ` environment variable was changed. Tzcode made into glibc but Ulrich Drepper changed it to not cache `/etc/localtime` when `TZ` is unset [1]; I wasn't able to locate the exact rationale, given that the commit was very ancient (1996-12) and no mailing list archive is available for this time period.
[1] https://github.com/bminor/glibc/commit/68dbb3a69e78e24a778c6...
-
CTF Writeup: Abusing select() to factor RSA
That's not really what the problem is. The actual code is fine.
The issue is that the definition of `fd_set` has a constant size [1]. If you allocate the memory yourself, the select() system call will work with as many file descriptors as you care to pass to it. You can see that both glibc [2] and the kernel [3] support arbitrarily large arrays.
[1] https://github.com/bminor/glibc/blob/master/misc/sys/select....
[2] https://github.com/bminor/glibc/blob/master/sysdeps/unix/sys...
[3] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
-
How are threads created in Linux x86_64
The source code for that is here.
-
Using Uninitialized Memory for Fun and Profit (2008)
Expanding macro gives three GCC function attributes [2]: `__attribute__ ((malloc))`, `__attribute__ ((alloc_size(1)))` and `__attribute__ ((warn_unused_result))`. They are required for GCC (and others recognizing them) to actually ensure that they behave as the standard dictates. Your own malloc-like functions won't be treated same unless you give similar attributes.
[1] https://github.com/bminor/glibc/blob/807690610916df8aef17cd1...
[2] https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attribute...
-
“csinc”, the AArch64 instruction you didn’t know you wanted
IFunc relocations is what enables glibc to dynamically choose the best memcpy routine to use at runtime based on the CPU.
see https://github.com/bminor/glibc/blob/glibc-2.31/sysdeps/x86_...
-
memmove() implementation in strictly conforming C -- possible?
memmove can be very well implemented in pure C, libc implementations usually have a "generic" (meaning, architecture independent) fallback. Here is musl generic implementation and its x86-64 assembly implementation. For glibc, implementation is a bit more complex, having multiple architectures implemented, but you could find a generic implementation with these two files: memmove.c and generic/memcopy.h.
-
Fedora 38 LLVM vs. Team Fortress 2
Yeah, looks like the Q_strcat(pszContentPath, "/"); is invalid, as glibc has only allocated exactly enough to fit the path in the buffer returned by realpath().
Interestingly, the open group spec says that a null argument to realpath is "Implementation defined" [0]
And the linux (glibc) man pages say it allocates a buffer "Up to PATH_MAX" [1]
I guess "strlen(path)" is "Up to PATH_MAX", but the man page seems unclear - you could read that as implying the buffer is always allocated to PATH_MAX size, but that's not what seems to be happening, just effectively calling strdup() [2]. I have no idea how to feed back to the linux man pages, but might be worth clarifying there.
[0] https://pubs.opengroup.org/onlinepubs/009696799/functions/re...
[1] https://linux.die.net/man/3/realpath
[2] https://github.com/bminor/glibc/blob/0b9d2d4a76508fdcbd9f421...
-
Method implementations
For the actual sources you will have to look at one of the mirrors of the C standard library, such as https://github.com/bminor/glibc/tree/master/sysdeps/ieee754/dbl-64
Packagist
-
Get YouTube Channel Details API: Testing Connection
What will we do next time? Actually, the whole package is ready, and all that's left is to publish it on Packagist.
-
Building Python Package: API Client for YouTube Channel Details (RapidAPI)
publishing our work on https://packagist.org/
-
Shopware Changes since the 6.0 Dev Training Videos
The latter one is based on nix OS using Symfony flex recipes and PHP packagist composer. The flex devenv should work cross-platform on Linux, Windows, and Mac. "The main difference to other tools like Docker or a VM is that it neither uses containerization nor virtualization techniques. Instead, the services run natively on your machine."
-
Have an interview for PHP, any tips on where to start?
Composer is (still) the defacto standard package manager, with the Packagist repo being the standard place to find and install libraries.
-
Was Rust Worth It?
Sorta—it looks like they were most enforced by convention until May 2015, when they finally become enforced [0]. Still, that's a good one that I hadn't thought of, and they at least had the convention in place.
[0] https://github.com/composer/packagist/issues/163#issuecommen...
-
Best practices for building a production-ready Dockerfile for PHP applications
Scanning your image for vulnerabilities is a critical step before you deploy it to production. You can use Snyk to scan your PHP Docker image and identify and resolve vulnerabilities. The Snyk Vulnerability Database includes records for all popular operating systems and dependencies, including PHP packages published to Packagist.
-
laravel is apple and symfony is android, your own framework is linux distro buit by you
No. The only linked commercial thing I know - is Nova admin panel interface lib. But you don't have to use it. (Filament or Encore are free and suitable). Modules are free ( packagist.org and gthub.com ) and you should handle them with standard composer package tool. But you need to code. It is not WordPress like CMS
-
How to tame a language
Once you understand the underlying principles of a concept, you're free to find a library via packagist.org to use.
-
New to PHP - I'm actually impressed
For strings I use Stringy (https://github.com/danielstjules/Stringy) for arrays I built my own Collection library, but pretty sure there are plenty in packagist (https://packagist.org/)
-
Google Drive API, PHP discontinued.
I guess I tried downloading a old version. and have to download a newer version of apiclient I found on https://packagist.org/packages/google/apiclient with monolog/monolog: ^2.9||^3.0. I'll try that in a second, I am away from computer now.
What are some alternatives?
musl - Unofficial mirror of etalabs musl repository. Updated daily.
Laravel-Zero - A PHP framework for console artisans
cosmopolitan - build-once run-anywhere c library
WordPress Packagist - WordPress Packagist — manage your plugins with Composer
dns - DNS library in Go
Laravel 6 - Powerful REPL for the Laravel framework.
0.30000000000000004 - Floating Point Math Examples
Bingo Functional - A simple functional programming library for PHP
json-c - https://github.com/json-c/json-c is the official code repository for json-c. See the wiki for release tarballs for download. API docs at http://json-c.github.io/json-c/
Symfony Panther - A browser testing and web crawling library for PHP and Symfony
degasolv - Democratize dependency management.
LaravelS - LaravelS is an out-of-the-box adapter between Laravel/Lumen and Swoole.