CppCast - Tipi.build

Episode Date: July 8, 2021

Rob and Jason are joined by Damien Buhl and Yannic Staudt from tipi.build. They first talk about a new text encoding library and whether const should be the default for variables. Then they talk about... tipi.build, the Compiler-as-a-Service that understands C++ code and can build it without scripts. News Any Encoding, Ever - ztd.text and Unicode for C++ Should every variable be const by default? Reversing words of a string with ranges -#thatsarotate Links tipi.build Join tipi.build beta tipi.build blog @TipiBuild Sponsors PVS-Studio. Write #cppcast in the message field on the download page and get one month license Date Processing Attracts Bugs or 77 Defects in Qt 6 COVID-19 Research and Uninitialized Variables

Transcript
Discussion (0)
Starting point is 00:00:00 Episode 307 of CppCast with guest Damian Buhl and Yannick Stout recorded July 7th, 2021. Sponsor of this episode of CppCast is the PVS Studio team. The team promotes regular usage of static code analysis and the PVS Studio static analysis tool. In this episode, we talk about a new text encoding library. Then we talk to Damian and Yannick from TPBuild. Damian and Yannick talk to us about TP Build, a C++ developers by C++ developers. I'm your host, Rob Irving, joined by my co-host, Jason Turner. Jason, how are you doing today? I'm all right, Rob. How are you doing?
Starting point is 00:01:20 Doing okay. Just a couple days after the long 4th of July weekend. How'd that go for you? Oh, it's still going from my perspective. Still going? Like fireworks still going off in the background or stuff like that? Yeah, about one or two a night to go off, which is exactly enough to now have my dog be afraid of dusk. So she'll just sit there and just start shaking at like six o'clock, and it's hard to get her to eat dinner and stuff even if nothing is happening and i'm like okay well maybe my dog's just crazy
Starting point is 00:01:50 but i just happened to meet a neighbor who was walking past and he said yeah the people behind him have been setting off fireworks every night for a week and his dog refuses to go outside after seven o'clock no matter what's going on poor puppy that. That's sad. Yeah, I don't think we've been, I haven't noticed any in the evening the last few nights, but I think a lot of people, they're illegal to get the really big ones in North Carolina. They are here too, yeah. But you can cross over the border into South Carolina and get really big ones,
Starting point is 00:02:18 and I think a couple of my neighbors kind of went all out, and there was quite a lot going off on the 4th. Yeah, for us, they drive up to wyoming to get them same idea yeah okay well at the top of every episode like through the piece of feedback uh this week we got a tweet from matt price saying when the pandemic started i was caught up on cpp cast then without my commute i got way behind and i'm only three and a half months behind uh thanks to jason and rob for keeping up the good work and yeah we're happy to keep this going we we didn't want to uh miss out you know there's no real excuse to be missing out over the past year year and a half whatever it was
Starting point is 00:02:56 yeah and if you are just now getting back to commuting or something like that then you probably do have a pretty good uh backlog catch up on. Yeah, definitely. Because it's what I think the average person probably has been working from home for 15 months now. Yeah, from our listening group. Yeah, something like that. Okay, well, we'd love to hear your thoughts about the show. You can always reach out to us on Facebook, Twitter, or email us at feedback at cppcast.com.
Starting point is 00:03:23 And don't forget to leave us a review on iTunes or subscribe on YouTube. Joining us today is Damian Buhl. Damian is the co-founder and CEO of Tippi Build. He's an enthusiastic C++ developer, open source entrepreneur, CppCon speaker, game maker, community founder, Qt for Android contributor, Boost Fusion maintainer since 2014, and Yannick Stout.
Starting point is 00:03:43 Yannick is co-founder and COO of TippiBuild. As an embed engineer and polyglot software developer, he develops many products from end to end and is currently busy building large parts of the front end of TippiBuild, continuously perfecting his practice of coffee-driven business development. Welcome both of you to the show. Hey, thank you very much. Hi, Robert. Thanks for having us.
Starting point is 00:04:04 Coffee-driven development, that's us. A coffee-driven development that's kind of like test-driven development? Yeah, I'm perfectly my coffee addiction. I need them to run and I took it to quite a high level
Starting point is 00:04:19 in terms of quality the last few years. Too high. We cannot have a good coffee machine at the office it's never good enough you know like for yannick well that probably just got compounded by the fact that you've been working from home right now you you probably have your own espresso machine and you tamp it down and hand grind it with like i i had that for a few years, but indeed, last February, I think I upgraded because the old one broke. And I went full out with the support of my wife, who I kind of co-addicted her in the last few years.
Starting point is 00:04:59 And yeah, she tagged along and this time she agreed to spend the right kind of money. I'm almost afraid, but I still want to ask, what is the right kind of money for a good coffee maker? Let's say you go, really good stuff starts at about $800, euros, whatever currency. And in this case, like counting the meal and accessories etc i think i run about at 3k something like that so it's a hobby so yes it's definitely a hobby at that point yeah i don't i don't tolerate a lot of caffeine very well but whenever i am traveling to europe and they have one of the automated espresso machines where I can just press a button and it like does all the things, I totally have like two or three cups a day of whatever. Right. But then I just learned from someone that some of those machines go to the point of like playing a wave file of a grinder so that you think that it's fresh grinding the beans.
Starting point is 00:06:04 And some of them actually fresh grinding the beans and some of them actually fresh grind the beans yeah so so that's the big vending machine there are some that do fake it uh mainly for uh for clean cleanliness reasons because uh the coffee always is so uh so they they have kind of portioned stuff inside and uh the good impression that, yeah, you're getting something fresh. Indeed, they do play something. I know that quite in detail because I had the opportunity to work with a such a vending machine maker a few years back. And so, yes, it's a thing,
Starting point is 00:06:40 but not on the kind of small desktop size home machines. Right, okay. He even goes so far that he implemented in the TP Build backend the HTC PCP protocol that is an RFC from 1st April which is like the hypertext coffee pot control protocol. Yes, exactly. If you get the 418, I'm not a teapot.
Starting point is 00:07:07 It's Yannick. It was somewhere behind there. Funny. Okay. Well, we have a couple news articles to discuss. Feel free to comment on either of these, any of these, Yannick and Damien. And we'll start talking more about tippy builds,
Starting point is 00:07:25 okay? Okay. Okay. So this first one, we have a post on John Hede Monead's blog, and this is Any Encoding Ever? ZTD Text and Unicode for C++. And obviously we've had John Hede Monead on before a couple times, and he's been talking about Unicode and text for a while now. obviously we've had John he'd meet on before a couple of times and he's been, you know, talking about, uh,
Starting point is 00:07:45 Unicode and text, uh, for a while now, I think it's been a bit of an obsession for him. And, uh, he, you know,
Starting point is 00:07:52 seems to have done what he's been seeking out to do with this, uh, post and, and with this library, it looks like a lot of work. Yeah. Yeah. He's saying you can,
Starting point is 00:08:02 you know, encode decode from, from one encoding to another, and even add support for other encodings that maybe you care about that no one else would care about. That's pretty huge, actually. Because until now, there was only LibICU, I would say, that was really capable of doing this kind of stuff, if I'm not mistaken. And this was really missing to have such a library. I really like the fact that we finally have like a real iterator on smileys or on emojis because until now you couldn't iterate easily on emojis.
Starting point is 00:08:39 It was hard. Yeah, I mean, there's a lot of things that can go wrong in that time. I mean, junior steps, it's kind of like the first thing they learn is hard to master, like encoding, especially on system boundaries, like across protocols and network. There's so much to go wrong. Yeah, and I... Oh, sorry, go ahead, Damien. I thought in the article, it was really like a pushing, like, uh, that he is angry against,
Starting point is 00:09:07 uh, not being able to do Unicode properly and so on, but he decided to, to show his middle finger or something like this. It was a really energetic, uh, energetic article. Like, uh, when you, when you read it at the morning, in the morning, you're, you wake up. That's like a good cup of coffee. Yeah, exactly. It's funny because I was reading this
Starting point is 00:09:28 and I'm like getting about halfway through and I'm like, you know, I know so many people who are concerned about the state of Unicode and the C++ standard. I'm surprised this article didn't come from someone that I knew because I didn't actually look at the URL, right? And then I get halfway through it and I'm like,
Starting point is 00:09:43 I gave a presentation about this. I'm like, I gave a presentation about this. I'm like, that's john heed. Wait a minute. Oh, like, it all makes sense now. Yeah. Okay. Next, we have this post on blay cpp.com. and it's should every variable be const by default and uh yeah const certainly important in civil souls language i think it would be a huge change to uh go to const by default but um certainly an interesting article i didn't realize i don't think that um that was actually the way that russ did it with having to declare a variable as mutable. Mutt. Mutt, yeah. I find it slightly annoying that it's mutt, but whatever.
Starting point is 00:10:34 Do you feel like it should be just mutable spelled out? I think it should just be mutable, yeah. But, you know, whatever. That's a randomness. But Jason, you are more like constexpr, the things, right? No, not const, the thing. You're right, constexpr should be your default. If you can't do that, then const. And then if you can't do that, then fine. You're allowed
Starting point is 00:10:52 to make a value mutable. I find it really interesting. I also try to do that, to have const everywhere, but in some places where you do just copy, I think it's a bit overkill to const everything when you just just copy, I think it's a bit overkill to const everything when you just have copy arguments.
Starting point is 00:11:09 But it makes me remember a talk at CppCon 2017, I think. There was a library named Ema, and the author implemented a notepad based on this library that he named Evic. And this was about immutability and the fact that everything is immutable, you can make better parallel computation because you don't need to do locking when you change stuff. And you can even like do a flyweight pattern that works really well because you never remove anything from memory so long as you just fill it up but because you come back to states that already existed before you are not like growing infinitely and I found it really interesting back then and I think it is somewhat related in the sense that you get better of parallelism and so on. I don't know what you think about it.
Starting point is 00:12:06 It was that, who was the speaker for that talk? For Emer and Evic, this was, if I'm not... Someone I can picture, but I can't remember their name. Wondering if that's who it was. If I find the purpose of the slides, 1P... Yeah, okay, 1P.
Starting point is 00:12:31 Okay, yeah, yeah, yeah. Postmodern immutable data structures. Really cool talk, I think, and really great work there. Yeah. Can I just make one nitpicky comment about this article, though? Sure.
Starting point is 00:12:43 I'm sorry, but it bothered me because it happened twice, but they refer to const as a four-letter word. Yeah. I noticed that, too. Yeah, I don't know why. Off by one errors. That's the hardest problem in computer science, right? Right, right.
Starting point is 00:13:03 Okay, and then the last thing we have is a blog post on marco arena's blog and this is reversing words of a string with ranges and uh you want to tell us a little more about this one jason oh i mostly just caught my eye because um the hashtag that's a rotate and it's interesting because it's transcended it's not just that's a rotate it's now i had an epiphany while programming that's a rotate that's shorthand for having an epiphany yeah yeah that's that's a rotate but um i have to actually honestly admit that the actual implementation here is slightly lost on me, but reversing words in a string using ranges required what a little
Starting point is 00:13:52 bit of extra, uh, algorithm added here. But, um, it's also just some educational bits about ranges that like there's intentional design decisions about what kinds of iterators or your resultant from different filters and stuff. Yeah, I think one thing he said early on is this could be a lot easier if it wasn't because of some of those intentional design decisions. Like you could get almost in one line of code. Split produces a forward range, but reverse requires at least a bidirectional range. Right. So that is why you can't just do split and then reverse the words after the split.
Starting point is 00:14:27 But does a view split, is something in the C++ standard now? Because I didn't try the ranges in the last compiler implementation by C++20. Is that something that you can do in a standard way, or is it only with the ranges V3 from Eric Niebler? I am not nearly familiar enough to keep track of those differences.
Starting point is 00:14:52 Now I'm kind of curious. Because it would be the... What I liked in the article is to see the view split, because it was the first time in my life that I've seen a string split in a one-liner in C++. It did make it into the C++ 20 standard, and it is in the ranges header. So yes, you could do that
Starting point is 00:15:11 in actually one line in real C++ code. Wow, so cool. That's good news, yeah. Because all this srgx iterator, tokenizer, and things like this, this was really like on multiple lines and so on. Having one one-liner for string split, that's really a good thing, I think.
Starting point is 00:15:32 Because I've been waiting that for a while and I've been looking with friends like during, I mean, perhaps weeks or months, we tried to have a one-liner in C++17 without any library and we didn't get one that you could actually recall or months we tried to have a one-liner in C++17 without any library, and we didn't get one that you could actually recall or remember, that was one statement. So that's really cool.
Starting point is 00:15:52 I mean, since whitespace doesn't really matter in C++, anything can be a one-liner, right? Yeah, but I mean, one statement, you know, that you can use and it returns directly. I mean, and then there's maintainability, right? Sure. I love that all of these examples, I'm looking at the CVP references examples for split view.
Starting point is 00:16:15 They actually are like constexpr string views that they're splitting, which I like that. Because, well, you get to reason more about what's happening in the code in that kind of case, in my opinion. But also, the fact that ranges are, I think, fully constexpr capable. So that's also handy. Okay, so Damien and Yannick, could we start off by just telling us a little bit about tippy build and what it, how it got started? Yeah, sure. Thank you for asking. I mean, TippiBuild is the home for native C and C++ developers.
Starting point is 00:16:52 What we wanted to build is a tool that helps C++ developers and C developers to work like if everything was smooth like if your environment was always ready always installed but you don't have to bother of uh um downloading dependencies and that you don't need to uh wait for compile times um and we actually seen by some of our uh first users in our beta uh that uh they spar a lot of time uh with what we are doing uh like sometimes two hours per day. And it's actually, for us, it's a company that we started first as NXXM, and then we renamed it to Tipeee because we incorporated the cloud component to it.
Starting point is 00:17:39 And what you imagine Tipeee is like the extension of your machine in order to build C and C++. So somewhere on the TP is like the extension of your machine in order to build C and C++. So somewhere on the cloud is a running environment that is everything I need it to be. Yeah. It's a bar of it, yes. Okay.
Starting point is 00:17:55 So you can select your tool chain. You say, I would like to build for, I'm a macOS and I would like to build for a Linux machine. And many developers do that. They have like a remote Linux server or they have like a vnc or so or something like this on the server but it's it doesn't feel like natural because you have to drop in a remote window there is lag on the network and so so what you wanted to bring is an environment that you can run and that brings you directly to build your C++ code without any hurdles. So it's a seamless experience, a refreshing experience for C and C++. So you can simply, like say, you are in your editor,
Starting point is 00:18:38 and you code some lines, and the Tp is going to synchronize your files uh to the given environment and it's going to build it there and it's going to bring you back the builds uh so you can like build in parallel for 10 platform like saying i build for linux for windows for mac in parallel and i get all the binaries back that i can then release to others it's also working in an asynchronous way that means you are not um remote on an ssh connection or in a browser window or in a remote window where you are like waiting on the server to reply if your connection is not working if you are commuting and so it's directly something that you edit on your computer you
Starting point is 00:19:19 have the file on your computer but it helps you in adding more ram and more cpus to your computer, but it helps you in adding more RAM and more CPUs to your computer so that you can build in an easier way, in a faster way, actually. And inside TP, to remove all the barriers to C++ adoption, actually, we have a dependency manager that is smart and that is based on a smart algorithm that can automatically build any project based on a code scanning. And naturally, we don't force that.
Starting point is 00:19:49 We are not obliged to use that. But most of the time, people, when they start to use our solution, they switch to the algorithm completely because they just see it works and it's just less work. And it doesn't prevent you to configure stuff where you're not opinionated or saying, like, in this particular case, you want to do something special, you can still add hooks and so on. But the idea is to make C++ as easy as it is to write code in Go
Starting point is 00:20:16 or to write code in Rust or so on. It's like really having a seamless experience. Because one of the biggest problems is having your environment ready, actually. This is what we are doing at tp with tp build yeah and perhaps yannick would like to add a note on the continuous integration uh support that we that uh yes we're currently uh trying to oh frank we are adding support for um github actions uh so kind of wiring up into that to have faster and somewhat cheaper runners.
Starting point is 00:20:51 We are looking to do the same for GitLab and for Bitbucket at this point. So kind of to keep the same level of comfort, so you're still right whatever is native to the source and so to the version management you're using so you still can just keep your uh git uh github um actions uh yaml
Starting point is 00:21:16 and uh so the workflows etc and we kind of try to make it as seamless as possible to just drop in there and bring all the performance and comfort to that. What David actually kind of did mention is you can remove the CMakeList files from your solution mostly and we build them, the algorithm builds them for you. One thing that we noticed is the CI services that you find online, they are priced and sized for web development. When you take a GitHub Action Runner or if you take GitLab CI CD, you pay the minute really in a really costly way because it's fought for web workflow, but are not going to build long.
Starting point is 00:22:11 So the services, they need to have something back for spinning up nodes and building the stuff. So they price the minute in a really costly way. And added to that, the nodes are pretty small, like a standard nodes typically are like 14 gigabytes of space. And if you are a C++ developer and you make a debug build of some big C++ code base, or if you have like a Linux environment that you're building for an IoT device, then it's not enough.
Starting point is 00:22:41 And then the solution is host your own runner and and so on and do a lot of work, while we can just say run zone, double point, label, tp.build.macos and then you get a macOS runner for your build that is priced at a job basis. The idea is that you don't need to pay by the minutes for the CI build, you pay for the parallel jobs. And I think it's really a problem that C and C++ has in terms of build size. I don't know about your experience, Rob and Jason, with build sizes and so on on build times.
Starting point is 00:23:17 Yeah, I mean, I could go look right now, but I just had to delete a bunch of code from one of my VMs so that i could make my next build that i needed to make so there's that although to be fair my binaries had really exploded because i was doing debug builds with ub san and address sanitizer enabled because i was trying to track down something that i could not reproduce on my local machine so it made very large builds in that case um but to that point like uh you said you can just kind of remove your cmake list in many cases because your algorithm's smart enough to pick that up but some of the projects that i'm working on i you know they are building
Starting point is 00:23:58 ruby modules with shared libraries and because of platenform limitations in some cases we have to do like a static link of the libraries for one thing and a dynamic link of the libraries for another thing and then we have to find the system Ruby and link against the system Ruby standard SO that kind of thing like is that still
Starting point is 00:24:19 supported in your environment? I said you are not opinionated on the fact that you can still have in some branches of your project, you can still have a CMake list for example, that will, for one folder decide things. You can also have
Starting point is 00:24:35 declarative configuration, because the problem with CMake is that it's imperative, right? So it's really likely that you generate um cmake lists that are difficult to maintain and that have that needs to be debugged that you need to rebuild often so that you you know what you're doing and um we have like a declarative configuration in the sense we just have a json where you specify where we specify that you auto-fill with what we discover
Starting point is 00:25:06 for libraries that you are using. We fill it with the library we found on GitHub, on GitLab, and so on. And you can then pin versions or say, okay, but I want this special preprocessor argument, or I want this special configuration, this special function for this platform to be selected. However,
Starting point is 00:25:25 if you still need to write actual CMake lists in your code, you can say, okay, I benefit from the TP algorithm for most of my code base, but in the part that is specific to the platform-specific part,
Starting point is 00:25:42 then I will just write a CMake list uh and make a small file as a hidden file that tells to tp that he needs to to read the same the same is there and add it in the in his own process and there you can do some fine tuning and so on but the reason why we went for such an algorithm is if you want to depend on some libraries today, you have to be in the same build system than the library vendor or the library author. And you need it to be properly written. Like writing a proper CMake is for a library, just like a simple header only library, writing a proper CMake so that you can find packages and so on. It's mostly like 120 lines of code.
Starting point is 00:26:28 But most of the time, it's hard to get right. And so for this, we had like different stage of the algorithm. The first thing is if you respect conventions, like the pitchfork layout and so on, conventions, then we just build that based on the conventions. If the convention doesn't work because, for example, you are building for multiple platforms, like you have in your code base, some CPP file for Win32 and some CPP file for Linux,
Starting point is 00:26:54 then we know for which tool chain you are building because you specify that. When you say tp build for Windows Visual Studio 2019, for example, then we are going to check is the headers that are included in this file, are the symbols used in this file something that is part of the platform? And if it is the case,
Starting point is 00:27:15 then we can take it in the build. If we see it's including macOS-specific files and symbols, then we are not going to build it in this process. And the last thing is when you have a configuration error, this is the really hard part. You have a build system that is generating a configuration error or generating files, as you said, for Ruby and so. What is going to happen is we have a cloud,
Starting point is 00:27:44 so we can spin a lot of VMs. You can also do it locally, but you might need a bigger PC. And we are going to try many combinations and find out which one works. And because we also detect unit tests, then we are going to run the unit test and see if the unit test passes and if are going to run the unit test and see if the unit test passes and if there is one where it passes better. And then at the end, we are going to provide the special detection to the user so that he can say, yes, this fits me.
Starting point is 00:28:16 And he has then the stuff built. And we have been working on this since a long, long time. I've tried in 2017 already by putting everything in a single header. And that's why we come then to the other part of the algorithm that bring build speed. And actually, it's the same idea. It's like if you were bringing everything in a single header,
Starting point is 00:28:39 but we split it across files and we make it so that you can compile it. It's just the trick that we use behind. Sponsor of this episode is the PVS Studio team. The team develops the PVS Studio Static Code Analyzer. The tool detects errors in C, C++, C Sharp, and Java code. When you use the analyzer regularly, you can spot and fix many errors right after you write new code. The analyzer does the tedious work of sifting through the boring parts of code,
Starting point is 00:29:08 never gets tired of looking for typos. The analyzer makes code reviews more productive by freeing up your team's resources. Now you have time to focus on what's important, algorithms and high-level errors. Check out the team's recent article, Date Processing Attracts Bugs or 77 Defects in Qt 6, to see what the analyzer can do. The link is in the podcast description. We've also added a link there to a funny blog post, COVID-19 research and uninitialized variable,
Starting point is 00:29:33 though you'll have to decide by yourself whether it's funny or sad. Remember that you can extend the PVS Studio trial period from one week to one month. Just use the CppCast hashtag when you're requesting your license. To back up from the CI, CD, and build configuration stuff you were just talking about, you said you can run this locally, and then you won't have to set up a compiler or anything like that. So it's a fresh environment. I guess you can just get going with tippy what does that look like you know what do you have to set up to connect to your your tippy service um the the first thing is you download the tp binary um like so when they load the drop in your in a command line or you
Starting point is 00:30:17 install a visual studio code extension um we are working on other extensions like Visual Studio as well, but it is not yet done. And then at the first start, we are going to download the default environment for your machine. We have a Clang for Linux. We have a Clang for Windows with libc++ and a Clang for macOS with libc++ as well. Like having always the same uh basic compiler um if you have compiler on your machine we can use them but uh you can also say i want to use for example visa studio and then we are going to because we if we don't find it in your local environment and because we cannot ship it we will then spin a vm where it's it's a it's in there
Starting point is 00:31:03 and the tp is going to synchronize the files of your current folder in a tp build VM where it's in there. And TP is going to synchronize the files of your current folder in TP build node. And it's going to build on this Windows machine remotely and deliver you the binaries back. And actually what our toolchain files are, it's a CMake toolchain file, like specifying all the specific IAs of which options you want, which optimization flags you want, and so on, plus a Packer image. That means it's always
Starting point is 00:31:34 a pair of a toolchain file and a VM. But the VM is only the system, the base system, base compiler, basic tools. You can add the neurons on top so that you have your typical tool that comes with. And then TP is going to build that either automagically by using our algorithm, or if you really don't want, you just say, no, use my CMakeList. But then if you do that and you do it for your full project, then you lose a bit of our advantage is that we can split the compilation we can parallelize it at a finer granularity actually we will spin up nodes based on what you have in your subscription like typical if you take a tp pro subscription then you have like 128
Starting point is 00:32:20 cores included and what happens is when you build we look at the files and we split them. If we see, okay, there is a template association there on an overdue on there, on very, our two functions that are, um, that can be compiled separately. We are going to split them in separate files. Wow. And, uh, if this doesn't make sense because we measured that pre-processing will be higher on each separate file and that you will lose time on the linking part after, we won't split it. But in most of the case, we will be able to split things. And so we will not just build after each translation unit, but we will parallelize after each function that you have in your program
Starting point is 00:33:03 and link them incrementally during the process there. And so that's why algorithm is also a key part, is if you do full CMake, you get the advantage of the environment, the build cache, and having everything remote. But if you do use for some of your folder no CMake, like when you have just the plain algorithm and so on of your application, then we can actually generate the CMake list for you. And we can split the build process in a way, finer granular way.
Starting point is 00:33:35 And because we do that through files, we can drive any compiler. It's not like you need your compiler. It's just a preprocessing step before that makes it possible. And because you have the cloud, we build continuously. So you edit and it builds and you get back the binaries. And in the future,
Starting point is 00:33:52 we might add out reloading and stuff like this. So it's really about bringing seamless experience to C++ developers. So I never, if I understand what you're saying, I don't ever say like type make
Starting point is 00:34:06 on my system. If I'm using TP, it's just building whenever I save a file. Per default. Yeah. If you don't want this, you can naturally disable it and just say TP build yourself on the command line or through a button in the, in the ID. So it's, it's, it's, it's, it's by default we offer that so automatic. We first synchronize and then build and again synchronize every time. But we understand that not everyone wants this so it's also possible to just manually do it. And everything that we offer is command line possible. So it's possible in command line so you don't't need to, you're not tied to some environment and so you can integrate it anywhere. And we are going to open source it,
Starting point is 00:34:49 but at the moment we are actually in a phase where we battle test it with different users. And that's why we, if people join on a website, then they get a seat. And if they fill in the Overtaker questionnaire, we bring them up in the list.
Starting point is 00:35:08 And based on their use case, we get them in our beta. And at the end of the summer, at the beginning of September, October, we will bring an open source release of it and a public release of the solution. Sounds like you're actively looking for beta users to join and try out Tepi right now. If someone has an interesting edge case or something at scale or something they'd really love to try, give it a shot.
Starting point is 00:35:48 It's interesting for everyone, I think. And the point is, we are so, if you take a seat early, because we are a startup, so we cannot open our cloud suddenly to everyone because we will have scalability issues. That's why we need that. And for the moment, we do deployment on a user basis. Like every user gets his own deployment
Starting point is 00:36:13 and we are working on the automatic onboarding so that we can deliver some features to the different users in a more automatic way. And yeah, I mean, in the end, it will be open to everyone, but it's just like we cannot open to all 5 million
Starting point is 00:36:35 C++ developers in the world. They can then build on a platform, or it will just explode on our cloud. Our cloud will just not follow. So we are working on that at the moment. And yeah, scalability issue. Yeah. And what we didn't say is basically
Starting point is 00:36:52 during the time you're not building, you can reuse the resources you basically bought to have access to a remote machine. So basically we have a TPU build and we have a Tippy run part of it. So you can reuse the nodes. Basically you build your application, you're sitting in front of your Mac desktop,
Starting point is 00:37:12 you want to compile the Linux binary and then you can't execute it, right? And so we basically give you the option to use the node to execute the Linux binary in the same environment. And we redirect IO. We're even trying at this point to have some VNC facilities for UI applications to transport the rendering across the network. That's a very, very early pre-alpha. But things going on in that
Starting point is 00:37:48 direction too. Yeah, I'm curious about that in the continuous build model. How do warnings and errors get reported back to me from my code? And I'm particularly curious, since you said you can take one file and split it across multiple compiler instances, how do I get back the warning to know on line 12 that's where my code had a warning? When you do the preprocessing of a C++ file, you know, when you run like gcc with a dash e or dash Dashy, yeah. Dashy is like uppercase E. You get like marker in the file, like that is what was pre-processed, expanded the code,
Starting point is 00:38:37 but the compiler will return a warning or an error at this position or this other position. So we abuse this mechanism so that the compiler, when you get a warning and error on this splitted file, that you get the warning at the right place. It's a bit like source maps. The point is as well, I mean, we try also to keep lines and things like this. When we do modification in the file, we try to add them on a single line,
Starting point is 00:39:10 not to inject lines and stuff so that you get an error at the right place. Yeah, this is an important thing. And we have like during the live compilation, we have like FTX UI from, it's a library that was featured recently. It's one of our users, actually, as we were named in XXM. And we are using the FTX UI library to actually provide you the different platforms.
Starting point is 00:39:43 At the same time, you have the log of, for example, if you build for the three platforms, Mac OS, Linux, and Windows in parallel, then you get them in different tabs of your console. Or naturally, you can still output it to separate terminals or to files, but you can get them live and see, oh, it's compiling on Windows, it's green. Oh, it doesn't build on Mac. Oh, it builds on Linux. So you can then focus on what you want to fix and every change you see directly if you're breaking this platform or this other platform without waiting for the Kotus integration to run.
Starting point is 00:40:11 This is a, because this is the use case we had like, I mean I've been working in a cross-platform development in like IoT and so for ten years before and I always had this problem. I was building for one platform and then I break the 10 overs. I wanted to have this feedback directly and this is one of the solutions we brought there. Actually, for Tipeee,
Starting point is 00:40:35 for the application itself, it's super useful. So we heavily dogfood the thing. So we make heavy use of that feature. And before you spoke about Asan and Ubisan and so on. Yeah. And what I always had as a problem when I was working in teams and so coming to new teams, I noticed that all this stuff weren't set up because you need to add them in your CMake list,
Starting point is 00:41:00 you need to make some setup, you need to have them, and so on. And this is also something that we have in TP, is that we enable all this stuff per default, and we get them run in a nightly, so you get information, hey, what you did today, we found this and this error, and
Starting point is 00:41:19 this is just for us another cloud instance to run in parallel, so that it doesn't disturb your actual build. And it's actually what we would love is that people feel like C++ is as easy to write as writing JavaScript, you know? Like, you just drop some lines and it works. So on that note, then, you said you enable ASAN, UBSAN, whatever in the nightly builds.
Starting point is 00:41:46 Does your build environment also support things like CEP check and clang tidy? And how do I adjust the warning levels if I'm using your automagic feature? As I said, you can still reintegrate well with CMake. In the sense, CMake is your internal tool. It's just that CMake is something that is not meant to be given in the end of the developers. In my opinion, it's like it's like make you know, it's something you don't want to write yourself, you want to be able to tweak things,
Starting point is 00:42:17 but you don't want to be the one that writes that. And what we what we offer is like an opts file. On this opts file, you can add some CMake-specific ID inside it. Okay. But we try to restrict it to declarative things. And regarding the clunked ID on Ubisoft and Ascensio, this can be directly provided in our configuration in json because these are like generic settings that are declarative is not something that you need
Starting point is 00:42:53 to do if else in cmake or something like that that's the point yeah okay well i mean you've mentioned a bunch of different platforms but if you could just kind of lay it out for us what platforms directly do you support at the moment we officially support windows with a clan with a special with a special clang with libc plus plus so c++ 17 and so on 20 is coming um on the linux and and Mac with this compiler. And then we have Visual Studio for Windows x86 and so. And we have like a GCC for some cross-compilation for Linux IoT devices and so. But we have a gigantic list with iOS, Android, and so we have customers that are using iOS and Android in their build.
Starting point is 00:43:47 And they can do it in the sense they can write their own image, like saying, okay, this is my declaration of what the VM should look like in this Packer format. And then they add the toolchain file to it. And as we grow, we are going to have even more of them on having as a test nodes that actually works for this.
Starting point is 00:44:11 We are looking for possibilities to run tests, not only in a iPhone simulator, for example, but running it in a real iPhone and things like this. You are like looking at things like this at the moment with some users. And that's actually the thing that is key behind TP is this pair of toolchain files and toolchain names on the VM image behind.
Starting point is 00:44:37 And you can actually, you don't need a cloud to run it. You can actually deploy it locally in your machine. It's like building on a Docker, for example. But we choose the XTERRA and other level of indirection, actually deploy it locally in your machine it's like building on a docker for example but uh we choose the extra another um level of indirection like in the fundamental theorem of software engineering because then uh you can you can do vms from any kind mac os as well um and you can also do dockers we just don't default by docker on our cloud we don't build in a docker in docker container directly
Starting point is 00:45:12 we will respawn a VM for security reason because we don't want someone to be able to steal the code of someone else or access because isolation is just not good enough yeah yeah so for our listeners who want to just go try this out do you have like a free tier or a trial tier or something like that they can test with actually at the moment it's it's still a closed beta so they have to join uh they
Starting point is 00:45:41 get on the waiting list um but we empty it uh empty it we bring the people up every month in the waiting list and people get it the point is the version that you have is a free version you can use it locally and then you can add stuff that gets with the
Starting point is 00:46:02 cloud and we are going to give like for free some build minutes and so so that you can try um and this free version is really going to be open source um at the v1 release uh we we just uh didn't do it yet because it's a lot of work to open source uh everything um it's a lot to to have like source everything. It's a lot to have like to check it to check out that everything is clean that we brought the repositories in the right folder on that you can react to issues and pull requests this is something because we are still hiring at the moment and so that's the reason why it's not yet open source but it will be
Starting point is 00:46:46 and that's why the beta users get access to it earlier than the others. That's definitely one thing. Do you have any idea when you're going to hit that v1 release date or when you are going to plan to open source it? It's happening this year.
Starting point is 00:47:02 Okay. There's only half of it left, so that's what we go by at this point. Go ahead, Damien. Sorry, I didn't know if you... I saw Yannick Frozen, that's why I'm... But if you hear his message, it's okay. We are releasing this year at the latest in Q4
Starting point is 00:47:27 and otherwise this summer. Now, the parts that you say that you're planning to open source, does that include this fancy build algorithm that you were talking about that can split up our files and make them even that much more parallel? Yeah, because I think there is a lot that the community can bring there. And for example, what our algorithm does is that it follows the information that you get
Starting point is 00:47:54 when you build the file normally. You get information, preprocessing took so much time, instantiating the template took so much time and so on and we use this in our calculation to define what we split what we don't split and so on the I think open sourcing this is definitely something that makes sense because it's gonna being improved and it's just something better for the C++ community in general so it's just that it's a lot of work based on the LLVM Clang parser and so on. And we couldn't open it that easily yet. Right. Gotcha. Cool. Very cool.
Starting point is 00:48:37 Well, you mentioned you're looking for beta users. Is there anything else you want to tell us about before we let you go today? If anyone wants to try just the CI or they have a special platform, a special hosting. For example, we had someone approach us with Bitbucket that we didn't
Starting point is 00:48:58 have yet. So we are working on this now. If the people have like special needs just just just join uh or drop us a mail call us or um write a writer in the overtaker questionnaire just what's really needed uh we will just bring them then a trial version that they can try and yeah enjoy it then okay very cool and what's the website where everyone should go sorry what's the website where listeners should go to check everything out tp.build okay yes which you have underneath your name right now
Starting point is 00:49:38 underneath mine it is written yes so if you're the video, it's been here the entire time. Yes. Okay. Well, Yannick and Damien, thanks so much for coming on the show today. Thanks, Rob. Thank you very much, Rob. Thank you very much, Jason.
Starting point is 00:49:56 Thank you. It's really nice to be there, to speak here. I really like how you maintain this flow of podcasts every week. That's really awesome. You're a really great team. Let's see if we can help you further in the future.
Starting point is 00:50:13 Okay, great. Thanks so much for listening in as we chat about C++. We'd love to hear what you think of the podcast. Please let us know if we're discussing the stuff you're interested in or if you have a suggestion for a topic. We'd love to hear about that too. You can email all your thoughts to feedback at cppcast.com.
Starting point is 00:50:30 We'd also appreciate if you can like CppCast on Facebook and follow CppCast on Twitter. You can also follow me at Rob W. Irving and Jason at Lefticus on Twitter. We'd also like to thank all our Patrons who help support the show through Patreon. If you'd like to support us on Patreon, you can do so at patreon.com slash cppcast.
Starting point is 00:50:48 And of course, you can find all that info and the show notes on the podcast website at cppcast.com. Theme music for this episode was provided by podcastthemes.com.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.