digitalmars.D.learn - ddbc with Vibe-d
- Steve (8/8) Feb 12 2023 Hi,
- Steven Schveighoffer (11/21) Feb 12 2023 Any synchronous calls will just be synchronous. They aren't going to
- Steve (6/10) Feb 12 2023 Would this be the correct approach to stop it blocking?:
- Steven Schveighoffer (12/25) Feb 12 2023 That might work, depending on args. As documented in the API, if
- Steve (5/17) Feb 12 2023 In my case args will just be the body of the HTTPServerRequest
- Steven Schveighoffer (3/6) Feb 12 2023 I think it needs to be immutable if it's a reference.
- Steve (5/7) Feb 13 2023 I have tested args with isWeaklyIsolated!(typeof(arg)) and it
Hi, I'm trying D for the first time and so far I'm really impressed with both D and vibe-d. My test project is an application server and I want to use SQLite3 as its database. I understand Vibe.d uses an async model under the hood and so my question is are Vibe-d and ddbc compatible? Thanks.
Feb 12 2023
On 2/12/23 6:05 AM, Steve wrote:Hi, I'm trying D for the first time and so far I'm really impressed with both D and vibe-d. My test project is an application server and I want to use SQLite3 as its database. I understand Vibe.d uses an async model under the hood and so my question is are Vibe-d and ddbc compatible? Thanks.Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses. In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes. There are several projects that are built to work with vibe-d sockets. mysql-native is one, and vibe-d-postgresql is another. I don't know if there is an sqlite project that is vibe-specific. But sqlite typically is using files anyway, or maybe even memory, so you aren't waiting on network i/o. -Steve
Feb 12 2023
On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer wrote:Any synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses. In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes.Would this be the correct approach to stop it blocking?: ```d auto result = async(&doSqliteStuff, args...).getResult(); ```
Feb 12 2023
On 2/12/23 1:01 PM, Steve wrote:On Sunday, 12 February 2023 at 15:24:14 UTC, Steven Schveighoffer wrote:That might work, depending on args. As documented in the API, if anything in args are mutable references, then it is run as a task, and the same problem still applies (it will use a fiber, and count on the concurrency of vibe's fibers to deal with the asynchronicity). If it is possible, it will run in a worker thread, and then it can execute concurrently. I believe you can do: isWeaklyIsolated!(typeof(args)) to see if it will run in another thread. I admit not having any experience with this function. -SteveAny synchronous calls will just be synchronous. They aren't going to participate in the async i/o that vibe uses. In other words, when you block on a call to sqlite, it will block everything else in your web server until that completes.Would this be the correct approach to stop it blocking?: ```d auto result = async(&doSqliteStuff, args...).getResult(); ```
Feb 12 2023
On Sunday, 12 February 2023 at 19:38:47 UTC, Steven Schveighoffer wrote:That might work, depending on args. As documented in the API, if anything in args are mutable references, then it is run as a task, and the same problem still applies (it will use a fiber, and count on the concurrency of vibe's fibers to deal with the asynchronicity). If it is possible, it will run in a worker thread, and then it can execute concurrently. I believe you can do: isWeaklyIsolated!(typeof(args)) to see if it will run in another thread. I admit not having any experience with this function. -SteveIn my case args will just be the body of the HTTPServerRequest which is JSON. How can I get that JSON and pass it to async() in a manner that ensures I get a worker thread?
Feb 12 2023
On 2/12/23 3:29 PM, Steve wrote:In my case args will just be the body of the HTTPServerRequest which is JSON. How can I get that JSON and pass it to async() in a manner that ensures I get a worker thread?I think it needs to be immutable if it's a reference. -Steve
Feb 12 2023
On Monday, 13 February 2023 at 01:43:38 UTC, Steven Schveighoffer wrote:I think it needs to be immutable if it's a reference. -SteveI have tested args with isWeaklyIsolated!(typeof(arg)) and it looks like good news 👍️ Thanks for your help, Steve.
Feb 13 2023