Welcome to NTA Nightly, I am Channel Novel, this edition's top stories. City vendors to have their financial burdens eased as local government Minister Hon. Richard Frederick issues another reprieve package. Prime Minister Hon. Philip J. Pierre calls for greater public education on St. Lucia's war heroes. And the food service industry helps pilot a plastic-free St. Lucia. More St. Lucia's are to benefit from government initiatives aimed at providing relief to those impacted by the financial fallout from COVID-19. Minister in the Office of the Prime Minister with responsibility for housing and local government, Hon. Richard Frederick during the sitting of the House of Assembly on Tuesday announced that all vendors renting from the Castries Constituencies Council, CCC, will be granted a waiver on rent owed to the CCC prior to the 1st of November 2021. All 656 vendors who are currently renting from the Castries City Council, all are outstanding that accrued before the 1st of November this year is hereby forgiven. This waiver is to the tune of $3 million. Minister Hon. Richard Frederick explained that vendors have been adversely affected by the COVID-19 pandemic and this relief will go a long way in assisting their financial recovery efforts. This rent reprieve, Mr. Speaker, is for vendors in the vendors' arcades, vendors in the central market, both provision and craft market, the various units owned by the CCC and the individual vendor vending booths all across the city. This move, Mr. Speaker, this additional reprieve will cost the government another $3 million, putting the people first. Mr. Speaker, there is no doubt that the government is helping its people. The people must now help the government by discharging the legal obligations by paying the rent from January and agreeing not to sublet. The Department of Housing and Local Government to date has provided two reprieve packages totaling $7.2 million. In October, Hon. Richard Frederick announced the waiver of rent owed by both commercial and residential tenants of the CCC. Meanwhile, the Government of St. Lucia has announced that it will be undertaking the completion of phase one of the St. Jude Hospital. The decision was made after comprehensive analysis of the status of the current structure. The announcement was made by Prime Minister of St. Lucia, the Hon. Philip J. Pierre, during Tuesday's sitting of the House of Assembly. Hon. Pierre also informed that the analysis of the Hiranora International Airport redevelopment project is progressing with the aim of charting the best way forward for the project and the country. The five options proposed for review are 1. Do nothing, compete at terminal using the current design and determine the overall cost. 2. Scale down the existing design to obtain a single structure by removing components including the elevated roadway and food floor with VIP lunges. 3. Use a design from 2020 with construction of the terminal in the car park, north of the existing terminal and demolition of the existing terminal. 4. Keep the existing terminal and incorporate it into the expansion. Create a connector and use the existing terminal for arrivals and a new scale down along the vertical plane terminal for departures, leaving room for full expansion if required. Piling for that phase would have already been in place. Determine what could be salvaged from the ongoing foundation works and relocate the new terminal further towards the east. The governmental works define the report of the committee, but in the meantime will include and pursue the identification of various value engineering options to ensure that the money of the taxpayers of St. Lucia was not squandered. Another matter of national importance to be undertaken by the government of St. Lucia is constitutional reform. We have signalled our good government's intentions by the appointment of a deputy speaker. We have in the first hundred days reignited the Constitutional Reform Commission, presented to parliament in a motion debated in August 2015. On assuming office, the government recognising that since the approval of the resolution by parliament in 2015 for the establishment of the committee, little progress had been made in this important matter. We have taken steps to pursue the constitutional reform recommendations as a matter of high national priority. In fulfillment of this objective, government will work with and take the necessary steps in consultation with you, Mr Speaker, and the leader of the opposition to ensure that this matter is adequately pursued. Prime Minister of St. Lucia, Honourable Philip J. Pierre. The ER clinical staff lounge at the Victoria Respiratory Hospital receives a facelift providing a relaxing and welcoming space for employees. More from Funnel Neptune. The Respiratory Hospital recently unveiled its refurbished and upgraded ER clinical staff lounge with the help of the St. Lucia Manufacturers Association. The refurbished ER clinical staff lounge provides a space for staff to recharge, join long and challenging periods at the Respiratory Hospital. Minister for Health, Wellness and Elderly Affairs, the Honourable Moussa Jebatis, Express sincere thanks and appreciation to the St. Lucia Manufacturers Association for the gesture and invested their resources to ensure comfort for the staff at the hospital. This room will help with our mental health because that's an aspect of the COVID-19 battle which is not spoken about too much, mental health, stress. The stress that the doctors are going through, the porters and the cleaners and everybody around, the security people, all right, you two are frontline workers and I can see the stress that you're going through. So I wish to thank you and to say to the St. Lucia Manufacturers Association, this is really wonderful, this is heartwarming and I want to encourage your members to continue to reach out to the hospital and let us do this together. President of the St. Lucia Manufacturers Association, Margaret Daisy says, despite challenging times, the Association saw the need to give back to St. Lucia and the health sector. All our manufacturers, the bulk of them contributed to ensure that it was a success. It's just the beginning because we have a lot more to offer and we encourage all other companies, all other associations to come and give back. This is the best way to help our nation and our society get better. And we feel that if the wellness of our doctors, nurses and staff are taken care of, it will have a domino effect on the patient. The combined expenditures of the organizations within the St. Lucia Manufacturers Association who contributed towards the refurbishment of the EL Clinical Staff Launch was in the range of $50,000. Reporting from the Communications Unit of the Ministry of Health, Wellness and Elderly Affairs, I am Funa Lipton. Prime Minister the Honourable Philip J. Pierre has hailed the heroism of St. Lucia Nationals who fought in the world wars. Prime Minister Pierre has however lamented the lack of public education on the lives of those who served to secure our freedoms. More from Herbody Mark. Engraved on the war memorial at Derrick-Walkett Square are the names of St. Lucia soldiers who served during World War I and II. This year, 2021 marks 103 years since the end of World War I on November 11, 1918 and 76 years since the end of World War II on May 8, 1945. St. Lucia annually recognizes the service of these brave soldiers with a wreath-laying ceremony, the wearing of poppies, and in past years a Remembrance Day parade. The Remembrance Day observance held this year on Sunday, November 14 at Government House provided an opportunity for reflection on the sacrifices made by war veterans and the benefits derived in modern day. Officials of the Government of St. Lucia, the Diplomatic Corps, and the family of war veterans paid tribute to the St. Lucia servicemen who fought and lost their lives on the battlefield of the two world wars. Highlighting the indelible contribution of the 359 St. Lucia's who served in the British Armed Forces, Prime Minister of St. Lucia Hon. Philip J. Pierre called for greater public education on the work and sacrifice of St. Lucia's war veterans. These brave patriots pay the ultimate price, they sacrifice their lives to defend and protect the lives and freedoms of people who lived at that time and for generations to come. Hon. Philip J. Pierre indicated the sacrifice of these servicemen paved the way for many rights and democracies enjoyed today. Our way of life which gives us the right of choice, the right to live in peace and harmony, the right to the freedom of expression, and the right to elect a government of the people's choice, the right to enjoy the ownership of property amongst others were all preserved. In essence, democracy reigned over tyranny. The British High Commissioner to St. Lucia Leslie Saunders recognised two surviving veterans of World War II for their service. Mr Francis, 84 years old, and Mr Hain Cyril, who celebrated his 100th with thee on November 12th. Your colleagues have arranged a wonderful certificate for you, Mr Cyril. From the Royal Commonwealth X Services League, it says happy 100th birthday on the 12th of November 2021, awarded to Mr Hain Cyril, living in St Lucia, in recognition of this incredible milestone and the lifetime of memories of your distinguished military service. We wish you many more, signed by Major General Mitch Mitchell, the Deputy Grand President of the Royal Commonwealth X Services League. French Ambassador to St Lucia, His Excellency Jacques-Henry Houls, described their remembrance these commemoration as extremely moving. He recalled that French resistance during the Second World War escaped to the Peter regime in St Lucia and received a warm welcome. This gesture is well remembered in France and so I'm very happy to be here with my British colleague and to celebrate with you that particular day, which is also in France a kind of general day for the victims of the main wars of the 20th century. So thank you very much. The first remembrance service was held in 1919, one year following the end of World War I. From the Government Information Service, Hermione Marc reporting. One local restaurant has answered the call to reduce the use of single-use plastics voice takeaway services. Spice of India is teaming up with the Plastic Waste Free Islands project for a pilot to encourage sustainable consumption in St Lucia's food service industry. Jesse Leos has the details. Indian cuisine is on the menu and you can now order the takeout in reusable food containers. The Plastic Waste Free Islands PWFI project through the Department of Sustainable Development has made available 49 reusable food service containers to a local restaurant, Spice of India, to boost their sustainable efforts at reducing single-use plastic consumption. In the pilot initiative, Spice of India commits to include the containers in an ongoing offer where patrons who opt for takeaway in a reusable food container will pay a small deposit when they order food from the restaurant. The deposit is paid back to the patron when they return the container. The PWFI project food service containers can be used up to 250 times, cleaned after every return under the strictest hygiene standards. Deputy Permanent Secretary in the Department of Sustainable Development, Silka Tobias, handed over the containers to restaurant owner Chef Adil Sherwani on behalf of the PWFI project. This will assist with our goal to reduce the country's dependence on single-use plastic food service containers by encouraging customers to avoid single-use plastics and using reusable containers for ready meals, takeaways and any food in bulk. This project will further assist with finding innovative solutions against plastic waste generation and leakages. The PWFI project is part of the International Union for Conservation of Nature's Global Close the Plastic Tap program. With support from the Norwegian Agency for Development Corporation NORAD, the three-year project works in St. Lucia and five other islands of the Caribbean and Pacific. The project seeks to promote island circular economy and to demonstrate effective quantifiable solutions to addressing plastic leakage from small island developing states. Spice of India owner Chef Adil is pleased to align his enterprise with this cause. Anything to do for the environment, we will do whatever it takes to save the environment and of course it's a cost-effective way for us and for our clients as well. So I'm very excited for this day and the staff are excited, the whole team is excited and I'm glad to get it out so people can start patronizing it. Actually it works very good with the summit going on right now where we're trying to save the environment in the whole world and this goes a long way. So anything for sustainable development, Spice of India is up for it. The handover was held on November 3rd, 2021. More restaurants and food service providers are encouraged to introduce similar initiatives to reduce single-use food packaging. For the Department of Sustainable Development, I am Jesse Leans reporting. This is Ntia Knightley. Primus Hutchingson is up next. Stay with us. The water and sewage company Ink Wasco wishes to inform the public that individuals wishing to access the customer services department can call or send a WhatsApp or text message to the numbers 4820187, 4820188, 4820058 and 4820060 for assistance with the following queries. Bill balances, bill queries, high consumption, new connections, reconnections, disconnections upon request, change of a householder's name and meter replacements. The service is available from Monday to Thursday from 7.30 a.m. to 4.00 p.m. and Fridays from 7.30 a.m. to 3.30 p.m. Call or message us today to resolve all your customer service-related needs. Welcome back. We join Primus Hutchingson for the Ntn Nouvelle. Acquire all of you. M. Houtain Genel, M. Mdm, Department of Sustainable Development for Information in this government. This is G.I.S., Assembly for National Television, and Ntn, the new president of Acquire all, the president of Primus Hutchingson. The ministry has made sure that the citizens of M. Jebattis are happy and that the success I have made and that the COVID-19 pandemic continues. I say congratulations to M. Mdm, the minister of Jebattis who spoke mainly about his government's accomplishments and how we can make a difference for the great satisfaction that has already existed in the coronavirus pandemic. According to M. Jebattis, if the pandemic continues, there will be no coronavirus pandemic that can stop the pandemic. That's not a reason for me to say goodbye. We have to manage COVID-19, Mr. Speaker. It's different. It's not easy. One is difficult. One is difficult. One is difficult. One is difficult. One is difficult. One is difficult. One is difficult. But Mr. Speaker, we know that everything is not easy. It's not easy. It's not easy. Honourable Jebattis, the government has approached the situation in a different way. We have to make a difference. We have to make a difference with the fact that we want to bring everyone to this. But Mr. Speaker, it's a unique thing. He has to mix everything. He is not a politician. He has to try to talk to everyone. It's not everything he can do well. But he has to talk to these people in these health centers. Mr. Nessot Belvi, these health centers, we're all working for the best. For the best. We're all working for the best. We're all working for the best. Both of us are working for the best. The government and the private sector with the housing in these situation, the city, the company, the structure, the state, the government, the government's office, to talk about how it has already been accomplished for the last 100 days since the government was in power. On November 21, 2021, Frederick declared that the government had already abolished 646 holidays, which was before November 1, 2021. On November 21, 2021, Frederick said that it had cost the government $3 million, more than $4.2 million, which is a debt relief for residents with no commercial services. On November 21, 2021, Frederick declared that he had already abolished 646 holidays, which was before November 1, 2021. Frederick said he had already abolished 646 holidays, which is a debt relief for residents with no commercial services. On November 21, 2021, Frederick said he had already abolished 646 holidays, which was before November 1, 2021. This news was shared via Facebook with members of the independent State agency group. This radio news was shared via facebook with members of thenotepad. For registration, tenant, laser, officers to visit these tenants and to put them all by their place, to make sure that they are doing well. After that, we actually, City Council, have made an assessment. They have come to sell the place and sell it to the kids. We have made an announcement and we will let them do it right away. We will visit the FIGs in Wijon 8, except that is in Paris, Besson, and Ozo. Ministry of Agriculture, Honorable Alfred Prospect, promised the tenants to make sure that they find the place and their needs to help improve their cultivation and production. Ministry Prospects, who have engaged the tenants to make sure that they are doing well, and also to find advice, to make sure that they are doing well, and that they are doing well. We want to make sure that we continue to produce FIG quality and FIGs that are in good condition. Because if we have a business for NFTO, DOC, and other companies, the FIGs that are having the FIGs are successful in doing good jobs. So we want to continue to engage the tenants so that we can make sure that they are doing well, and that they are doing well. We want to make sure that we continue to boost the clients. We want to keep the 25% of the clients that make it and we want to make sure that We are in a good condition, we have good quality figs, and I think it is important for you to be a pharmacist, as a minister, as a government, because you have to be committed to the industry, the industry is part of your life, for how long? If you imagine a pharmacist in a situation where you are frustrated, you are frustrated, you are not happy, simply because you have to be committed to the industry. That is why we have to be committed to the industry, as a minister, as a government, to be committed to the industry. Thank you very much. I would like to thank you very much for your invitation. I would also like to thank you very much for the opportunity to be a part of your life. Thank you very much. Thank you very much.


Alright, this is why being exploration into XS and the new keyword API primarily, so I spend some respect for macros and other goodness from the influence. Fun. Next. So, this is my exploration into creating the next generation of QW. What? The next generation of QW. Because every so often, like I do online, and every so often the question comes up, why doesn't QW interpolate? Why can't you stick in QW full dollar bar? Well, this is the answer to this. The code is up on your account, under dark white account. It's not white working yet. But the idea is that we have Q and QQ. The moment and moment operators. And QW. Well, why don't we have a QQW? No other reason. We will after this is finished. The idea being, not to be possible to switch, but to be able to interpolate last and first names into your QW list. Of course, this is redundant. You can always use dollar first, comma dollar last, comma quote, goth, et cetera. And if dollar last contains spaces, it will mean a single entry in that name? If dollar last contains, yes, the QW, or rather, the element of the variable has spaces. If the variable means, sorry, the variable kind of has spaces. But it doesn't remind you. And for those of you that don't know how a deep parse works or how to actually look at what the code does, this is how QW works on, this is how, rather, this is how curl internally gives your spring after it's gone through the first layer of lexing. So the phrase, dollar name equal Q parent, Q parent. Yes, I'm going to translate back into the still books. Likewise, with QQ, the same after curves. See what goes on both sides. If you are not aware, ordinarily, you do need to do one thing to get the output to work correctly. That's past the dash Q flag into the first. So you'll probably reveal the quotes here, which is how curl does this internally. How long do you get this, how long, it looks like the same.  So that's a small, pretty good. And the same thing inside, the same way inside, Q parent acts in like this is more big, bigger, small, so maybe you can increase. That's not the Rx. Right. Because I wish we would leave these, do something else with them. Otherwise since you, I didn't know we would run out of the edge. So I'm sure, it's not quite, not quite one to one recitation there. And I apologize, but just kind of room for the slide. So that's Q and QQ. So looking at QW and QQW, here's how it will work. Here's how QW, right now operates. You need the dash P in order to see the parentheses when you look at your deep parse output. And then the dash Q to see the sealed quotes around the uterus. Otherwise we'll get back what Q has in the flow. Likewise, what I expect to see after using the QQW operator is, I know I'm going to do this with the quotes moved. It's going to be the most acceptable saying as if you were doing normal list manipulations. And it will work with map. It will work with rep. It will work passing into functions. It will work as a LW. It will work as a race slice. There'd be it being two. I just have to evaluate how the QW operator works. Question. Yeah. What are some of the other delimiters, like instead of parentheses? Well, you asked that. In fact, I have a test week coming up that shows how it behaves. Next slide. Again, a little bit of a review here before we get into the really good stuff. And how operating on a race and in the QQ flags needed for the parents and her from today. And this time, the list and list are the same name. Does everyone have a good feel for how it will actually behave? Just for everybody who likes the offices, the QQW operator will work. So this is how it works on the inside. This heavy relies on a very stripped down version of functioned local parameters, which is going to last a year. What functioned local parameters does is, let's see what has part of the subroutine declare a seasonal prototype. So you say some full parent $xcode $y, close parent, it have $x and $y be directly allocated to code. And this uses the keyword API as does this code. The last scene, not a space, should probably include new lines and depths. It does, actually. The actual code does, I eliminate things for code. There are, in fact, there are, in fact, less space couples in between these inputs. So, yes, that's a good catch. The actual source does have these, but I have to eliminate those to fit on what's written. But still, let's still think. So I'm actually working on the code. I have one QQ nuisance, which happens to me all the time, and maybe there's a solution for that. Then you have 10 words, which don't have any spaces, and you use QW, QW nuisance. And then you get an 11th, and that brings it all. And then you rewrite it, maybe in the middle. So if you could put quotes around one in the middle, just to preserve the space, that would be very much. And then there will be QQ, QW. That's going to do QQ slash E, that extra layer is going down. And who's next next? Try that, put it in C. No, it doesn't. I just tried it. Interesting. That's a good point. Okay, so now we're going to do the actual education of this. How does this work? For those of you that aren't familiar too much with the license process, it's more like an event of respiration. You walk most regularly, find the content that you want, and there's work happening. Which is what this code here does. We assume that the code has already, that the code has already eaten up the QQW. And we do some magic, which we'll talk about later on, to find three of these start rates. So this is all eaten up, already back to rule, consumed by that as part of the callback feature. The function called the keyword API callback essentially impasses a keyword such as QQW in our case. Or fun, or in the case of first breakers. And the QQW API will work like you were in the spring. And at that point, it will jump out into your code. And let you handle all other parts of it. And let's see. And then when you're done with that, you return the spring work, sorry. You return the work. To go along with your code, return to its processing. So to reiterate, we've already gone through the QQW keyword. And code previous to this has parsed out the open brain and parsed out that white space. As mentioned.  Where we start our own parsing. The first thing to note is that internally, characters, obviously, we are now in the Unicode world, thankfully. And internally, Unicode letters are of course great work. Thanks to, say, Chinese, and Japanese, and Moe, and Thai. With their tenth of thousands of books. So we have to represent those as 32-bit entries. And that is one of the type I32 key differences. I32 or the integer for each of its. And then C, shorthand for character. Fortunes such as Lexpeak integer and SVCAP could be in these all-curl intervals. All part of the back-hole layer. So we're sitting out into a C-curl. So we have left-curl at high and now sitting into the C-curl. The zero here lets us peak to the next character. Because one thing that you cannot do is you cannot push characters back on the center. IE. Once you have read past the F, you cannot tell the whole to go backwards. Well, it may be L2, but I haven't found the IE yet. And I haven't had VTS yet. So the answer is instead of reading head, then it's going away. The answer is to peak one character head. Or two characters head. In the case of zero, one. So repeat, turn them into the screen. And then the slide. Two, we can't look, we're not here. So that's how we get around some of the positive issues of having to retain a stack. First, if we peak down to, if we read down too far and can't go back. So you have to maintain a stack and you have to maintain any internal state. So now we are trying. So at this point we are at the first and high scan until the end of the week. What you cannot see as code is we have already found this opening parent. And through, and RC code says that for opening parents, the match of the limiter will be a closing parent. This handles some of the annoying, some of the not annoying. It's quite interesting in cases that you run into with QQ and Q and simple. And yes, my test suite does handle those cases. So we search for either the end of the screen, which is the last one. Or the end of the limiter. I'm sorry. I haven't read this for a while. If we do not have our end of the limiter, and no, this is not a handle on nest of limiter that's coming up.  Then we take them, then we start by, then we read our F. And then attach the, then attach F, which is, here I'm going to speak to F. On to an existing, on an existing scale of value. So we're building up a scale of value of the screen, screen F. And then next pass we keep getting in at the screen to move to the next stage. And pass to the loop until we get to a white space. At which point we leave a loop. And the test suite here, I can't tell if I lose people yet or not. That's my hope. So now, part of the front part of this is taking the test suite that we have built up into the right. And adding those, adding those to the, to the offering. Which, if you're not, I can't believe with current internals. And I'm not. I just managed to have run a total of works. The outrageous free is a, is a, sorry, is a base worker that probably used internally. What's happening within the company. It's a different workstation. And it's how it internally compiles. So what we have to do is instead of giving, instead of giving it a. The liberal text gives you the, we have to turn that into a program. As an opportunity. And there are some issues with this. There's actually one issue with the cameras, but I'll take care of that later on. Don't know if you have time. Why do you make a copy of the SD instead of pushing the SD and creating a new SD for the next one? I think I do that right. I think the code does that. I've been, what is on GitHub is playing the sense of late. And this is an over copy. I may have done that. I find out that there is a push SP. I think what I did was start out with creating an SP and then pushing on to the SP, creating the SD list off and then pushing on to the SD list off. Leader who got this piece. Give them a sense. Both is possible. Possible. Okay. So my part may not be something. Minor nitpick. This is probably okay in the code, but you're breaking your TFA to there. You're not passing the proper flag. Okay. Because you're passing just the content of the scalar, but you're not passing whether it's smart, the CFA or not. That's why I asked. The scalar won't be upstack. Wait. Easy. I follow it. Okay. Might as we had the example code. All right. I don't. The test we doesn't get it covers UTFV. You know, I read that public when I do. And at that point, I'm missing that. So your word rates to care of. Let's see right at the end. Yeah. We'll be the SVP class. Yeah. I knew it was something. Actually, this is why I come in promises to give people for that. You can find your books. Absolutely. Thank you. Right. That's why did that and then later on call me. So does that make more sense? Recreate and then again later on as well. So of course. But since I have people that know more about this, why do they leave? I can't even work. I do. Okay. Two way of this that we free. Of the break. Also got first and last. We're trying to get the purpose, the way we're spreading last onto the end of the SVP. The list to. Pass this off three back to. We don't get it to first. And like, zero. Problems with. Which the shame is when they talk to me. Oops. Let's. Right. Right. That's why the word is necessary because if I can't. That makes sense. And I don't have a fancy diagram for this, but this essentially taking. Our original. The original operation, which we have here. And packing on to the end of that as a. Classic. List of people. We have the first SVP. We have the first SV over here that we created. Representing the first. The word first, you know, this. And down. This. And pass through here. We have the next. SVP on top. On to the end of that. Moving on like, moving on myself. See more again. This. Right. Right. I can't make super team calls. No. There. Oh. Actually. Again. I'm. Again. We. I. Also. What to do with the. I. Once. I. Do it. So we don't have to be. We just don't know. We just don't know. We just don't know. We just don't know. How we're gonna do. That. That. That. All of the ideas. All of the ideas. So. You know, it's very pretty. By any means, this is actually a mental slide, just to have you here. Again, we'll write you here, here, to this slide, where you put the end of the video. That's great. There's text beyond the beginning slide here. But this is like a $40 sign. And I have, I believe I take care of this slide, to get help. Again, this is the code's a little bit outdated. But this is how, the only way that I found, at least we can get the current code source, how it does the actual scalar variable that's supposed to be a scalar screen, or a, or a S line. I have, I think right now, the code does something just with $1 sign, because I haven't yet to the slide, how, I mean, it deals with the S line, in terms of the internals. Because I really can't think, I really can't think of a use case for wanting to add, in turn, wait, a percent hash variable. But I'm sure some of you are, yeah, so, by leaving that out, I'm sure someone will come up with it, with the general values for that. So I think what I will do, I think I will let someone else come up with a use case, and then fill that back in when I have the rest of them. And here also is the read space. It's not just waiting for a single space, which also was a bug in the slide, because it shouldn't work for, because the test should be not for white space, but for actual white space, as it has new lines in white space. And not great white space, and new kind of white space, and thin white space, and if I get that near the last space, if I get that far? White space, yeah, but what? Only, only two eighths plus white space. Yeah, all those white space. So are you supposed to do that? No. Yeah, all those one was higher than round one. FFT is zero. Okay, that way. It's embarrassing to actually build a code point. But for those of you that were wondering about the difference, here are the cases that I held right now. The CQW bang bang, these two paths, open race, close race, close race, close parent, close parent. While you're doing cases. This is not quite done, but we'll be after that person. This fun one, it actually works with the CQW, you have to say CQW space, W, W, if we'll use W as the new case. Yeah, if you use the space and any character, the next character is a little mature. Yeah. So it had no nulls, QQW and null character.  Because that works with QQ. No, no, no, no, no, no, no, no, no, no, no, no, no. You're co-working yourself. Yeah, what do you want to do with that? You have to have a new line. Oh, yeah, ooh, nasty. What I do want to do with that, in keeping with my best part on Unicode list, I do want to add the ability to use Guillemot, the French devil now. Add that, and in the interest of completeness, what's the rest of the Unicode character set? At least for Unicode 5. I find those balance characters use those as well, just for completeness. Yeah, fine. I thought we should talk later. Yeah. Yeah, especially back then. Yeah, it's not a point. It's not a point. At the right place, the gentleman needs left hand and right hand, what the question works. At the right place, those. Right pointy finger, that's pointy finger. Thank you. Here we go. Thank you. For Unicode middle finger. So, but here at least. Yes, now Unicode 6. I do want that, you do too. Ooh. Yeah, true. But here at least regularly, that you don't have backwards compatibility, so you have your future backwards compatibility problem. Good point. Yes, I can think very well that you can percent w. I'm sorry, percent w, they can use to determine at the front just versions or I'm asking you, I'm asking you a percentage of our picture. I know one of those was just a four days and check for versions, but I wouldn't have future Unicode sprays. Yeah, right, a long time because I don't have people brought up right first, I think you're in silence to tell. It also handles these one piece. One, it's a baseball wide arm sport because that's what your new character. I go through the entire, I go through the entire ASCII regime, we set the course of joint and control characters to make sure those work in the test weeks. And you can use any wide space that you like inside there and just to make sure that it works inside a joint operator for proper turns, like proper turns for the white ball three. The test week also runs joint on that playlist. I'm sure there are many other ways to pick this. I like to come up with options and some of the more fun alternatives later on because I have yet to do an escapee. And yes, stop, that's a calendar by the way. Give us handle tabs or rather well, I think I have a code. So have and then nine for the winner and decide their escapee nine. How long do you see the other side, else I work for you? You can also make the test case more fun to read by using code for it in the right part. Oh, I have one test case that I wrote that's using QQW space, QQ, Q slide, Q backslash Q, backslash QQ. Now, inside the square brackets on the right. Oh, can you hear it? No, on the right, on the right, it is deeply. No, down, down, down, down, down, down, down, down. There, you're out of words, you said of codes. Mm, good point. Just to make it more fun.  I don't know, my chair is in the right side. No, it's from the internal, that's so, yeah. Yeah, well, as long as there's, if there's a code, then the test case. Yeah, yeah. It has come through a little bit. Yeah, but what they, in doing this, I found the one test case that will probably make me a rewrite, I think you'll see probably a separate space. Now that is QQW code. The way the keyword parser works, if you have QQW colon, colon, i.e., colon, in all-string, colon, the keyword parser thinks that this is a pack instead of the QQW operator. So I need to use apparently the 5, 14. There's an advanced version of this in five, that's the evil one, because in that case, the quote should mean the same as the double colon. Right. Right, and if you say QQW colon, then the keyword parser is not covered that correctly. In terms of as a package data called by a colon. But, because I expect it has same behavior on QQW, sorry, on QQW put, because of the data package that we have, but it doesn't use the same thing. And I think it's gonna find what to give me a step and it will be what give this three back to QQ, and that's just how these go. I am amazed by what we're so trying to do. If we have questions and concerns, this is all my GitHub under the name Dart4DRFORR on the tag. And this gives there was a lot, so I think I'll take questions. I'm trying to load the code on GitHub, but in the meanwhile, you say the keyword API. Which one? Which one? Yeah. Whatever is used by functional code parameters. What I did with the code, and this may help on a normal level, is I took the original code, we're giving these sortings, that double over rows for doing these subs and stripped out everything I could find that wasn't directly related to the keyword. What you might find useful is a double call parser on Cepen, which is likely what's going to be in 5.22. Right. And it's working all the way back to 5.8, and it's so much easier to use than this. My name. Very, very useful. You know, I have plenty of time here, so if anyone wants to, if anyone wants to take a break from the talk that's cool.


Here is a secret spot to Shawnee Hunt's pseudo-legendary Pokemon in Scarlet and Violet. Open up your map and head over to East Province Area 3 Watchtower. Once you are there, face north and run straight down this path until you enter the cave. Once you are in the cave, continue going straight to where the Pokemon trainer is.  If you are in Pokemon Scarlet, make a Rock Encounter Sandwich, and if you are in Pokemon Violet, make a Dragon Encounter Sandwich. Scarlet players will see tons of Larvets are coming out the wall, and Violet players will see tons of Bagon coming out the wall. You can auto battle them or reset them with the picnic until you get a shiny pseudo-legendary. Hit that subscribe button if you want more secret spots like this.


Hello, Freedom Family. I'm going to tell you about Freedom Reaching a Year of Age as well as a brand-new annual event hosted by us here on the forums. All this and more on today's episode. Who am I? I'm Andrew, also known as Superman or Ken on the forums. On December 1st, 2013, George, the founder and CEO of the Freedom Family, created an amazing network which you are all luckily able to be a part of. So from me and the forum team, George, thank you for this opportunity of this great MCN and all that you do for us partners. However, that's not the only thing that happened in December. On December 19th, 2013, our forums were created and launched, which let me personally as well as many others and staff get the opportunity to really interact and get to know the community. So we have a brand-new annual event for all Freedom Partners and partners of subnetworks to attend. The first annual Freedom Forum formal. It's an opportunity to reflect on the year, dress up, bring your date if you even want to, and just get an opportunity to meet more people in the Freedom Family. I'll have a link in the description below on where you can get more information on the Freedom Forum formal. Now, this will be your opportunity as a partner to get on the Hub channel. We will take the best photos, best stories you type, and encompass them on the Hub channel to show why Freedom is a great network, as well as give back to all of you who help make the Freedom Family amazing. So if you'd like to partake in that, link will be in the description as well as I'll probably leave a comment with the link there. Let us know. Do you want to see more forum videos? If so, we can talk about many updates that will be coming to the forum, Freedom, and things like that. Hey, we might even have a new chat system that is in development. That's going to be all the time we have for today. Let us know. Will you be attending the Freedom Forum formal? We're really curious to what you have to say, but I've been Andrew. And if you want to see more of what I do, you can click the link on screen now to check out my own personal channel, or you can go in the description to find the way to contact me via the forums. Thank you all so much for watching, and I hope you have a great day. If you want to make more money from your channel, click Get More Music to learn where to get more music to spice up your videos. Click the first playlist to watch The George Show on Freedom. That's my show. Or watch The Anthony Show or The Alex Show also on Freedom.


I'm currently reading the fountain and I noticed that Dominique in the beginning was nihilistic and aimless. But when she met Rourke, she seemed to find meaning in life. Why do you think that is?  I mean, I think Eyn Rand said Dominique is her Eyn Rand in a bad mood, right? Dominique is a real value. She's not a nihilist at all. She's not a nihilist at all. She's a real value. She appreciates beauty. She appreciates achievement. She appreciates greatness. She admires it deeply. It evokes profound emotion in her. But she also believes we live in a world that doesn't deserve the achievement, the beauty and the greatness. See even though she might feel this way, she believes she lives in a world in which other people don't deserve to be exposed to this greatness.  She would rather be the destroyer rather than them because they are not worthy. The rest of the world other than her. And when she meets Rourke, she discovers initially another example of greatness. And then as that, and I don't know how much to say because you're just reading the fountain head, but at the core she discovers that she doesn't have to care about what other people think. She doesn't have to care and she shouldn't care about the culture's attitude towards greatness. That's what fundamentally Rourke shows her and teaches her. Not by lecturing to her, but by living again, by living a life that projects not caring about the judgment of the world, but caring only about his own judgment, caring about only about the achievement, the beautiful, the success. He teaches that the greatness is achievable, sustainable, winnable, and that what the rest of the world thinks doesn't matter. And it takes a whole novel for her to learn that and you'll see. And it's in every dimension, every dimension from art to architecture to character to sex. Every dimension is covered her attitude, but I wouldn't call her a nihilist. She is destroying, but she's not destroying for the sake of destruction. She's destroying so that the people unworthy of the greatness won't get to destroy it themselves. So she will beat them to it. She will take it out of their grasp and she will destroy it in her way.  I mean, what does, what does Tui want? He wants a world of mediocracies.  What she's trying to do is save the world from Tui by destroying great achievement, by taking it out of his realm. She learns that that's the wrong approach. And Rourke teaches of that, Rourke teaches that by just being Rourke, by being this great sold man. If you haven't read The Found Head, in many respects, it's, you know, it's her best book. I mean, my favorite book is Apple Shod, but in many respects I understand why. For many, many people, their favorite book is The Fountain Hood. The way that she thinks about ethics or morality and what the subject is. And in a sense, you could say what its basic question is. So this is part way through art and moral treason. And she's talking about a person's, the development of a moral sense of life, which is connected to a development of understanding morality. And she writes, and that in today's culture, this is rarely aided. That is, for a person who is on a path to trying to develop a moral sense of life and a real firsthand grasp of morality. She's rarely helped in regard to that and usually hindered. A paragraph and a half. But the development of a child's normative abstractions is not merely left unaided. It is all but stifled and destroyed. The child whose value and capacity survives the moral barbarism of his upbringing has to find his own way to preserve and develop his sense of values. Apart from its many other evils, conventional morality is not concerned with the formation of a child's character. It does not teach or show him what kind of man he ought to be and why. And what kind of man he ought to be is all italicized and why. It is concerned only with imposing a set of rules upon him. Concrete, arbitrary, contradictory, and more often than not incomprehensible rules, which are mainly prohibitions and duties.  Faces the alternative of either a passively amoral resignation leading to a future of hopeless cynicism or a blind rebellion. Observe that the more intelligent and independent a child, the more unruly he is in regard to such commands. And I'll stop there. So two things, I mean, I highlighted one, which she highlights, as I said, she puts it in italics, what kind of man he ought to be. And the sentence before that, the formation of a child's character, that's the subject of morality for Iron Man. It is about the development of your character or of identifying and then moving towards the kind of man you think you ought to be or the kind of individual that you think you ought to be. But the goal is a total and a sum. It's, this is what I want to be, not a sum discrete choice. There's a trolley going 60 miles an hour and it's going to run into five people and do you throw the lever or not? And that's what morality is about. That is such a derivative, to the extent that it is a moral issue, it is such a derivative issue from Iron Man's perspective. And I think from her thinking about what is morality, it is about you can lead different kinds of lives. What life are you going to lead and what? And that's an abstract perspective. And part of what she's stressing in art and moral treason is there's a development to gain this abstract perspective on yourself and yourself in the world. And that a child is trying to get to this level of abstraction, particularly a child who starts to be concerned with this kind of issue. But it's the norm, not the exception, I think, that when you ask a young child, what do you want to be in life? And it's, I want to be a policeman or I want to be a fireman or I want to be some other, I mean, it might be, as Iron Man brings up, a comic book figure that he admires or something like that. It's, this is what I want to be and this is the person that I want to be. Not, this is the choice that I hope I make when a trolley is rolling down the trains. And what really forming the issues, questions and sort of abstract perspective that morality is about is learning to see and to isolate that there are different kinds of lives. And your choice in life really is, which of these are you going to lead? And so to think of this as a specification of her perspective on philosophy, it's an aspect of her view, I think, that what philosophy is, is a set of ideas that have an integration and there are wide abstract ideas that frame life, including the thinking about life and the reality that I'm in and how do I cope with it? But there's a kind of interconnectedness to this. Even for the person who's not philosophical and I think I brought up her, the metaphor she uses of a kind of mongrel philosophy, that there's some kind of threads and interconnections, even though it's certainly not consistent threads and interconnections and there can be conflicts among the total. And the perspective on morality is particularly in regard to a person's character and putting it in the philosophy who needs it terms, the what should I do? But part of the what should I do is, and the crucial part is what should I become? And that's the issue of character and of the issue of premises and how premises shape a whole perspective on life.


So thank you everybody for coming I'm quite impressed this talk has gathered such a crowd on an afternoon after lunch of the last day so I hope I won't be too boring with you I understand you've had you've just had lunch maybe I hope that you had coffee to keep yourselves awake like I said I'm quite impressed the number of people who have showed up I remember pitching this talk to a colleague of mine at Intel and he's a kernel developer Linux kernel develops and no I'm not gonna accept you I don't want to see anything about C++ I even spoke to Linus once about C++ and I don't know if you've ever talked to Linus about C++ he's got quite an opinion about it so some of the things I'm gonna show are my phone just put it here my so nobody ever calls me I never receive any text and apparently this is the first time that happens I was saying Linus has quite an opinion of C++ he considers many of the things I'm gonna show as misfeatures I consider them as features so let me briefly introduce myself I'm Tiago Maciera that is me working with high technology back in 1982 I've been involved with open source development for well over 15 years I'm gonna say exactly how much most of that time has been actually working with C++ so if any of you were on my talk yesterday when I was talking about IPv6 I started my career in open source by working with IPv6 I was asked what do you want to work on I decided I want to make a browser capable of IPv6 and Mozilla at the time already had support for IPv6 I started with the KDE's browser and if you're familiar with KDE you know it's written in C++ so that's how I actually ended up working with C++ before then I had access I had submitted a patch to Linus Kernel I had made a couple of modifications working with Pascal with Clipper but it wasn't until I started actually doing C++ that I got into my professional career and both C++ and IPv6 actually landed my first job in open source when I went to work for Chaltec and now I work for Intel as a consequence as evolution of whatever I was doing back then so my job today is to say and convince you that C++ for embedded is possible and it's even a good idea let's quickly let me just take a quick survey of the audience here how many of you program for embedded systems okay I should have asked the other way around and since we're in embedded Linus conference that was to be expected quite dumb of me how many of you do that with C++ you guys can leave I will be reinforcing that idea to you and hopefully I will be giving you more arguments whenever you come to a colleague or a product manager or somebody else who says no no no C++ is too big is isn't there work for embedded for those of you who don't what's your main language of development see right anybody working with PHP okay one yeah so the interesting thing is that I'm working with IOT these days and I see a lot of people doing Node.js or JavaScript I had a colleague presenting earlier this morning about using JavaScript with Node.js style API to program a microcontroller so working on Zephyr I'm not gonna pass judgment I think that if we follow the engineer's motto here which is the right tool for the right job what I'm trying to show you is C++ is a good tool and we'll do a good job so I divided my presentation into three sections first I'm gonna convince you that C++ is not bad that it actually does work for what we want to do in embedded then I'm gonna show some reasons why it's actually better than the competition that we see and then I want to finish with some of the things that are exclusive to C++ I don't have slides for all the things I'm gonna say at the end I'm just gonna start rambling about some of the things we started to think about in C++ and I'm here to help it to answer questions so feel free to raise your hand if you do not understand me I understand most of you are not native English speakers neither am I so feel free to stop me and ask me something so as I said the question we are trying to answer is which is the best language for embedded programming I already gave you a hint of what the answer is and it I'm not gonna say it C++ the best language is the language you're most comfortable with I want you to do a good job in developing systems and especially when we're talking about embedded programming and we're talking now about the embedded programming connected to the internet also known as IoT you need to be doing a good job these devices need to be updated need to be securely written and need to do their jobs without blowing up every five days because they just use too much memory so the correct answer is use the language that most you know most that you are most comfortable with and serves your job so PHP might not work on an embedded system maybe Java won't work because it is the VM takes too much and garbage collection is not gonna help you but one that might is go so you see the little gopher on the top there it is actually a compiled language right I don't know too much about it but I keep hearing from colleagues who do that this is an awesome language and more than that we're here at the embedded Linux conference go because of the way it is developed enforces basically that everything has to be open source but anyway I digress Python and Ruby are good options as well even though they are interpreted languages they can be byte compiled they have a garbage collection which may not work for everybody the normal options for we have our CNC plus plus again that's what I'm gonna be looking into let's start with a couple of facts or myths C plus plus is more complex than see facts or myth it's a fact so it's actually a fact because yes the standard is bigger I'm gonna take a parenthesis here and talk about what the languages are so both C and C plus plus are developed as part of the international standards group ISO but organization ISO they are both standards in that organization and if you want to read the specification you usually go to your national body and you download you buy the specification comes in a book they are quite big this text is very dense it's meant to describe an abstract virtual machine that would redo something point is the C plus plus standard is longer and it is complex because it does more stuff that doesn't mean the language is more difficult another one C plus plus language generates more code and or requires more RAM myth that is that indeed a myth it does the language is designed around you don't pay for what you don't use right and even some of the language features can be turned off with certain compiler switches so we're gonna talk about exceptions later for the moment if you just want to not pay for the cost of exceptions your writing code that doesn't use exceptions there's a switch that you can pass to your compiler will turn them off and you don't pay for the cost of it so which options those are so if you're not using exceptions for example GCC you're gonna use f no exceptions and this other option that I actually hadn't thought of until I was actually writing the code to figure out the difference in size the asynchronous unwind tables and that's interesting because that applies to C as well I was trying to compare the size of a buy of a certain function you're gonna see later in the presentation between using exceptions and using manual error error detection and error handling in C and it turns out that the C compiler GCC was producing the equivalent information for unwind that is how do you throw an exception through that function which would have meant that if you did that C code would be unsafe because it did not properly handle the case of the exception going through the propagation so if you want to use C++ without exceptions those two options if you in addition to not using exceptions you're neither using type ID or dynamic casting there's an extra option you can use called f no RTTI which stands for runtime type information that turns off the runtime type information most of the time if you're writing compact C++ code you're not gonna you're gonna see any difference that one appears when you are besides these two operators when you have polymorphic classes with virtual functions so the moment that you have a virtual function the compiler will emit the runtime type information for that particular class so you can save a couple of bytes by not having it it's gonna be about 20 30 bytes per class and if you're not using the standard library and that's gonna be a big problem for us to discuss you can actually disable the use of the standard library now you can turn completely off because the compiler will still do a couple of things that are required so some of the things that the GCC and G++ and Clang do and any other GCC plus plus compiler do is they call out to a couple of methods or you use a couple of symbols from the C++ language support right both GCC and Clang's libraries I'm gonna see later have sub libraries that contains those symbols so you can use only those and if you install on a regular and this is in distribution those actually come as a static library so you can easily compile a C++ application that uses nothing more than the C library another myth would be the the C++ language hides things from the compiler and I realized that I did not hide everything in my slide so you know this is supposed to be what the hell is the rest of that was not supposed to happen so this is what happens when you don't so you I reviewed all my slides but I never ran them through in presentation mode so the animations I never looked into them so it's a myth you you can hide stuff yes but no more than you can do with macros in C in fact I would way I would say that the extensiveness of macros because you can't do many things in C so because there are certain things you cannot do in C that you can C++ the use of macros in C++ is smaller in term that means the the converse means that you're using macros a lot more in C and that has sometimes a very very unexpected effect so my rule of thumb whenever you and this is for you if you're compiling code and you see a narrow from the compiler that makes absolutely no sense because it has nothing to do with the code that you're looking at look at the preprocessor output it's very often that somebody defined a macro to one of the words that you use in that line and then the compiler thinks that where you wrote interface and this happens often I have a lot of code in D bus that uses the word interface that that word should not appear there it's not a valid variable name of course not because windows.h defines it to be struct so you cannot define something like that so be careful we had cases of maybe give you another example you're writing an application that defines int sun and moon can anybody tell me which operating system that will not compile on I'm gonna give you a hint one of the companies is named after that so no didn't longer exist independently but on Solaris made by Sun Microsystems Sun is defined to one trust me when I compile the code was a same example 10 years ago like why doesn't this call I compile on everybody else and then it didn't compile on the Solaris compiler starts to blame the compiler until I figure that one out so anyway I digress the next question and let's see if the animation works using templates is more expensive so I'm the answer here I'm gonna hedge my bets and I get an animation didn't work it's yes and no so templates by themselves do not imply that you're using more code or more RAM that's a myth it does use more increases the compilation time because the compiler has to do more things and thus uses increases the memory use a job of the compiler but by itself they do not cause more code or more RAM to be used however because of the way people currently use templates and the fact that we're trying to produce more optimal code by eliminating function calls eliminating out of line all of this ends up as inline code it does end up increasing the code size it's not a requirement for templates for that to happen but it does happen the way that templates are usually used so both yes and no and the last one and animations again I'm just gonna skip the animation so C plus plus compilers are not as good as C compilers that's a myth so if you're using any of the major C compilers today they are C plus plus compilers are equivalently good so both client GCC Microsoft Visual Studio compiler the one from Intel the company I work on they are just as good in C and C plus plus in Microsoft's case the C plus plus part is even better because they do follow the C plus plus standard they do not follow the C standard so for example they only brought C 99 support to their compiler when C plus plus started requiring it however they're not as widely supported on embedded platform that's why I'm here so for example I was talking to Anna's Nashiv from the lead architect in in Zephyr and said yeah we don't support C plus plus nobody has wanted it to do it but if you want to give it a try take a look and I'll probably be doing that just as I mentioned compilers and standard and this will give you a picture of what I said before about the libraries so on as a regular Linux system you're going to see either of these two compilers GCC or Clang they're more or less equivalently good in jaco generation in micro benchmarking I can tell you GCC still generates better code than Clang whether that's going to remain for long or not we don't know GCC also does have a couple more aggressive optimizations so we had a problem in Qt recently related to the dead store elimination I will not get into the details of it it's just a new switch they added into GCC six and we could not see what was wrong in our code it took somewhat while to identify that yes we were violating some of the requirements of the C plus plus language and therefore the compiler was right to eliminate some of the code that we did so both Clang and GCC are equivalently good GCC comes with its own standard C plus plus library and they're not very imaginative with the name it's called lib standard C plus plus Clang because lib standard C plus plus was taken just called the lib C plus plus it's an LLVM library the main difference you're going to see in these two is the license so the GCC one like GCC itself is licensed GPL version 3 with the runtime exception whereas the LLVM code is more often licensed BSD so on many of embedded systems because of the provisions of the GPL for example you might prefer to use a BSD I'm not a lawyer so this is not a legal recommendation it's something that you and your legal team need to come in look into Clang has been designed to work with both libraries so it actually does work with both just fine and I've seen many Linux distributions that default clang to use lib C plus plus and my answer is don't do that don't try to make that choice on behalf of the user if the user wants to there's a switch that you can pass to the client command line that will switch it from one to the other but you should default to using what everybody else is using on your system which is lib C standard C plus plus in theory GCC should work with lib C plus plus I have actually never tested it it's something that I should should be looking into soon because of the what I said about Zephyr inside those two libraries like I said they're sub libraries that support the language itself and do not provide the rest of the standard library definition and those would be libs support C plus plus and lib C plus plus ABI if you take for example on Mac OS what Apple has done is that most of the applications today are linked to lib C plus plus and what they've done is that they've replaced lib C loops lib sub C plus plus they taken it out and they've made lib C plus plus ABI a separate shared object so both libraries link to the same same core as a result you can actually run and blowed run applications that link to both libraries at the same time they're compatible among themselves now you can't actually pass structures that you find in one to the other so for example standard string you're not going to be able to pass across the two libraries but exceptions are going to work you're going to be able to call new on one and delete on the other and that just works just fine and that's also because all of this ABI has been defined previous it was actually defined during the itanium processor apparently some people at Intel had too much time on their hands and they decided to do a C plus plus ABI that was published today it's still known as the IA64 C plus plus ABI but it applies to almost all of the processors you see today they depend the made the normal libraries depend on lib C so if you're going to look at embedded systems you're going to have to choose your lib C if you're going to microcontroller systems that gets interesting because you don't have a lib C with a C API and a posix API and more importantly you don't have a P thread one so many of the things that exist in the current standard C plus plus 11 14 17 you might not be able to use on very tiny embedded systems but if you're looking at Linux this is just how it works any questions so far okay so let's look into why I think C plus plus is good let's start with something that bit me when I was working on so I'm the maintainer of a C library called tiny seabor it's meant to run on Zephyr I wrote in C because well I just didn't want to have the fight back then so I just wrote it in C it was that simple anyway and just as I was starting with the project I had not configured my compiler with any special switches the following code like this compiles and you can see that in C it prints a warning it doesn't cause an error and C plus plus is an error and if you're compiling like you you just starting you compile the seek this file over there and then working on something else you never realized that this went through with just a warning why is that bad let's suppose that G is a function that takes in 64 this function here past a 32-bit parameter so G did not take a minus one it took you into max so I've seen many code bases in C where they actually have a couple of W error so they turn a few warnings into error missing prototypes is one of them right so if you're working in C you probably want to make W error equals implicit function declaration never allow your C code to compile like this in C plus plus it's not required because it is sorry it's not required to make this an error because it is already an error the language requires that it is that it be defined before there's another reason for that it's because C++ supports overloads so it needs to know which of these functions to call the ability to call without a prototype is legacy in C it actually is inherited from B the language that came before C so if you didn't know your history yes before C came be in B you only declared you did not declare parameters so that's why in C you just have the parenthesis you never have anything inside everything was simply word sized so that would have worked here they didn't have the problem 64 bit but that said we say yeah that's that's just legacy from B this one I find inexcusable so in C casting across different pointer types only triggers a warning like in C++ that's an error so the example here is what happens if I pass a short pointer to an int pointer in a function the C compiler warns but does not stop so this is another one that you might want if you're using C to make an error of in C++ it's an error I simply cannot tell you why this in C is not an error I just can't think of any reason why anybody would want to implicitly cast from a short pointer to int pointer this the one below is the dropping of const that one has more of a reason because the original C language did not have const so it's a bolted on keyword it appeared shortly before C++ was invented of C++ actually came with with const yeah I mean at least is the right type but if I drop the const I might be writing to memory I shouldn't be writing and if this is pointing to read only memory my application will crash so these are really weird for me working from C plus from C++ to accept that they are correct in C in other in it putting it the other way around if you program in in C++ your code is safer because you will not commit to these errors the compiler will simply not let you the next one according to Linus is a feature void pointers so you are allowed in C to cast from void into any other pointer without a cast the common the most common use of this is in short car pointer something equals maloc you do this very often in C now what happens is that maloc returns void pointer which gets automatically cast to car pointer in C++ that is not allowed and here's why so I have now instead of two I have three functions if you look at the bottom most one it's the short pointer again so I'm calling from F I'm calling G and that is okay it casts to void so my short pointer gets to void star but the G function takes that void void star and casts to int star without checking so I can't stop you from casting casting has a place it has a use but let's be sure that you do the right thing in C++ this would have been caught and would have made you think oh which one was this supposed to be do I really by the way do I really want to do a void star API you if you can't don't you would use templates here but in C++ it is a narrow and see it's neither narrow not even a warning so since we talked about casting I'm just gonna plug in this trick to type safety introduces the cast operators here for no other reason that they're easier to grab for so if you need to figure out if you're doing anything wrong if you need to do an audit of your code to make sure that you're casting right things to the right things right you do a grab for static cast all of these it's much easier to find these words which cannot be used in variable names they cannot be pre-purposed than to find to write a regular expression that does casting of types in C I would actually say it's impossible to write one the other advantage of having them is that you can't accidentally do more than what you intended so if you're using const cast the only thing you can do is drop the CV qualifiers CV qualifiers const and volatile yes but if you're doing a static cast you're not allowed to drop the const so you can do a couple of things with static cast but not cross barriers that unrelated types and you cannot drop the const cast so yes and sometimes you see longer code in C that does a const cast to something intermediate and then does static cast to the destination yes it's long-winded but I'm explicitly saying what I'm trying to do I cannot by mistake lose the const I had the code base in in cute that was using old-style casts and where C++ we call C cast old-style casts that's actually the the GCC warning for it is W old cast if you do that you try to compile I was trying to remove them it turns out that the code base because it was it had been refactored so many times along the way it simply could not be done it simply could not get const safety everywhere and get rid of those annoying C casts some functions were supposed to modify called functions that weren't and then called back into things that were anyway from the beginning use them the next topic is just organize your code into classes so I searched for this is gglib code you can see it's actually from gio it's a gd bus function I was just searching for an example of something short that called a couple of functions inside as you can see this code I hope that everybody in the back and see it by the way the presentation will be available online later so you can look into the code what it does is that it does string new which allocates something I have no idea why it needs a null that's my opinion on cp and on a B API design why does it need a null there then calls string append string append C while it's a string why do I need to repeat myself that it is a string so the equivalent code that I just wrote for this with with the cute classes with cubite array it just calls append now if you're paying attention there are two things different in the C++ code from the C one is more or less evident something's missing on the C plus plus code the free we're gonna get that into later the other one is not as evident and this is something that people actually do complain in C++ because they're saying you're hiding stuff can anybody see what is different between the two what I could be hiding so the answer is look at the third append right it is equivalent to an append C I actually looked into the what what this was supposed to be in in in Jolib it's happening a simple character right so it is the same append function and the reason for that is that we're using overloads in C++ in my opinion it which is not shared by many of the C code is it is actually better to have the overloads here because they do the right thing and I don't have to worry which of these functions are it behaves the same way so if I were to change my arguments I wouldn't have to change the function in fact if this were a Q string instead of cubite array the code probably would compile anyway and just do the right thing with a Q string instead of a cubite array even though it doesn't operate on characters but on Q car which are unit code right so since we're talking about overloads unimproved functionality in C++ are overloads so I just copy this from both the C and the C++ standards on the right you can see the C standard from section 712 7 2 so all of chapter 7 in the C standard is the library on the C++ standard since the library so much bigger it is many many chapters chapter 26 if I'm not mistaken is the numeric support yeah so it's just showing what we can do with overloads on the right side we have f abs so floating point absolutes and you have to call f abs f if I want a float based floating point absolute in C++ you have f abs float f abs double and f abs long double you might say well why do I care I'll just call f abs on C why does it matter that it did I have an overload have you ever done floating point emulated in CPU many of you have and working with doubles is more expensive so if I can operate on maybe not this case of f abs that's actually an easy one just flip one bit but on many operations of using float speeds up the code base so you want to use if your code is only floats you want to keep with floats you don't want to accidentally use double and increase your your runtime because you have to do more precision in C++ we have just call f abs it will call the right one and it even has an abs one which works as integers that allows us to do generic programming now if you ask me when I'm working with C the thing that I miss the most the one thing I would give my castle for if I could just use in C are exactly destructors so I copied this from the front here slightly smaller I was just searching the Linux kernel because glib does not do memory it does not check that Maloc succeeded not not going to that so I'll search into the kernel of an example of Maloc failing came a lock failing and it actually did a couple more things after that right so it's not actually easy so that's a good plus for the kernel they try to avoid doing complex things in functions to avoid exactly this particular problem I know one particular function that is much worse than this it is the one that is called whenever new process starts it needs to locate a ton of different things so it has a at least 10 different go to this is a simple one it has to go to so if you're programming in C very often you will write code like this go to isn't so bad after all and I'm not passing judgment go to actually serve as a purpose that one is pretty good so what you see here is you do a camelock and if it failed I'm going to return you know ma'am I could have just written here they just use the same one below it does amount mutex lock a spin lock does some work inside and in the middle of a get a loop that happens inside the path variable might be initialized to false which indicates to know which indicates a problem and in that case it needs to return on their name too long and if that's the case I need to unlock what I had locked and free the memory the working buffer so you have to pair the code like this and if you have more things that might fail in between you have to do more of these so the thing I missed the most in C is resource acquisition is initialization somebody said right that's the full expansion so I invented here some function so I a class called pointer holder specifically for the kernel that would do the same thing and then look at I'd actually have mutex locker not mutex lock and spin locker not spin lock so I created two extra variables on the stack here automatic variables and as you can see from the rest of the modification that I've done I don't need to remember to unlock them I don't need to remember to free the buffer why is that because the destructors will run right and the destructors will do it for me which could be called hiding it is definitely handy because I don't see it here but in could be code bases where you use right resource acquisition is initialization properly and only it it's actually produces safer code so ever since C++ 11 and more so with C++ 14 there's a trend to get people to stop using raw pointers there are enough in the C++ standard library there are enough classes in the C++ standard library to hold them and manage them for you specifically unique pointer and share pointer that you almost never need to deal with them directly that means that you you can still leak if you try hard enough but it makes it more difficult the biggest problem you have to face with shared pointers are cyclic reference counting loops so when a depends on bb depends on cc depends on a you might drop all the reference but since they all have a reference to each other they never get destroyed on garbage collection systems the garbage collector actually has to have enough intelligence to do a pass and verify that came back to the original one without increasing the use count and then all of these can actually be thrown away same problem exists and if you're using reference counting so yeah so you're right some people in C will complain that the closing bracket produces a lot of code yes it does right and the worst one is when you get a compiler error in the opening bracket of your class that's another issue yes I've been hiding code right but the interesting thing is this actually made it more it made it safer I've got a colleague who's a really good C code he doesn't like c++ at all there's a feature an extension in GCC that tells it whenever this variable goes out go out of goes out of scope call this function so you can actually implement destructor like functionality with GCC it's not part of the C standard but GCC allows you to do this so he actually started using this in his own code base because yes it makes it it makes it safer so I'm willing to sacrifice some verbosity some explicitness that's not called a verbosity for the safer code we're gonna come back to this again later when we do exceptions in a couple of slides I didn't know exactly what to talk about the containers I was struggling with what to write in this slide so the c++ standard library has a lot of containers it is in my opinion the single most important thing that the c++ standard library has ios streams throw them in the garbage the containers are good and more important than that those containers in both Libc++ and in Libc++ are written by the same people who wrote your compiler they know how the compiler works that means hopefully that the container is the most optimized possible that could exist for that particular compiler and it often is it's very hard for you to write something that is as generic and as efficient as the c++ standard compiler standard containers now you can write specific specialized code that is more efficient yes definitely but to make it generic to work with everything it's a little difficult the example I wanted to give and we can draw it later after the session is the normal uses of containers so in in a c codebase what kind of container is the most often used a linked list linked lists so I was grabbing the glib source code and I found they have g array which is an array and I started to figure out where is this used almost nowhere they don't use it on their own codebase glist however which is a linked list they use it very often in the c++ world the structure the container that is most often used some vector which is an array and I can prove to you that a vector of the same number of elements of the same size is more efficient in many factors so it's faster to search it's faster to iterate over it has less memory overhead so I mean by meaning fewer malox it uses fewer cache lines and because it's sequential it actually helps the CPU can help you because it knows you're going to usually progress sequentially if you're iterating over a linked list you might be through going all over the place in memory so the cache lines on the CPU cannot help you by prefetching information that you're going to need a couple of instructions down the line right the problem with them two problems actually one is they're not optimized for code size most often c++ library optimized for performance this is why a lot of these things are in line so yes it's going to produce the fastest possible by the by having as a counterpart putting all the code exactly where you used it so it's not calling outside whereas often when we're doing embedded programming we want to actually have shorter code to fit whatever memory we need so the question is if when I mean optimized I mean before or after c++ 11 build both but more so now with c++ 11 move semantics and and more so they are optimized and the reason again is because all of this ends up in line though code is all generic and ends up in line the compilers today both GCN Clang are not as smart enough to do code analysis after code generation and identify that these blocks of code are actually identical they do it before usually before they expand to assembly and they don't realize that it's actually the same after expanding to assembly so there's room for improving this more especially if you want to do optimization for size just remember one thing parentheses GCC optimizes for size a lot better than clang does so if you're doing compilation with OS you want GCC not clang today I said there are two problems the other problem that I personally have with the standard containers is that the error reporting they have the only error report they have is exceptions so there has been discussion there have been discussions on the the c++ committee and standard mailing lists should we have non-exceptional code should we support this the people there came to a compromise the answer is like this we believe we meaning c++ standard committee that exceptions are the answer we should be using exceptions and therefore we're going to design our containers and our API around exceptions that said we're going to make it easy for people who don't want to use exceptions to still use some functionality so as an example the upcoming file system API in the c++ standard is expected to have as return values standard expected so it's a container that contains that has a parameter a template parameter is your return type might but it might be actually disengaged containing no value but instead containing on error code that allows you to query it are you an error condition and handle it normally or if you don't and just try to access the value it throws the exception at that point so it is the compromise we've found so the people who push and say exceptions are good their argument is yes it looks like it increases code size it looks like it increases code size but that's because we're actually handling all possible errors and not missing anything so I did a test I've gone let's go back to that C group function inside the C the kernel code so I just rewrote it now to use I have the actual complete code for this so the dot dot dot in the middle is I have it I spend some time just drink dummy of everything that called and all these these functions around I just wanted to know the impact of switching from C with the explicit error checking and go to use to using exceptions so there are basically two points in this function where an exception can be thrown the first of them is this came a lock right so I didn't change I made I made it so came a lock is not marked no except so it might throw I wrote the actual pointer holder for a class and the function in between that actually you can't see here because he wouldn't be able to read it the function that would have returned the null path I made it a throw or since it's it's all known in line that basically did not mark it as no except everything else all the other functions especially the ones in the kernel that returned void I simply mark them as no except which means that the source the compiler is looking at it say I have two points possible where it's possibly going to throw one of them is before anything happens it's actually the beginning of the function that this came a lock here so it might just throw and doesn't have to do anything or in between in that dot dot dot there in which case he needs to destroy three objects the two lockers and the pointer holder note that I don't have to return you know man because that's actually an exception from I actually also removed the code that did return ename too long because that's supposedly now an exception so if the function inside said well I can't fit the the name that you wanted me to in the buffer that you passed me I'm gonna throw ename too long right so the only return point in this function the normal return is this return zero at the end this it actually means this function did not need to return in it could just have been void because it always succeeds or throws I actually just realized this when talking to you I could have made this void I compiled it and as an exercise I use the ABI the ABI for the Zephyr operating system which I believe is also what the kernel uses inside itself it uses basically passing by your registers as a result the code size grew 16 bytes and it added the exception table that wasn't needed before and this is where I found that the F no asynchronous unwind tables was important in C as well because when I had just compiled it in C and had not noticed it it or it did it emit an unwind exception table for C so the difference between the C unwind table that was there and the C++ unwind table with exceptions was 16 bytes only so 0 10 x right 0 x 1 0 the other thing that changed and this is actually where these 16 bytes come from is that the error handling was removed from the main code path really so I'm gonna leave you with that I had like I said a couple of more C++ is awesome I'm just gonna quickly go through them lambdas I love lambdas it's a good thing to use they can be used in C as well as this example shows the range for I'm gonna leave you with this and ask you to spot the error there's an error in the C code trust me unfortunately we're running out of time so I will not give you no that was my mistake I guess no the error is something different yes I did not divide by size of actually GCC complains to you and says you're accessing out of bounds clan didn't whereas this the C++ code is much simpler to close there's a bunch of goodies that we're doing in C++ 14 and C++ 17 I don't have the time to explain them all the language is evolving rapidly where C is not so much it's all an ISO standard but interestingly the standard itself can be found on github you can compile it because it stacks they only accept all requests for editorial changes everything else needs to go through meaningless discussions which we're familiar with so unfortunately I ran out of time thank you so much for coming I'm available in the coffee area afterwards yes and UC++


Welcome to Wild World News. What's up, Andy Magansites? So apparently it's some more wild world news. Tattooed bully gets knocked out in 20 seconds. This is fighting news. Looks like he got the Nitro belt. Let's see, it's got over 6 million views and it was just put up on the fourth. So let's check this out. Let's do this. Oh, I thought he was going to knock him out right there. I don't know if he was a bully.  It didn't look like anything, you know, out of the ordinary. Although it was a little bit more than usual. Yeah. Sucks to get knocked out after you're physically talking that much trash. Before a hand. If I was a fighter, I'd be one of them humble motherfuckers, you know what I mean?  But that's about it with me, you know what I mean? Let me know what you think about the knockout. Do you think he was showboating with the whole pre-fight shit? I don't know if he was a bully. You know, it just looked like, you know, he was being extra. He was the champ.  I don't know if he was a bully, though.  Alright, man. Sucks to put your comments down below. One million subscribers. Woo!