digitalmars.D - D for microservices
- Joakim (18/18) Oct 21 2017 I just read the following two week-old comment on the ldc issue
- Dmitry Olshansky (5/9) Oct 22 2017 Rather a container with dub/ldc configured to compile with musl
- qznc (3/5) Oct 22 2017 Optimize the TechEmpower benchmark? Vibe.d looks quite weak there.
- Mengu (3/6) Oct 22 2017 rock solid, easy, common-dev-proof, huge std lib. like that of
- Jacob Carlborg (17/38) Oct 23 2017 * Support full static linking using DMD, which requires the TLS
- Laeeth Isharc (10/49) Oct 23 2017 Can you elaborate on how the TLS implementation needs to be
- Jacob Carlborg (14/22) Oct 23 2017 # echo 'void main() {}' > main.d && dmd -c main.d && gcc main.o -o main
- Joakim (12/49) Oct 23 2017 I can probably whip this together in a couple days, as I added
- Jacob Carlborg (5/8) Oct 23 2017 Yeah, exactly. My plate if already full and all this is lower down on
- Joakim (13/19) Feb 22 2018 Yuxuan Shui has ported druntime to Musl over the last couple
- Suliman (1/1) Feb 22 2018 It would be nice if anyone will rewrite Musl to betterC :)
- rikki cattermole (2/3) Feb 22 2018 Combine it with dmc's libc and we're starting to get a reasonable state.
- aberba (2/17) Feb 22 2018 That makes me very happy!! Very much appreciated.
- Joakim (14/35) Feb 24 2018 I've updated ldc master to use Yuxuan's druntime port, which
- yawniek (4/17) Feb 25 2018 great stuff, thank you! this will be very useful!
- Joakim (7/14) Feb 25 2018 I don't know, presumably you're referring to the static linking
- aberba (2/17) Mar 05 2018 LDC 1.8 is out!
- Joakim (4/24) Mar 05 2018 The Alpine build is up, let me know if you have any problems.
- aberba (2/21) Mar 06 2018 Nice. I usually use the docker images though.
- Andrew Benton (14/19) Mar 07 2018 I took a shot at dockerizing dub-registry with the alpine build
- Radu (3/18) Mar 07 2018 This guys says that vide.d works
- Jacob Carlborg (8/10) Mar 07 2018 Yes, it's pretty straightforward:
- Andrew Benton (4/14) Mar 08 2018 Looks like that works out much nicer than using alpine as the
- aberba (2/20) Mar 08 2018 Building directly in alpine will simplify automated builds too.
- Tamas (8/30) Mar 11 2018 Simple Vibe.d app talking to Redis, packed into docker containers:
- Jacob Carlborg (5/13) Mar 11 2018 It's just a warning. If you're not using "dlopen" or any of your
- Joakim (35/67) May 05 2018 I've put up a new binary release of ldc 1.9 for Alpine, which
- Andrew Benton (3/8) Mar 08 2018 Unfortunately the link that's associated with is based on an
- Joakim (3/18) Mar 08 2018 What is the exact error? Maybe report it here:
- Andrew Benton (6/18) Mar 08 2018 I built out LDC on Alpine using the v1.8.0 LDC release. It's
- Radu (6/14) Mar 08 2018 OK you found an issue :). Indeed the file only covered Glibc so
- Jacob Carlborg (5/7) Mar 01 2018 Build a completely statically linked binary by compiling using LDC and
- aberba (5/23) Feb 25 2018 I usually ship and compile code in Alpine itself. Once I have an
- Jacob Carlborg (4/18) Feb 23 2018 That's great.
- Adam Wilson (28/32) Oct 23 2017 I've been looking pretty extensively at these two items recently.
- rikki cattermole (4/41) Oct 23 2017 *whispers* heyyy, heard about SPEW[0]?
- Adam Wilson (6/47) Oct 25 2017 You've mentioned it a few times. ;-)
- Jacob Carlborg (16/29) Oct 23 2017 It can be an optional dependency. Looking at ddb [1] it's not that much
- Adam Wilson (18/45) Oct 25 2017 This of course makes the assumption that we clean-room our own protocol
- Jacob Carlborg (6/19) Oct 25 2017 I'm more concerned that I don't think we'll manage to implement a
- Adam Wilson (18/35) Oct 26 2017 My apologies, something rather the other direction. Instead of forcing
- rikki cattermole (11/32) Oct 26 2017 The problem isn't the event loop design.
- Jonathan M Davis (18/24) Oct 26 2017 The bigger problem is API bugs. The review process is rigorous enough to
- Adam Wilson (14/39) Oct 26 2017 I understand the concern, however, I can see potential mitigations. For
- Jonathan M Davis (45/85) Oct 26 2017 Nothing has been pulled into Phobos from anywhere in a while. The last t...
- Jacob Carlborg (7/12) Oct 27 2017 My concern is not about the event loop, it's about asynchronous IO.
- Adam Wilson (7/18) Oct 27 2017 PgSQL/MySQL/MSSQL all do, I think that covers about 90% of usage. IIRC
- Nick Sabalausky (Abscissa) (4/17) May 05 2018 Mysql-native is vibe.d-compatible, but also works when you have zero
- Nick Sabalausky (Abscissa) (2/20) May 05 2018 Sorry, didn't notice this was a half-year-old thread.
- Laeeth Isharc (46/65) Oct 23 2017 We're going a bit in that direction, although it's a different
- Jacob Carlborg (6/7) Oct 23 2017 It's already supported by LDC, using the -static flag. This Linux binary...
- Cym13 (9/17) Oct 25 2017 A bit OT but this part made me think of [1] of which you may
- Jonathan M Davis (20/27) Oct 26 2017 I believe that it works just fine if you do the linking step yourself, b...
- aberba (29/48) Oct 28 2017 Its the future. Netflix, Google, Facebook, etc. all have open
- Dmitry Olshansky (20/46) Oct 28 2017 Highly doubt that. It really depend on the scale of your
I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet. So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use? This is a niche that D and all newer languages should target. How do we do it?
Oct 21 2017
On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: [...]Rather a container with dub/ldc configured to compile with musl libc I think.What else, what kinds of libraries do you normally use?Given current selection I bet most are hand-rolled except maybe vibe.d and common serialization libs.
Oct 22 2017
On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:This is a niche that D and all newer languages should target. How do we do it?Optimize the TechEmpower benchmark? Vibe.d looks quite weak there. https://www.techempower.com/benchmarks/
Oct 22 2017
On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: [...]rock solid, easy, common-dev-proof, huge std lib. like that of golang.
Oct 22 2017
On 2017-10-22 04:48, Joakim wrote:I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet. So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use? This is a niche that D and all newer languages should target. How do we do it?* Support full static linking using DMD, which requires the TLS implementation to be modified * Support musl as the standard C library, I've discussed that before [1] * Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM library * RabbitMQ library compatible with vibe.d * Serialization to/from JSON and YAML * Official Docker images with DMD and LDC wouldn't hurt * Pre-compiled DMD that works on Alpine. Fully statically linked DMD would help here That's what I can think of for now. [1] http://forum.dlang.org/post/nhem1l$1ee3$1 digitalmars.com -- /Jacob Carlborg
Oct 23 2017
On Monday, 23 October 2017 at 12:08:52 UTC, Jacob Carlborg wrote:On 2017-10-22 04:48, Joakim wrote:Can you elaborate on how the TLS implementation needs to be changed? If someone wanted to work on rabbit bindings/wrapper, I might be open to sponsoring that. I'm not in love with Rabbit (one node uses more than 40% of memory so the node goes down, taking the cluster with it. really?), but we use it currently. I made a start on bindings for librabbitmq here: https://github.com/kaleidicassociates/rabbitmq-d Laeeth.I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet. So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use? This is a niche that D and all newer languages should target. How do we do it?* Support full static linking using DMD, which requires the TLS implementation to be modified * Support musl as the standard C library, I've discussed that before [1] * Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM library * RabbitMQ library compatible with vibe.d * Serialization to/from JSON and YAML * Official Docker images with DMD and LDC wouldn't hurt * Pre-compiled DMD that works on Alpine. Fully statically linked DMD would help here That's what I can think of for now. [1] http://forum.dlang.org/post/nhem1l$1ee3$1 digitalmars.com
Oct 23 2017
On 2017-10-23 14:17, Laeeth Isharc wrote:Can you elaborate on how the TLS implementation needs to be changed?-m64 -static -L/root/.dvm/compilers/dmd-2.076.1/linux/bin/../lib64 -Xlinker -Bstatic -lphobos2 -lpthread -lm -lrt -ldl /root/.dvm/compilers/dmd-2.076.1/linux/bin/../lib64/libphobos2.a(sections_el _shared_782_420.o): In function `_D2rt19sections_elf_shared11getTLSRangeFNbNimmZAv': src/rt/sections_elf_shared.d:(.text._D2rt19sections_elf_shared11getTLSRangeFNbNimmZAv[_D2rt19sections_elf_shared11getTLSRan eFNbNimmZAv]+0x38): undefined reference to `__tls_get_addr' collect2: error: ld returned 1 exit status I need to manually invoke GCC to link because DMD will pass "-Xlinker --export-dynamic -Xlinker -Bdynamic" and I need to add "-static".If someone wanted to work on rabbit bindings/wrapper, I might be open to sponsoring that. I'm not in love with Rabbit (one node uses more than 40% of memory so the node goes down, taking the cluster with it. really?), but we use it currently. I made a start on bindings for librabbitmq here: https://github.com/kaleidicassociates/rabbitmq-dIs that compatible with vibe.d? -- /Jacob Carlborg
Oct 23 2017
On Monday, 23 October 2017 at 12:08:52 UTC, Jacob Carlborg wrote:On 2017-10-22 04:48, Joakim wrote:I can probably whip this together in a couple days, as I added the Bionic support before, but it's not something I need, so it'd just be a donation for you and others. That's why I'm trying to figure out who exactly wants this and if others want to chip in.I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet. So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use? This is a niche that D and all newer languages should target. How do we do it?* Support full static linking using DMD, which requires the TLS implementation to be modified * Support musl as the standard C library, I've discussed that before [1]* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM library * RabbitMQ library compatible with vibe.d * Serialization to/from JSON and YAMLSome of this stuff is on dub, but nothing that interests me or that I'd chip in with. Good to see that RabbitMQ supports binary protocols like AMQP and MQTT though, would be nuts if it were all just text like STOMP or especially JSON/YAML.* Official Docker images with DMD and LDC wouldn't hurt * Pre-compiled DMD that works on Alpine. Fully statically linked DMD would help hereI'm sure someone could put these together if the above stuff worked. The question is who's interested in volunteering to help put this all together?
Oct 23 2017
On 2017-10-23 17:35, Joakim wrote:I'm sure someone could put these together if the above stuff worked. The question is who's interested in volunteering to help put this all together?Yeah, exactly. My plate if already full and all this is lower down on the priority list. -- /Jacob Carlborg
Oct 23 2017
On Monday, 23 October 2017 at 18:18:28 UTC, Jacob Carlborg wrote:On 2017-10-23 17:35, Joakim wrote:Yuxuan Shui has ported druntime to Musl over the last couple months: https://github.com/dlang/druntime/pulls?q=is%3Apr+author%3Ayshui+is%3Aclosed With his changes, all druntime unit tests pass, now only a few asserts tripping in the additional tests for shared libraries. I added a couple more tweaks to get all but one of the Phobos unit tests passing too. With a last tiny patch to add a command-line flag to dmd to easily use this port- already added to the latest ldc 1.8 beta, though it doesn't have all the druntime support: https://github.com/ldc-developers/ldc/pull/2373 - anyone can use D with Alpine/Musl containers for microservices.I'm sure someone could put these together if the above stuff worked. The question is who's interested in volunteering to help put this all together?Yeah, exactly. My plate if already full and all this is lower down on the priority list.
Feb 22 2018
It would be nice if anyone will rewrite Musl to betterC :)
Feb 22 2018
On 22/02/2018 10:17 PM, Suliman wrote:It would be nice if anyone will rewrite Musl to betterC :)Combine it with dmc's libc and we're starting to get a reasonable state.
Feb 22 2018
On Thursday, 22 February 2018 at 08:54:04 UTC, Joakim wrote:On Monday, 23 October 2017 at 18:18:28 UTC, Jacob Carlborg wrote:That makes me very happy!! Very much appreciated.[...]Yuxuan Shui has ported druntime to Musl over the last couple months: https://github.com/dlang/druntime/pulls?q=is%3Apr+author%3Ayshui+is%3Aclosed With his changes, all druntime unit tests pass, now only a few asserts tripping in the additional tests for shared libraries. I added a couple more tweaks to get all but one of the Phobos unit tests passing too. With a last tiny patch to add a command-line flag to dmd to easily use this port- already added to the latest ldc 1.8 beta, though it doesn't have all the druntime support: https://github.com/ldc-developers/ldc/pull/2373 - anyone can use D with Alpine/Musl containers for microservices.
Feb 22 2018
On Thursday, 22 February 2018 at 21:59:27 UTC, aberba wrote:On Thursday, 22 February 2018 at 08:54:04 UTC, Joakim wrote:I've updated ldc master to use Yuxuan's druntime port, which means the upcoming ldc 1.8 release will likely be a viable Alpine/Musl cross-compiler out of the box, provided you give it a C/Musl cross-compiler/linker to work with, by using the bundled ldc-build-runtime tool: https://wiki.dlang.org/Building_LDC_runtime_libraries Cross-compiling has not been tested however: do people normally cross-compile to Alpine containers or build their software in Alpine itself? If the latter, building ldc from master on Alpine/x64 3.7.0 passes all of the druntime/phobos stdlib unit tests but one, so you're good to go there, as long as you don't need a pre-built binary. Maybe we'll put one out for ldc with the upcoming 1.8 release.On Monday, 23 October 2017 at 18:18:28 UTC, Jacob Carlborg wrote:That makes me very happy!! Very much appreciated.[...]Yuxuan Shui has ported druntime to Musl over the last couple months: https://github.com/dlang/druntime/pulls?q=is%3Apr+author%3Ayshui+is%3Aclosed With his changes, all druntime unit tests pass, now only a few asserts tripping in the additional tests for shared libraries. I added a couple more tweaks to get all but one of the Phobos unit tests passing too. With a last tiny patch to add a command-line flag to dmd to easily use this port- already added to the latest ldc 1.8 beta, though it doesn't have all the druntime support: https://github.com/ldc-developers/ldc/pull/2373 - anyone can use D with Alpine/Musl containers for microservices.
Feb 24 2018
On Saturday, 24 February 2018 at 10:03:07 UTC, Joakim wrote:I've updated ldc master to use Yuxuan's druntime port, which means the upcoming ldc 1.8 release will likely be a viable Alpine/Musl cross-compiler out of the box, provided you give it a C/Musl cross-compiler/linker to work with, by using the bundled ldc-build-runtime tool: https://wiki.dlang.org/Building_LDC_runtime_libraries Cross-compiling has not been tested however: do people normally cross-compile to Alpine containers or build their software in Alpine itself? If the latter, building ldc from master on Alpine/x64 3.7.0 passes all of the druntime/phobos stdlib unit tests but one, so you're good to go there, as long as you don't need a pre-built binary. Maybe we'll put one out for ldc with the upcoming 1.8 release.great stuff, thank you! this will be very useful! Q: what would be needed to build a single binary (a la golang) that works in a FROM SCRATCH docker container?
Feb 25 2018
On Sunday, 25 February 2018 at 16:51:09 UTC, yawniek wrote:great stuff, thank you! this will be very useful! Q: what would be needed to build a single binary (a la golang) that works in a FROM SCRATCH docker container?I don't know, presumably you're referring to the static linking support Jacob mentioned earlier in this thread. I have not tried that. On Sunday, 25 February 2018 at 17:48:34 UTC, aberba wrote:I usually ship and compile code in Alpine itself. Once I have an ldc compiler with Alpine as base image, I'm good to go. Some platforms like OpenShift will rebuild when a release is triggered in git master... Copying binary require some hacks.OK, I will look at releasing a native ldc binary for Alpine with the upcoming 1.8 release.
Feb 25 2018
On Sunday, 25 February 2018 at 22:12:38 UTC, Joakim wrote:On Sunday, 25 February 2018 at 16:51:09 UTC, yawniek wrote:LDC 1.8 is out!great stuff, thank you! this will be very useful! Q: what would be needed to build a single binary (a la golang) that works in a FROM SCRATCH docker container?I don't know, presumably you're referring to the static linking support Jacob mentioned earlier in this thread. I have not tried that. On Sunday, 25 February 2018 at 17:48:34 UTC, aberba wrote:I usually ship and compile code in Alpine itself. Once I have an ldc compiler with Alpine as base image, I'm good to go. Some platforms like OpenShift will rebuild when a release is triggered in git master... Copying binary require some hacks.OK, I will look at releasing a native ldc binary for Alpine with the upcoming 1.8 release.
Mar 05 2018
On Monday, 5 March 2018 at 14:34:44 UTC, aberba wrote:On Sunday, 25 February 2018 at 22:12:38 UTC, Joakim wrote:The Alpine build is up, let me know if you have any problems. Note the changelog entry that says you'll need to install llvm and maybe other packages from the Alpine package manager first.On Sunday, 25 February 2018 at 16:51:09 UTC, yawniek wrote:LDC 1.8 is out!great stuff, thank you! this will be very useful! Q: what would be needed to build a single binary (a la golang) that works in a FROM SCRATCH docker container?I don't know, presumably you're referring to the static linking support Jacob mentioned earlier in this thread. I have not tried that. On Sunday, 25 February 2018 at 17:48:34 UTC, aberba wrote:I usually ship and compile code in Alpine itself. Once I have an ldc compiler with Alpine as base image, I'm good to go. Some platforms like OpenShift will rebuild when a release is triggered in git master... Copying binary require some hacks.OK, I will look at releasing a native ldc binary for Alpine with the upcoming 1.8 release.
Mar 05 2018
On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote:On Monday, 5 March 2018 at 14:34:44 UTC, aberba wrote:Nice. I usually use the docker images though.On Sunday, 25 February 2018 at 22:12:38 UTC, Joakim wrote:The Alpine build is up, let me know if you have any problems. Note the changelog entry that says you'll need to install llvm and maybe other packages from the Alpine package manager first.On Sunday, 25 February 2018 at 16:51:09 UTC, yawniek wrote:LDC 1.8 is out![...]I don't know, presumably you're referring to the static linking support Jacob mentioned earlier in this thread. I have not tried that. On Sunday, 25 February 2018 at 17:48:34 UTC, aberba wrote:[...]OK, I will look at releasing a native ldc binary for Alpine with the upcoming 1.8 release.
Mar 06 2018
On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote:On Monday, 5 March 2018 at 14:34:44 UTC, aberba wrote:I took a shot at dockerizing dub-registry with the alpine build using multistage builds. I got ldc installed and dub built. Unfortunately when I tried to build dub-registry, I found that vibe-d's vibe-core, libevent, and libasync configurations can't run under musl due to some of the networking dependencies in druntime core, e.g. `core.sys.linux.netinet.in_`. I realize that's something that you can't really prevent as the packager, but it's still relevant to the status of D for microservices. Bad news: not being able to build vibe.d is a pretty big hit for this objective. Good news: there are other libraries we can try and we know how to fix this problem.[snip]The Alpine build is up, let me know if you have any problems. Note the changelog entry that says you'll need to install llvm and maybe other packages from the Alpine package manager first.
Mar 07 2018
On Thursday, 8 March 2018 at 06:49:07 UTC, Andrew Benton wrote:On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote:This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.org[...]I took a shot at dockerizing dub-registry with the alpine build using multistage builds. I got ldc installed and dub built. Unfortunately when I tried to build dub-registry, I found that vibe-d's vibe-core, libevent, and libasync configurations can't run under musl due to some of the networking dependencies in druntime core, e.g. `core.sys.linux.netinet.in_`. I realize that's something that you can't really prevent as the packager, but it's still relevant to the status of D for microservices. Bad news: not being able to build vibe.d is a pretty big hit for this objective. Good news: there are other libraries we can try and we know how to fix this problem.
Mar 07 2018
On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.orgYes, it's pretty straightforward: 1. Build on Ubuntu, or some other dist 2. Statically link the whole binary with LDC, then you don't need to use Musl 3. Run it on Alpine -- /Jacob Carlborg
Mar 07 2018
On Thursday, 8 March 2018 at 07:54:29 UTC, Jacob Carlborg wrote:On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:Looks like that works out much nicer than using alpine as the first stage right now. I'm not sure anyone will be too upset about the extra 7MB.This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.orgYes, it's pretty straightforward: 1. Build on Ubuntu, or some other dist 2. Statically link the whole binary with LDC, then you don't need to use Musl 3. Run it on Alpine -- /Jacob Carlborg
Mar 08 2018
On Thursday, 8 March 2018 at 09:35:08 UTC, Andrew Benton wrote:On Thursday, 8 March 2018 at 07:54:29 UTC, Jacob Carlborg wrote:Building directly in alpine will simplify automated builds too.On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:Looks like that works out much nicer than using alpine as the first stage right now. I'm not sure anyone will be too upset about the extra 7MB.This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.orgYes, it's pretty straightforward: 1. Build on Ubuntu, or some other dist 2. Statically link the whole binary with LDC, then you don't need to use Musl 3. Run it on Alpine -- /Jacob Carlborg
Mar 08 2018
On Thursday, 8 March 2018 at 22:53:11 UTC, aberba wrote:On Thursday, 8 March 2018 at 09:35:08 UTC, Andrew Benton wrote:Simple Vibe.d app talking to Redis, packed into docker containers: https://github.com/tam4s/hello-redis The takeaway is that I could not use Alpine as a host image, because I could not build the app statically on ubuntu. warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkingOn Thursday, 8 March 2018 at 07:54:29 UTC, Jacob Carlborg wrote:Building directly in alpine will simplify automated builds too.On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:Looks like that works out much nicer than using alpine as the first stage right now. I'm not sure anyone will be too upset about the extra 7MB.This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.orgYes, it's pretty straightforward: 1. Build on Ubuntu, or some other dist 2. Statically link the whole binary with LDC, then you don't need to use Musl 3. Run it on Alpine -- /Jacob Carlborg
Mar 11 2018
On 2018-03-11 12:10, Tamas wrote:Simple Vibe.d app talking to Redis, packed into docker containers: https://github.com/tam4s/hello-redis The takeaway is that I could not use Alpine as a host image, because I could not build the app statically on ubuntu. warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkingIt's just a warning. If you're not using "dlopen" or any of your dependencies you can just ignore the warning. -- /Jacob Carlborg
Mar 11 2018
On Sunday, 11 March 2018 at 11:10:09 UTC, Tamas wrote:On Thursday, 8 March 2018 at 22:53:11 UTC, aberba wrote:I've put up a new binary release of ldc 1.9 for Alpine, which fixes the vibe.d issues by pulling in two upstream commits from druntime, adds druntime and Phobos as shared libraries, and includes dub and rdmd: https://github.com/ldc-developers/ldc/releases I tested by unpacking that release in an Alpine VPS, adding its bin/ to my path, and simply running the following: dub fetch vibe-d dub build vibe-d The list of Alpine packages needed to run ldc are listed in the release notes. You can also cross-compile using the regular linux build of ldc by using ldc-build-runtime, the included tool to rebuild the stdlib for other platforms, and these instructions from the wiki: https://wiki.dlang.org/Building_LDC_runtime_libraries#Usage_for_cross-compilation I'm looking at adding a flag to dmd to enable building for the Musl C runtime: https://github.com/dlang/dmd/pull/8020 While the Musl port is mostly there, it appears that yshui didn't bother porting all of druntime, so there may still be other dub packages that need other missing C declarations. However, I'm done working on this port, beyond finishing off the above pull and the druntime pull linked from the release notes, as I don't use Alpine, containers, or microservices. I simply chipped in because I have porting experience and thought I could push D for microservices a bit farther along. I'll keep putting out official builds of ldc for Alpine though, as long as there's demand for them. If you'd like to use D in Alpine containers, now's the time to contribute to whatever else is missing. A good idea of the current status can be found in the first post of the dmd pull linked above. This may be a good project for the hackathon, as it's mostly polishing up a bunch of small things.On Thursday, 8 March 2018 at 09:35:08 UTC, Andrew Benton wrote:Simple Vibe.d app talking to Redis, packed into docker containers: https://github.com/tam4s/hello-redis The takeaway is that I could not use Alpine as a host image, because I could not build the app statically on ubuntu. warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linkingOn Thursday, 8 March 2018 at 07:54:29 UTC, Jacob Carlborg wrote:Building directly in alpine will simplify automated builds too.On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:Looks like that works out much nicer than using alpine as the first stage right now. I'm not sure anyone will be too upset about the extra 7MB.This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.orgYes, it's pretty straightforward: 1. Build on Ubuntu, or some other dist 2. Statically link the whole binary with LDC, then you don't need to use Musl 3. Run it on Alpine -- /Jacob Carlborg
May 05 2018
On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:On Thursday, 8 March 2018 at 06:49:07 UTC, Andrew Benton wrote:Unfortunately the link that's associated with is based on an ubuntu build which should be using glibc, not alpine w/ musl.On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote: [snip]This guys says that vide.d works https://forum.dlang.org/thread/gikoeutmdyvolfshpqqq forum.dlang.org
Mar 08 2018
On Thursday, 8 March 2018 at 06:49:07 UTC, Andrew Benton wrote:On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote:What is the exact error? Maybe report it here: https://github.com/lindt/docker-dmd/issues/1[...]I took a shot at dockerizing dub-registry with the alpine build using multistage builds. I got ldc installed and dub built. Unfortunately when I tried to build dub-registry, I found that vibe-d's vibe-core, libevent, and libasync configurations can't run under musl due to some of the networking dependencies in druntime core, e.g. `core.sys.linux.netinet.in_`. I realize that's something that you can't really prevent as the packager, but it's still relevant to the status of D for microservices. Bad news: not being able to build vibe.d is a pretty big hit for this objective. Good news: there are other libraries we can try and we know how to fix this problem.
Mar 08 2018
On Thursday, 8 March 2018 at 08:07:23 UTC, Joakim wrote:On Thursday, 8 March 2018 at 06:49:07 UTC, Andrew Benton wrote:I built out LDC on Alpine using the v1.8.0 LDC release. It's available now through Docker Hub and Github. Docker: https://hub.docker.com/r/andrewbenton/alpine-ldc/ Github: https://github.com/andrewbenton/alpine-ldc/ I get errors like below when trying to compile dub-registry:On Monday, 5 March 2018 at 17:58:25 UTC, Joakim wrote: [snip]What is the exact error? Maybe report it here: https://github.com/lindt/docker-dmd/issues/1/root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/driver /posix/dns.d(11,9): Error: module core.sys.posix.netdb import 'AI_ADDRCONFIG' not found /root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/driver /posix/dns.d(11,9): Error: module core.sys.posix.netdb import 'AI_V4MAPPED' not found /root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/drivers/po ix/sockets.d(13,9): Error: module core.sys.posix.netdb import 'AI_ADDRCONFIG' not found /root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/drivers/po ix/sockets.d(13,9): Error: module core.sys.posix.netdb import 'AI_V4MAPPED' not found /root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/drivers/pos x/sockets.d(47,10): Error: module core.sys.linux.netinet.in_ import 'IP_ADD_MEMBERSHIP' not found /root/.dub/packages/eventcore-0.8.28/eventcore/source/eventcore/drivers/pos x/sockets.d(47,10): Error: module core.sys.linux.netinet.in_ import 'IP_MULTICAST_LOOP' not found, did you mean enum member 'IPV6_MULTICAST_LOOP'? ldc2 failed with exit code 1.
Mar 08 2018
On Thursday, 8 March 2018 at 09:28:02 UTC, Andrew Benton wrote:On Thursday, 8 March 2018 at 08:07:23 UTC, Joakim wrote:OK you found an issue :). Indeed the file only covered Glibc so that's why vibe.d didn't compile for Musl. I fixed the issue for uClibc (1) and it works now (builds and runs). Probably the fix for Musl is similar. 1. https://github.com/dlang/druntime/pull/2134[...]I built out LDC on Alpine using the v1.8.0 LDC release. It's available now through Docker Hub and Github. Docker: https://hub.docker.com/r/andrewbenton/alpine-ldc/ Github: https://github.com/andrewbenton/alpine-ldc/ I get errors like below when trying to compile dub-registry:[...]
Mar 08 2018
On 2018-02-25 17:51, yawniek wrote:Q: what would be needed to build a single binary (a la golang) that works in a FROM SCRATCH docker container?Build a completely statically linked binary by compiling using LDC and add the "-static" flag. -- /Jacob Carlborg
Mar 01 2018
On Saturday, 24 February 2018 at 10:03:07 UTC, Joakim wrote:On Thursday, 22 February 2018 at 21:59:27 UTC, aberba wrote:I usually ship and compile code in Alpine itself. Once I have an ldc compiler with Alpine as base image, I'm good to go. Some platforms like OpenShift will rebuild when a release is triggered in git master... Copying binary require some hacks.On Thursday, 22 February 2018 at 08:54:04 UTC, Joakim wrote:I've updated ldc master to use Yuxuan's druntime port, which means the upcoming ldc 1.8 release will likely be a viable Alpine/Musl cross-compiler out of the box, provided you give it a C/Musl cross-compiler/linker to work with, by using the bundled ldc-build-runtime tool: https://wiki.dlang.org/Building_LDC_runtime_libraries Cross-compiling has not been tested however: do people normally cross-compile to Alpine containers or build their software in Alpine itself? If the latter, building ldc from master on Alpine/x64 3.7.0 passes all of the druntime/phobos stdlib unit tests but one, so you're good to go there, as long as you don't need a pre-built binary. Maybe we'll put one out for ldc with the upcoming 1.8 release.[...]That makes me very happy!! Very much appreciated.
Feb 25 2018
On 2018-02-22 09:54, Joakim wrote:Yuxuan Shui has ported druntime to Musl over the last couple months: https://github.com/dlang/druntime/pulls?q=is%3Apr+author%3Ayshui+is%3Aclosed With his changes, all druntime unit tests pass, now only a few asserts tripping in the additional tests for shared libraries. I added a couple more tweaks to get all but one of the Phobos unit tests passing too. With a last tiny patch to add a command-line flag to dmd to easily use this port- already added to the latest ldc 1.8 beta, though it doesn't have all the druntime support: https://github.com/ldc-developers/ldc/pull/2373 - anyone can use D with Alpine/Musl containers for microservices.That's great. -- /Jacob Carlborg
Feb 23 2018
On 10/23/17 05:08, Jacob Carlborg wrote:* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM libraryI've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer. Ergo, we must include at least the vibe-core package in Phobos, or more preferably, DRT. I had heard noises about that a few months ago. Anything happening on that front? An event loop is a key piece of a project (Async/Await) that I want to work on, and having it in DRuntime would make that project fantastically simpler. IMHO, the bulk of the time required is in getting an event loop into DRT, the rest is a LOT of relatively straightforward compiler lowering. IMHO, DRT is in significant need of an event loop system. This would allow us to simplify a large number of problems (Async/Await, GUI's, IO, etc). As near as I can tell, the problem isn't so much doing the work, but getting the required sign-off's for inclusion into DRT. Another problem that I've been made aware of is that vibe-core may not be ideal in certain situations. As this would be landed in DRT itself this would obviously need to be addressed. What would the appetite be for working together to come up with a reasonably generic event loop for DRT that vibe and other systems could then leverage? -- Adam Wilson IRC: LightBender import quiet.dlang.dev;
Oct 23 2017
On 23/10/2017 11:02 PM, Adam Wilson wrote:On 10/23/17 05:08, Jacob Carlborg wrote:*whispers* heyyy, heard about SPEW[0]? [0] https://github.com/Devisualization/spew/blob/master/src/base/cf/spew/event_loop/defs.d* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM libraryI've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer. Ergo, we must include at least the vibe-core package in Phobos, or more preferably, DRT. I had heard noises about that a few months ago. Anything happening on that front? An event loop is a key piece of a project (Async/Await) that I want to work on, and having it in DRuntime would make that project fantastically simpler. IMHO, the bulk of the time required is in getting an event loop into DRT, the rest is a LOT of relatively straightforward compiler lowering. IMHO, DRT is in significant need of an event loop system. This would allow us to simplify a large number of problems (Async/Await, GUI's, IO, etc). As near as I can tell, the problem isn't so much doing the work, but getting the required sign-off's for inclusion into DRT. Another problem that I've been made aware of is that vibe-core may not be ideal in certain situations. As this would be landed in DRT itself this would obviously need to be addressed. What would the appetite be for working together to come up with a reasonably generic event loop for DRT that vibe and other systems could then leverage?
Oct 23 2017
On 10/23/17 18:51, rikki cattermole wrote:On 23/10/2017 11:02 PM, Adam Wilson wrote:You've mentioned it a few times. ;-) -- Adam Wilson IRC: LightBender import quiet.dlang.dev;On 10/23/17 05:08, Jacob Carlborg wrote:*whispers* heyyy, heard about SPEW[0]? [0] https://github.com/Devisualization/spew/blob/master/src/base/cf/spew/event_loop/defs.d* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM libraryI've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer. Ergo, we must include at least the vibe-core package in Phobos, or more preferably, DRT. I had heard noises about that a few months ago. Anything happening on that front? An event loop is a key piece of a project (Async/Await) that I want to work on, and having it in DRuntime would make that project fantastically simpler. IMHO, the bulk of the time required is in getting an event loop into DRT, the rest is a LOT of relatively straightforward compiler lowering. IMHO, DRT is in significant need of an event loop system. This would allow us to simplify a large number of problems (Async/Await, GUI's, IO, etc). As near as I can tell, the problem isn't so much doing the work, but getting the required sign-off's for inclusion into DRT. Another problem that I've been made aware of is that vibe-core may not be ideal in certain situations. As this would be landed in DRT itself this would obviously need to be addressed. What would the appetite be for working together to come up with a reasonably generic event loop for DRT that vibe and other systems could then leverage?
Oct 25 2017
On 2017-10-24 00:02, Adam Wilson wrote:I've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer. Ergo, we must include at least the vibe-core package in Phobos, or more preferably, DRT.It can be an optional dependency. Looking at ddb [1] it's not that much code that will be different if vibe.d is used or not. It's basically only reading and writing to the socket that is different [2]. Dub provides predefined version for different dependencies, i.e. Have_vibe_d_core.I had heard noises about that a few months ago. Anything happening on that front?No, not as far as I know. Sönke seems really busy recently.What would the appetite be for working together to come up with a reasonably generic event loop for DRT that vibe and other systems could then leverage?I would be really nice to database support directly in the standard library but it's not critical for me. It takes a lot of work with and massive overhead to get something into Phobos. It's also going to be really slow get in updates. I'm not sure if it's worth it. [1] https://github.com/pszturmaj/ddb [2] https://github.com/pszturmaj/ddb/blob/master/source/ddb/postgres.d#L189-L246 -- /Jacob Carlborg
Oct 23 2017
On 10/23/17 23:29, Jacob Carlborg wrote:On 2017-10-24 00:02, Adam Wilson wrote:This of course makes the assumption that we clean-room our own protocol implementations which I am entirely against. Better to use what already exists.I've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer. Ergo, we must include at least the vibe-core package in Phobos, or more preferably, DRT.It can be an optional dependency. Looking at ddb [1] it's not that much code that will be different if vibe.d is used or not. It's basically only reading and writing to the socket that is different [2]. Dub provides predefined version for different dependencies, i.e. Have_vibe_d_core.That is what I was afraid of.I had heard noises about that a few months ago. Anything happening on that front?No, not as far as I know. Sönke seems really busy recently.I actually don't think the slow updates are huge problem as these DB interface libraries are pretty slow to change themselves. For example, ADO.NET didn't change significantly from it's 1.0 release until the arrival of Async/Await in .NET 4.5, which was 10 years later. The biggest addition prior to Async was TVP support and that was tiny comparatively and came in 2005. The libpq5 interface has barely changed in years. I can't speak to MySQL but IIRC it hasn't changed much either, at least not in a way that would effect the abstraction layer. -- Adam Wilson IRC: LightBender import quiet.dlang.dev;What would the appetite be for working together to come up with a reasonably generic event loop for DRT that vibe and other systems could then leverage?I would be really nice to database support directly in the standard library but it's not critical for me. It takes a lot of work with and massive overhead to get something into Phobos. It's also going to be really slow get in updates. I'm not sure if it's worth it. [1] https://github.com/pszturmaj/ddb [2] https://github.com/pszturmaj/ddb/blob/master/source/ddb/postgres.d#L189-L246
Oct 25 2017
On 2017-10-26 00:53, Adam Wilson wrote:This of course makes the assumption that we clean-room our own protocol implementations which I am entirely against. Better to use what already exists.I'm entirely against anything that is not compatible with vibe.d ;)I actually don't think the slow updates are huge problem as these DB interface libraries are pretty slow to change themselves. For example, ADO.NET didn't change significantly from it's 1.0 release until the arrival of Async/Await in .NET 4.5, which was 10 years later. The biggest addition prior to Async was TVP support and that was tiny comparatively and came in 2005. The libpq5 interface has barely changed in years. I can't speak to MySQL but IIRC it hasn't changed much either, at least not in a way that would effect the abstraction layer.I'm more concerned that I don't think we'll manage to implement a complete API and 100% bug free at the first try. -- /Jacob Carlborg
Oct 25 2017
On 10/25/17 23:57, Jacob Carlborg wrote:On 2017-10-26 00:53, Adam Wilson wrote:My apologies, something rather the other direction. Instead of forcing compat with vibe.d, going to vibe.d and say: "here is our standard event-loop, it has everything you need, you'll need to use it for all the other goodness to work". I know others can make good arguments about why the vibe event-loop is insufficient, and I'll let them make them. (Something about not supporting GUI loops, paging Mr. Cattermole). If that is really the case I don't see how being entirely vibe.d compatible and meeting the universal standard requirements of Phobos is possible. There would need to be a requirements gathering phase so that the community as a whole can bring their use-cases before we dove into code.This of course makes the assumption that we clean-room our own protocol implementations which I am entirely against. Better to use what already exists.I'm entirely against anything that is not compatible with vibe.d ;)Depends on how one defines first try. Phobos as a pretty solid process for making sure these things are reasonably bug free. And near as I can tell, Phobos is pretty good about accepting bug fixes. -- Adam Wilson IRC: LightBender import quiet.dlang.dev;I actually don't think the slow updates are huge problem as these DB interface libraries are pretty slow to change themselves. For example, ADO.NET didn't change significantly from it's 1.0 release until the arrival of Async/Await in .NET 4.5, which was 10 years later. The biggest addition prior to Async was TVP support and that was tiny comparatively and came in 2005. The libpq5 interface has barely changed in years. I can't speak to MySQL but IIRC it hasn't changed much either, at least not in a way that would effect the abstraction layer.I'm more concerned that I don't think we'll manage to implement a complete API and 100% bug free at the first try.
Oct 26 2017
On 26/10/2017 11:25 AM, Adam Wilson wrote:On 10/25/17 23:57, Jacob Carlborg wrote:The problem isn't the event loop design. Its a fairly solved problem. The way vibe.d's works is very specific to their use case (which isn't wrong if you only consider them). You can't 'hook' into it. Which makes it very undesirable for Phobos. Since it won't cover most use cases. Even if the source they are using is compatible with an external GUI event loop (which it should be for Windows from what I've read). So I wouldn't be starting with vibe.d's event loop model. Quite to the contrary, kill it. Build something that will last throughout the ages for everyone and put this problem to rest.On 2017-10-26 00:53, Adam Wilson wrote:My apologies, something rather the other direction. Instead of forcing compat with vibe.d, going to vibe.d and say: "here is our standard event-loop, it has everything you need, you'll need to use it for all the other goodness to work". I know others can make good arguments about why the vibe event-loop is insufficient, and I'll let them make them. (Something about not supporting GUI loops, paging Mr. Cattermole). If that is really the case I don't see how being entirely vibe.d compatible and meeting the universal standard requirements of Phobos is possible. There would need to be a requirements gathering phase so that the community as a whole can bring their use-cases before we dove into code.This of course makes the assumption that we clean-room our own protocol implementations which I am entirely against. Better to use what already exists.I'm entirely against anything that is not compatible with vibe.d ;)
Oct 26 2017
On Thursday, October 26, 2017 03:25:24 Adam Wilson via Digitalmars-d wrote:On 10/25/17 23:57, Jacob Carlborg wrote:The bigger problem is API bugs. The review process is rigorous enough to weed out a lot of stuff, but the end result is typically an API that we _think_ looks good but usually hasn't seen much real world use (much as its design may be based on real world experience). And if it turns out that the API has problems, it can be very difficult to fix that in a way that doesn't break code. Sometimes, we're able to reasonably do something about it and sometimes not. In theory, std.experimental would mitigate that, and that's where anything that was accepted would go first, but the process for getting new modules into Phobos is very much geared towards getting an API right up front rather than getting something that's close and iterating towards where it ultimately should be. What would probably be better in general would be to be writing stuff that ends up on code.dlang.org first and gets some real world use there and then look at getting it into Phobos later rather than aiming directly for Phobos. Not only would that likely help lead towards better code being in Phobos, but we'd still get useful stuff even if it didn't make it into Phobos. - Jonathan M DavisI'm more concerned that I don't think we'll manage to implement a complete API and 100% bug free at the first try.Depends on how one defines first try. Phobos as a pretty solid process for making sure these things are reasonably bug free. And near as I can tell, Phobos is pretty good about accepting bug fixes.
Oct 26 2017
On 10/26/17 17:51, Jonathan M Davis wrote:On Thursday, October 26, 2017 03:25:24 Adam Wilson via Digitalmars-d wrote:I understand the concern, however, I can see potential mitigations. For one, steal an API concept from somewhere else. I've had reasonable success so far stealing ADO.NET and the refactoring it into something more idiomatic. Using that as a starting point gave me a pretty good understanding of what was needed and it gave me a prototype API that has been battle-tested. Has anything from code.dlang.org been pulled into Phobos yet? I'm not aware of anything. code.dlang.org is where Phobos projects go to quietly die in obscurity. -- Adam Wilson IRC: LightBender import quiet.dlang.dev;On 10/25/17 23:57, Jacob Carlborg wrote:The bigger problem is API bugs. The review process is rigorous enough to weed out a lot of stuff, but the end result is typically an API that we _think_ looks good but usually hasn't seen much real world use (much as its design may be based on real world experience). And if it turns out that the API has problems, it can be very difficult to fix that in a way that doesn't break code. Sometimes, we're able to reasonably do something about it and sometimes not. In theory, std.experimental would mitigate that, and that's where anything that was accepted would go first, but the process for getting new modules into Phobos is very much geared towards getting an API right up front rather than getting something that's close and iterating towards where it ultimately should be. What would probably be better in general would be to be writing stuff that ends up on code.dlang.org first and gets some real world use there and then look at getting it into Phobos later rather than aiming directly for Phobos. Not only would that likely help lead towards better code being in Phobos, but we'd still get useful stuff even if it didn't make it into Phobos. - Jonathan M DavisI'm more concerned that I don't think we'll manage to implement a complete API and 100% bug free at the first try.Depends on how one defines first try. Phobos as a pretty solid process for making sure these things are reasonably bug free. And near as I can tell, Phobos is pretty good about accepting bug fixes.
Oct 26 2017
On Thursday, October 26, 2017 19:19:57 Adam Wilson via Digitalmars-d wrote:On 10/26/17 17:51, Jonathan M Davis wrote:wrote:On Thursday, October 26, 2017 03:25:24 Adam Wilson via Digitalmars-dNothing has been pulled into Phobos from anywhere in a while. The last thing was probably checkedint, and before that it was std.allocator - both of which came from Andrei. ndslice was in std.experimental for a little while but Ilya removed it, because he decided that it wasn't working to have it in Phobos, because he couldn't continue to improve on it there. Beyond that, I think that the last thing was the logger, which has just languished in std.experimental. It's my understanding that it needs some more work, but basically, once we added std.experimental, nothing has made it into Phobos proper. And over the last few years, there haven't been many attempts to get anything into Phobos, so not much has even made it into std.experimental. There was the GSoC project for a new XML parser, but that project seems to have died after the student got too busy with school after GSoC, and Sonke's std.json replacement didn't finish making its way through the review process, and I think that Sonke has given up on getting it in (if I understand correctly, there was just too much disagreement over what the std.json replacement should look like). Overall, people have just stopped trying to get major stuff into Phobos. New functions get added to existing modules, but pretty much no one seems to want to go through the Phobos review process to get anything into Phobos. code.dlang.org is where folks put anything that they're doing that they want to make available, and IIRC, the only item from there that's even attempted to make it into Phobos was Sonke's JSON parser. Much as some folks continue to talk about getting some piece of functionality into Phobos, no one is trying if it's anything major. So, it's not like Phobos projects are going to code.dlang.org to die. In general, they simply aren't even being attempted, and any serious projects that do exist are on code.dlang.org. Some do sit there unfinished (e.g. std_experimental_xml), but largely, the authors just don't want to go to the effort of getting the code into Phobos. And honestly, in general, at this point, I don't think that I'd want to bother either. It's quite a lot of work to get something through the Phobos review process, and once it's in Phobos, you lose control over it. If I work on something major, I can just put it up on code.dlang.org, and anyone who wants to use it can, and I have full control over what I do with the code base without having to get approval from Andrei or anyone else as to what I do with it. So, unless we're talking about something that practically needs to be in the standard library, I doubt that I'd bother trying even if I wrote the code and was maintaining it. And most stuff really doesn't need to be in the standard library, much as it might be nice. But even if the goal is to get some of this stuff into Phobos, I still think that we're better off putting it up on code.dlang.org first and getting it battle-tested instead of pushing to get it put directly into Phobos. - Jonathan M DavisI understand the concern, however, I can see potential mitigations. For one, steal an API concept from somewhere else. I've had reasonable success so far stealing ADO.NET and the refactoring it into something more idiomatic. Using that as a starting point gave me a pretty good understanding of what was needed and it gave me a prototype API that has been battle-tested. Has anything from code.dlang.org been pulled into Phobos yet? I'm not aware of anything. code.dlang.org is where Phobos projects go to quietly die in obscurity.On 10/25/17 23:57, Jacob Carlborg wrote:The bigger problem is API bugs. The review process is rigorous enough to weed out a lot of stuff, but the end result is typically an API that we _think_ looks good but usually hasn't seen much real world use (much as its design may be based on real world experience). And if it turns out that the API has problems, it can be very difficult to fix that in a way that doesn't break code. Sometimes, we're able to reasonably do something about it and sometimes not. In theory, std.experimental would mitigate that, and that's where anything that was accepted would go first, but the process for getting new modules into Phobos is very much geared towards getting an API right up front rather than getting something that's close and iterating towards where it ultimately should be. What would probably be better in general would be to be writing stuff that ends up on code.dlang.org first and gets some real world use there and then look at getting it into Phobos later rather than aiming directly for Phobos. Not only would that likely help lead towards better code being in Phobos, but we'd still get useful stuff even if it didn't make it into Phobos. - Jonathan M DavisI'm more concerned that I don't think we'll manage to implement a complete API and 100% bug free at the first try.Depends on how one defines first try. Phobos as a pretty solid process for making sure these things are reasonably bug free. And near as I can tell, Phobos is pretty good about accepting bug fixes.
Oct 26 2017
On 2017-10-26 12:25, Adam Wilson wrote:My apologies, something rather the other direction. Instead of forcing compat with vibe.d, going to vibe.d and say: "here is our standard event-loop, it has everything you need, you'll need to use it for all the other goodness to work". I know others can make good arguments about why the vibe event-loop is insufficient, and I'll let them make them.My concern is not about the event loop, it's about asynchronous IO. vibe.d needs to use asynchronous IO and I assume that's regardless what kind of event loop implementation is used. Does all the existing database drivers that you want to use support asynchronous IO? -- /Jacob Carlborg
Oct 27 2017
On 10/27/17 00:18, Jacob Carlborg wrote:On 2017-10-26 12:25, Adam Wilson wrote:PgSQL/MySQL/MSSQL all do, I think that covers about 90% of usage. IIRC Oracle does as well. -- Adam Wilson IRC: LightBender import quiet.dlang.dev;My apologies, something rather the other direction. Instead of forcing compat with vibe.d, going to vibe.d and say: "here is our standard event-loop, it has everything you need, you'll need to use it for all the other goodness to work". I know others can make good arguments about why the vibe event-loop is insufficient, and I'll let them make them.My concern is not about the event loop, it's about asynchronous IO. vibe.d needs to use asynchronous IO and I assume that's regardless what kind of event loop implementation is used. Does all the existing database drivers that you want to use support asynchronous IO?
Oct 27 2017
On 10/23/2017 06:02 PM, Adam Wilson wrote:On 10/23/17 05:08, Jacob Carlborg wrote:Mysql-native is vibe.d-compatible, but also works when you have zero vibe.d dependencies (in which case it switches to Phobos's sockets instead of using Vibe's sockets.)* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM libraryI've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer.
May 05 2018
On 05/05/2018 02:30 PM, Nick Sabalausky (Abscissa) wrote:On 10/23/2017 06:02 PM, Adam Wilson wrote:Sorry, didn't notice this was a half-year-old thread.On 10/23/17 05:08, Jacob Carlborg wrote:Mysql-native is vibe.d-compatible, but also works when you have zero vibe.d dependencies (in which case it switches to Phobos's sockets instead of using Vibe's sockets.)* Database drivers for the common databases (PostgreSQL, MySQL, SQLite) compatible with vibe.d * Database driver abstraction on top of the above drivers, perhaps some lightweight ORM libraryI've been looking pretty extensively at these two items recently. If the database drivers are compatible with Vibe.d AND we wish to provide a common abstraction layer for them (presumably via Phobos) then order for the abstraction layer to aware of the whether the driver is making a blocking or non-blocking call we must include Vibe.D in the abstraction layer.
May 05 2018
On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet. So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use? This is a niche that D and all newer languages should target. How do we do it?We're going a bit in that direction, although it's a different thing in our kind of industry from a web company - we have fewer services and many fewer requests, but latency matters more for example. I was thinking we might use Go for some services that integrate and monitor things, but we could also use D. https://jobs.github.com/positions/8e98eac8-b504-11e7-9da8-0737a3dcef18 From the comment: "Would be really cool to have LDC easily building alpine containers + static D binaries" How can we generate a static binary ? I asked about this before, and the response was that it's a bad idea because of security vulns and so on. True if you are running on a conventional Linux host. But on the other hand, it's not that great if when the system phobos is upgraded all the D binaries break. You can write a script using rdmd or dub scripting feature, but that doesn't work for more complex programs. And on the other hand, for deployment, it's much easier to copy over one binary. (In a sense it's funny that the question was asked in the context of containers, because containers are kind of an alternative to having a single binary). When you're properly set-up of course it doesn't matter, but when you're moving towards that, a single binary is much easier. I guess I can figure out the answer to this question easily enough, but I think giving people the option might help with adoption of D for micro services. For example it's really just not that fun to make an AWS Lambda using D - being able to easily build a static binary would make the process much more pleasant. I wrote this up a while back: http://awslambda-d.readthedocs.io/en/latest/ "Since dmd links phobos dynamically on linux, and phobos/druntime aren't installed on the AWS lambda server, we will need to upload these to the servers and tell the application where to find them. (I should really have appended to LD_LIBRARY_PATH as I did with PATH). Now one can follow the regular instructions for AWS Lambda: create a .zip file with the D binary, the JS file, and the following libraries (update version numbers as appropriate): libcrypto.so.1.0.0 libphobos2.so.0.67 libevent-2.0.so.5 libssl.so.1.0.0 " Alpine is nice - would be good to have this as a standard target in time. Laeeth.
Oct 23 2017
On 2017-10-23 14:13, Laeeth Isharc wrote:How can we generate a static binary ?It's already supported by LDC, using the -static flag. This Linux binary [1] is statically linked. [1] https://github.com/jacob-carlborg/remarkify/releases -- /Jacob Carlborg
Oct 23 2017
On Monday, 23 October 2017 at 12:13:12 UTC, Laeeth Isharc wrote:... And on the other hand, for deployment, it's much easier to copy over one binary. (In a sense it's funny that the question was asked in the context of containers, because containers are kind of an alternative to having a single binary). When you're properly set-up of course it doesn't matter, but when you're moving towards that, a single binary is much easier. ...A bit OT but this part made me think of [1] of which you may appreciate the insight. Right now I kind of feel like with D we get the downside in size of fat binaries without the upside in portability (although solutions exist for the dedicated and patient ones). This might proove an important drawback in the future... we'll see. [1]: http://www.smashcompany.com/technology/why-would-anyone-choose-docker-over-fat-binaries
Oct 25 2017
On Monday, October 23, 2017 12:13:12 Laeeth Isharc via Digitalmars-d wrote:How can we generate a static binary ? I asked about this before, and the response was that it's a bad idea because of security vulns and so on. True if you are running on a conventional Linux host. But on the other hand, it's not that great if when the system phobos is upgraded all the D binaries break. You can write a script using rdmd or dub scripting feature, but that doesn't work for more complex programs.I believe that it works just fine if you do the linking step yourself, but dmd doesn't properly handle it with -L-static: https://issues.dlang.org/show_bug.cgi?id=6952 I have no idea how easy it would be to the linking manually with dub. Alternatively, I believe that you can statically link against any 3rd party libraries that you're using by linking to the .a file rather than by the library name. That won't work for glibc, but much as I'd love to statically link that, it's my understanding that doing so is generally a bad idea. I don't recall the reasons though - and with the increased stability in linux's ABI, I would have thought that it would be far less of an issue than it would have been in the past. Certainly, the concept of being able to statically link a program and then just run it on most any recent linux distro without recompiling it sounds very appealing. Yes, you'll have to recompile it for any security updates to any of your dependencies, whereas that can be avoided with dynamic linking, but depending on what you're doing, that often isn't really an issue, and it can be managed if it is (heck, you're doing basically the same thing when maintaining something like a docker image). - Jonathan M Davis
Oct 26 2017
On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet.Its the future. Netflix, Google, Facebook, etc. all have open source tools around microservices. Its currently ruled by JavaScript > Go > Java. JavaScript being the leader. They have these in common: 1. Easy to deploy their code in docker containers including alpine Linux. 2. They have APIs for major cloud services. Both official and third-party. 3. Good support for networking. HTTP, Websockets, IPC*, etc. Mostly HTTP. That's it. The major advantages besides the hype. Lets see about D based on these requirements. 1. Kind of. There are dmd-ldc-dub docker images on docker hub. One by sociomantic. None using Alpine Linux as base though. Most people prefer alpine cus its lightweight (not a requirement). 2. Nope. Official APIs comes when there's mass adoption for that language and has good ROI. No complete and production ready cloud services API that I know of. Seems D users in that area roll out something on their own for private use with features they need. But most cloud PaaS provide support for custom runtimes which D has one for Heroku. Major candidate is Google AppEngine. 3. Phobos doesn't have a D HTTP API. Its sad but we have "requests" at code.dlang.org which works. We have vibe.d for http servers (aka nodejs of D) and seems popular based on threads about it and downloads.So this is a question for those deploying microservices, as I'm not in that field, what can the D devs do to make it as easy as possible to get D microservices up and running, make some Docker and Alpine containers with ldc/dub/vibe.d preinstalled publicly available? What else, what kinds of libraries do you normally use?There several database APIs at cods.dlang.org. I don't know why some complain about no db APIs.This is a niche that D and all newer languages should target. How do we do it?Good question.
Oct 28 2017
On Saturday, 28 October 2017 at 14:55:25 UTC, aberba wrote:On Sunday, 22 October 2017 at 02:48:57 UTC, Joakim wrote:Highly doubt that. It really depend on the scale of your operations.I just read the following two week-old comment on the ldc issue tracker, when someone tried to run D on Alpine linux: "For now everything works(?) but I think the process could be improved.. Would be really cool to have LDC easily building alpine containers + static D binaries for microservice and tooling development. I'm pretty tired of reading Go code :)" https://github.com/ldc-developers/ldc/issues/2341#issuecomment-334626550 It strikes me that microservices are a great way for new programming languages like D to get tried and gain some uptake, but that D might not be that easy to deploy to that scenario yet.Its the future.Netflix, Google, Facebook, etc. all have open source tools around microservices. Its currently ruled by JavaScript > Go > Java. JavaScript being the leader. They have these in common: 1. Easy to deploy their code in docker containers including alpine Linux.Interestingly while Docker may seem all the rage in startups I find its use limited to test environments in the real world. Also Java fat jars were super easy to deploy ages before docker. They are also a great deal smaller.2. They have APIs for major cloud services. Both official and third-party. 3. Good support for networking. HTTP, Websockets, IPC*, etc. Mostly HTTP.Honestly APIs these days can be written in anything that is able to put together a few HTTP responses. Unless you are doing serious work like: - DBs - Search engines - ML pipelines - Real-time event processing systems .... Any semimodern language/technology with a several hosts can manage to saturate 1Gbit link. Some take a certain amount of tuning others work out of the box. If you go for 40gbit/s it may be important to choose the right technology otherwise it’s all a matter of taste.
Oct 28 2017