Glauber Costa
๐ค SpeakerAppearances Over Time
Podcast Appearances
It's just not possible. So that's it. It's limbo so far, and this is something that we want to keep. The language is the same. Again, we want to keep the language. We want to keep the ABI. We want to be able to load SQLite extensions. The file format, obviously, it's the thing that defines SQLite. So obviously, again, we might add to it in the future, but we'll be reading SQLite files.
It's just not possible. So that's it. It's limbo so far, and this is something that we want to keep. The language is the same. Again, we want to keep the language. We want to keep the ABI. We want to be able to load SQLite extensions. The file format, obviously, it's the thing that defines SQLite. So obviously, again, we might add to it in the future, but we'll be reading SQLite files.
Normally, and we are bytecode compatible as well. So one of the other ways in which we test Limbo is by now out of the simulator, just generating random SQL statements, and then seeing that the bytecode that is generated by Limbo is the same bytecode set of instructions that is generated by SQLite.
Normally, and we are bytecode compatible as well. So one of the other ways in which we test Limbo is by now out of the simulator, just generating random SQL statements, and then seeing that the bytecode that is generated by Limbo is the same bytecode set of instructions that is generated by SQLite.
So that doesn't catch bugs in the implementation of the bytecode, but at least you know that the query plan is the same and et cetera. So this is yet another way in which we've been testing to make sure that it's up to standards.
So that doesn't catch bugs in the implementation of the bytecode, but at least you know that the query plan is the same and et cetera. So this is yet another way in which we've been testing to make sure that it's up to standards.
Yeah, so async is something that a lot of people misunderstand. Async doesn't mean, for the rust-minded people in the audience, to be clear, async does not mean that we're going to use an async runtime like Tokyo or like others. I actually personally wrote an async runtime when I was a data dog that's still around called Glomio. We don't use any of that.
Yeah, so async is something that a lot of people misunderstand. Async doesn't mean, for the rust-minded people in the audience, to be clear, async does not mean that we're going to use an async runtime like Tokyo or like others. I actually personally wrote an async runtime when I was a data dog that's still around called Glomio. We don't use any of that.
And again, part of the reason we don't use any of that is that we want all of that to go through our simulator. So if you look at the limbo code, it's just really sync rust. It's not async rust, right? So all the async means is that when you call an operation, if that operation is not ready, it will return to you instead of blocking.
And again, part of the reason we don't use any of that is that we want all of that to go through our simulator. So if you look at the limbo code, it's just really sync rust. It's not async rust, right? So all the async means is that when you call an operation, if that operation is not ready, it will return to you instead of blocking.
And the main, now I'm getting a little bit too technical, but let me just give you the full context. The SQLite C API has a bunch of functions, but the most important of them is called SQLite step. And SQLite step is essentially take another step, take another step in processing this query for me. And this is a blocking function.
And the main, now I'm getting a little bit too technical, but let me just give you the full context. The SQLite C API has a bunch of functions, but the most important of them is called SQLite step. And SQLite step is essentially take another step, take another step in processing this query for me. And this is a blocking function.
So what that means is that if you call SQLite step, it will block until it resolves. let's say in that step you want to execute 4, 5, 10, however many bytecode instructions, until it does that, it will block. In limbo, if you detect that you're not ready to execute those bytecode instructions at that time, you just return something saying no. Call me back later.
So what that means is that if you call SQLite step, it will block until it resolves. let's say in that step you want to execute 4, 5, 10, however many bytecode instructions, until it does that, it will block. In limbo, if you detect that you're not ready to execute those bytecode instructions at that time, you just return something saying no. Call me back later.
So that is essentially what async means. And then with that, it becomes very easy to plug something like Tokyo on top in Rust or run it on the browser or whatever, because you can call those async functions. And if it's not ready, it will not block. That's all that means. But it doesn't mean that we have to use the async runtime internally. In fact, quite the opposite way.
So that is essentially what async means. And then with that, it becomes very easy to plug something like Tokyo on top in Rust or run it on the browser or whatever, because you can call those async functions. And if it's not ready, it will not block. That's all that means. But it doesn't mean that we have to use the async runtime internally. In fact, quite the opposite way.
Well, it isn't that fast. And I ran a query yesterday, for example, that took 10 minutes to run. There was a query with five joints looking at all the user data about users who are signed up to the Turso platform. it takes a long time just because the query is complicated. SQLite is very fast for CRUD style, just like, hey, here's the key, give me the value. Sure.
Well, it isn't that fast. And I ran a query yesterday, for example, that took 10 minutes to run. There was a query with five joints looking at all the user data about users who are signed up to the Turso platform. it takes a long time just because the query is complicated. SQLite is very fast for CRUD style, just like, hey, here's the key, give me the value. Sure.
But it's not super fast for analytical stuff. The first thing that it unlocks is just this, queries that are much more complex that you can run in dashboards and things like that. Also, for the serverless environments, Durso being one example, and for clarification, our product will be renamed to Durso Cloud. And we have all the intention in the world to rename Limbo to just Durso.
But it's not super fast for analytical stuff. The first thing that it unlocks is just this, queries that are much more complex that you can run in dashboards and things like that. Also, for the serverless environments, Durso being one example, and for clarification, our product will be renamed to Durso Cloud. And we have all the intention in the world to rename Limbo to just Durso.