The Crystal programming language | http://crystal-lang.org | Fund Crystal's development: http://is.gd/X7PRtI | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/
Yes. If only postinstall
allowed
postinstall:
linux-musl: ./build/linux-musl.sh # needs variant for some reason
linux: ./build/linux.sh
windows-msvc: ./build/windows-mingw.cmd
windows-mingw: ./build/windows-mingw.cmd
posix-default: cd build/posix && make
windows-default: cd build/windows && make
And tried keys in order of most specific to less specific arch trying posix-default
or windows-default
2nd to last before default
.
@oprypin:matrix.org I have a few shards (example) that run on limited platforms. Some are POSIX only. One is OpenBSD only. Future ones may be window only. What say you of 2 additional options for shard.yaml?
A platform flag. If it matches the shard is included. If not the shard is automatically pruned.
# For mmap
platforms:
- !windows
- posix (or)
# For mostly posix shards
platforms:
- !macos
- posix
A 2nd platform flag with identical semantics should be available for dependencies
dependencies:
generic-file-polling.cr:
platforms:
- !linux
inotify.cr:
platforms:
- linux
Why both? These options aren't mutually exclusive.
Sometimes the shard author knows it won't work on specific platforms and they can specify them.
Other times the author may choose a more specific solution and wish to exclude a generic shard (see inotify example above). Or they could be working on an newer/older system where a shard
specified dependency doesn't work in their particular situation.
platform: posix
. Create a windows anonymous memory shard (No mmap equivalent that handles all functions) with platform: windows
. Create a generic anon memory wrapper shard that includes both. Create a guard page key holding shard similar to sodium_malloc
using the anon memory shard.
mmap
like mapping a file, I can't do that on windows as it uses a completely different API
platform
as a restriction wouldn't be used with pure portable crystal shards, only platform specific shards. platform
as a dependency may be specified to override. See the inotify example. Generic file polling may work everywhere but on linux you may prefer inotify
. On BSD eventually kqueue
. Although technically those should have their own platform limitations so the dependency limit should only be placed on generic file polling.
alias PermissiveType = Array(String | Int32) | String
s : PermissiveType = "hello world" #works
ss : PermissiveType = ["hello", "world"] # must be (Array(Int32 | String) | String), not Array(String)
PermissiveType
is strictly more permissive than Array(String)
this cast should be possible - any possible value of that more restrictive type should satisfy the more permissive type.
@ryanprior:matrix.org What you are running into is that while one can logically look at an Array(String) and see that an Array(String | Int32) can store everything in it, type specifications are very specific, and your type specification is for two things, either an Array(String | Int32), or String, and what you are trying to assign is an Array(String), which is not either of those things.
ss : PermissiveType = Array(String | Int32).new + ["hello", "world"]
That will create an array with a type signature that matches what PermissiveType allows.
Array(String)