p.enes.lv is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.
This server runs the snac software and there is no automatic sign-up process.
boostedthinking of the namespace proposal for c, and, i wonder if, we couldn’t have namespaces done in the preprocessor, like:
/* lib.h */
#namespace lib lib_
void lib::foo(); /* declares lib_foo as a function name */
/* app.c */
#include <lib.h>
#using lib::foo
#using lib::foo as nya
#using lib as MyApi
int main(void) {
/* all of those would be pre-processed to lib_foo() */
lib::foo();
foo();
nya();
MyApi::foo();
}
works with macros, and identifiers, basically anywhere a #define would also work
and could be backwards compatible, e.g. if i were to use it in openrc:
/* rc.h */
#ifdef _HAS_NAMESPACE
#namespace rc rc_
#namespace RC RC_
#endif
now older c programs can still use rc_service_resolve, and newer ones can use rc::service_resolve (as well as #using directives)
including whole namespace, like #using lib, could work but it’d be a pain to implement i think, since the preprocessor would need to keep track of all lib_ it sees since #namespace was declared, and forward-replace them
but with or without whole-namespace-inclusion, this has really simple semantics and imo predictable errors, as namespacing conflicts can be reported the same way “redefinition” of macro names are
#include <stdio.h>int main()
{
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
puts("Little endian");
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
puts("Big endian");
#else
printf("ayo wtf %d\n", __BYTE_ORDER__);
#endif
printf("%#b", 'twinspin6');
return 0;
}
main.c: In function ‘main’:
main.c:12:19: warning: character constant too long for its type
12 | printf("%#b", 'twinspin6');
| ^~~~~~~~~~~
Little endian
0b1110000011010010110111000110110