Comments (7)
Thinking about #264 (using definitions from libc), we may want our own analog of the sys module pattern. Right now it's hard to track down where items come in because the cfg attrs are all over the place. @arcnmx you have a recently opened RFC on a related topic. Thoughts?
from nix.
Well, I'd say it's an unrelated issue in regards to my proposal toward libstd, which is more about defining an abstraction layer over the OS for libstd to use. libstd has a lot of ifdef/else/elif/etc
going on where different implementations are used depending on the platform. nix seems more all-or-nothing; everything is in the right place, just cfg'd out if something doesn't apply to a given platform.
That said, moving all the mod ffi
stuff into another layer under nix with the maybe-goal of eventually migrating it all into libc could potentially be a good idea. It would let us make it a public separate nix-sys
crate too that only defines the raw C API.
it's hard to track down where items come in because the cfg attrs are all over the place
Not sure I understand what you mean by that, what's hard? Most items are cfg
'd out directly at their definition point AFAIR
from nix.
Ah I see. Maybe I actually meant a file layout more like libc's then. A way to have a hierarchy of related systems, so that there's a clear place to put definitions. Then we can use conditional module imports instead of conditional definitions. It seems like less mental effort to me in terms of where to put things.
from nix.
Here's the section describing it in the libc RFC: https://github.com/alexcrichton/rfcs/blob/pomote-libc/text/0000-promote-libc.md#internal-structure
from nix.
Currently, I am against this change. libc has this structure and it fits with its concept. For us, I do not see the advantage, but am rather afraid it would lead to a lot of code duplication. This is the case in libc, and I do not see a way around that there. However, we can use that libc hides that fact, by using their constants and function declarations. This would leave us with configuring a few functions and certain constants in bitflags and enums in and out depending on platform.
from nix.
This makes sense. We should get fully onto libc definitions (#264) first, then see what it looks like.
from nix.
I think the current consensus is to defer on this. Should I close this issue and it can be revisited if necessary?
from nix.
Related Issues (20)
- API request: sync on MacOS
- test_initgroups fails.
- MSRV 1.77.0 TODO HOT 1
- RecvMsg.cmsg() should check MSG_CTRUNC HOT 2
- ForkPty Always returns Parent HOT 1
- ControlMessageOwned::UdpGroSegments size mismatches the actual size HOT 1
- Test `statfs_call()` fails on macOS because `statfs()` and `statvfs()` report different number of i-nodes HOT 4
- Question about why cfg(linux_android) is used in places when #[cfg(target_os = "linux")] seems fine. HOT 1
- ptctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, addr, len, invalid_name) returns EFAULT rather than EINVAL under QEMU HOT 8
- EventFd::defuse doesn't work HOT 6
- Shouldn't set `#[deny(warnings)]` outside of CI HOT 1
- warn that nix::sys::signalfd::siginfo is not siginfo_t HOT 2
- Some Nix wrappers are not signal-safe HOT 2
- Nix 0.30.0 TODO
- Test `test_timer::alarm_fires()` times out
- Skip the Haiku CI as Rust std is broken on it
- `ptrace::getregs` & `ptrace::getregset` may lead to UB of uninitialized data read HOT 4
- can we use this library to do fuse(file systems in user space)? HOT 3
- Allow `sendmsg` to accept a preallocated `Vec` HOT 1
- ModuleInitFlags is missing MODULE_INIT_COMPRESSED_FILE HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nix.