{"id":2658,"date":"2022-01-09T15:37:53","date_gmt":"2022-01-09T10:07:53","guid":{"rendered":"https:\/\/www.rangakrish.com\/?p=2658"},"modified":"2022-01-09T15:37:53","modified_gmt":"2022-01-09T10:07:53","slug":"universal-function-call-syntax-ufcs-in-d-language","status":"publish","type":"post","link":"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/","title":{"rendered":"Universal Function Call Syntax (UFCS) in D Language"},"content":{"rendered":"<p>One of the many <em><strong>&#8220;cool&#8217;<\/strong><\/em> features of <em><strong>Dlang<\/strong><\/em> is <a href=\"http:\/\/ddili.org\/ders\/d.en\/ufcs.html\" target=\"_blank\" rel=\"noopener\"><em><strong>&#8220;Universal Funcion Call Syntax&#8221;<\/strong><\/em><\/a>, which permits non-member functions to be invoked using the member function call syntax. When you add to this the fact that this applies not just to user-defined types but to primitive types as well, things get interesting.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Let us look at some examples to understand this feature.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Here is our first example:<\/p>\n<figure id=\"attachment_2659\" aria-describedby=\"caption-attachment-2659\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg?ssl=1\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" data-attachment-id=\"2659\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/example1-27\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg\" data-orig-size=\"960,748\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641725012&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example-1\" data-image-description=\"&lt;p&gt;Example-1&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example-1&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg\" class=\"wp-image-2659\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg?resize=550%2C429&#038;ssl=1\" alt=\"Example-1\" width=\"550\" height=\"429\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg?resize=300%2C234&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg?resize=768%2C598&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example1.jpg?w=960&amp;ssl=1 960w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-2659\" class=\"wp-caption-text\"><strong>Example 1<\/strong><\/figcaption><\/figure>\n<p>Here we have a user-defined type <em><strong>&#8220;A&#8221;<\/strong><\/em> with member function <em><strong>&#8220;foo()&#8221;<\/strong><\/em>. There is also a non-member function (<em><strong>&#8220;free&#8221;<\/strong><\/em> function) called <em><strong>&#8220;bar()&#8221;<\/strong><\/em> which takes <em><strong>&#8220;A&#8221;<\/strong><\/em> as its first argument. Line 28 shows how it is posible to call <em><strong>&#8220;bar()&#8221;<\/strong><\/em> as if it is a member function of <em><strong>&#8220;A&#8221;<\/strong><\/em>, in the same manner <em><strong>&#8220;foo()&#8221;<\/strong><\/em> is called. This is called <em><strong>UFCS<\/strong><\/em> in <em><strong>Dlang<\/strong><\/em>.<\/p>\n<p>What about the other way? Can member functions be invoked using regular function call syntax? No, that is not possible. See below:<\/p>\n<figure id=\"attachment_2660\" aria-describedby=\"caption-attachment-2660\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2660\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/example2-23\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg\" data-orig-size=\"992,464\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641725264&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example 2\" data-image-description=\"&lt;p&gt;Example 2&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example 2&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg\" class=\"wp-image-2660\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg?resize=550%2C257&#038;ssl=1\" alt=\"Example 2\" width=\"550\" height=\"257\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg?resize=300%2C140&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg?resize=768%2C359&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example2.jpg?w=992&amp;ssl=1 992w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-2660\" class=\"wp-caption-text\"><strong>Example 2<\/strong><\/figcaption><\/figure>\n<p>Line 26 is OK, but not Line 32.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Another case to consider is having a non-member function with the same name as member function and with the first argument as the user-defined type.<span class=\"Apple-converted-space\">\u00a0<\/span><\/p>\n<p>Take a look at this example:<\/p>\n<figure id=\"attachment_2661\" aria-describedby=\"caption-attachment-2661\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"2661\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/example3-20\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg\" data-orig-size=\"981,525\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641725725&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example 3\" data-image-description=\"&lt;p&gt;Example 3&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example 3&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg\" class=\"wp-image-2661\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg?resize=550%2C294&#038;ssl=1\" alt=\"Example 3\" width=\"550\" height=\"294\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg?resize=300%2C161&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg?resize=768%2C411&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example3.jpg?w=981&amp;ssl=1 981w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-2661\" class=\"wp-caption-text\"><strong>Example 3<\/strong><\/figcaption><\/figure>\n<p>Here, in addition to the member function<em><strong> &#8220;foo()&#8221;<\/strong><\/em> in <em><strong>&#8220;<\/strong><strong>A&#8221;<\/strong><\/em>, we also have a non-member function <em><strong>&#8220;foo()&#8221;<\/strong><\/em> taking <em><strong>&#8220;A&#8221;<\/strong><\/em> type as its only argument. In this case, how does <em><strong>UFCS<\/strong><\/em> work? Line 33 shows that the member function will be used even if the <em><strong>&#8220;signature&#8221;<\/strong><\/em> appears to be the same. This means <em><strong>UFCS<\/strong><\/em> comes into picture only when there is no member function with that name.<\/p>\n<p>An additional rule is that functions declared in local scope (<em><strong>&#8220;nested&#8221;<\/strong><\/em> functions) are not considered for <em><strong>UFCS<\/strong><\/em>. This is shown in the following example:<\/p>\n<figure id=\"attachment_2662\" aria-describedby=\"caption-attachment-2662\" style=\"width: 550px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2662\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/example4-15\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg\" data-orig-size=\"998,652\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641726156&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example 4\" data-image-description=\"&lt;p&gt;Example 4&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example 4&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg\" class=\"wp-image-2662\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?resize=550%2C359&#038;ssl=1\" alt=\"Example 4\" width=\"550\" height=\"359\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?resize=300%2C196&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?resize=768%2C502&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?resize=140%2C90&amp;ssl=1 140w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example4.jpg?w=998&amp;ssl=1 998w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a><figcaption id=\"caption-attachment-2662\" class=\"wp-caption-text\"><strong>Example 4<\/strong><\/figcaption><\/figure>\n<p>Line 44 shows that the nested function cannot take advantage of <em><strong>UFCS<\/strong><\/em> feature.<\/p>\n<p>Finally, it is worthwhile to point out that even <em><strong>primitive<\/strong><\/em> types in <em><strong>DLang<\/strong><\/em> can take advantage of <em><strong>UFCS<\/strong><\/em>. Here is how:<\/p>\n<figure id=\"attachment_2663\" aria-describedby=\"caption-attachment-2663\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2663\" data-permalink=\"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/09\/universal-function-call-syntax-ufcs-in-d-language\/example5-12\/\" data-orig-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg\" data-orig-size=\"609,431\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Admin&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1641737488&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Example 5\" data-image-description=\"&lt;p&gt;Example 5&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Example 5&lt;\/p&gt;\n\" data-large-file=\"https:\/\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg\" class=\"wp-image-2663\" src=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg?resize=500%2C354&#038;ssl=1\" alt=\"Example 5\" width=\"500\" height=\"354\" srcset=\"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg?resize=300%2C212&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Example5.jpg?w=609&amp;ssl=1 609w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><figcaption id=\"caption-attachment-2663\" class=\"wp-caption-text\"><strong>Example 5<\/strong><\/figcaption><\/figure>\n<p>The above shows how a sequence of operations on an integer array can be elegantly expressed using <em><strong>&#8220;chaining&#8221;<\/strong><\/em>, thanks to <em><strong>UFCS<\/strong><\/em>!<\/p>\n<p>Have a great weekend!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the many &#8220;cool&#8217; features of Dlang is &#8220;Universal Funcion Call Syntax&#8221;, which permits non-member functions to be invoked using the member function call syntax. When you add to this the fact that this applies not just to user-defined types but to primitive types as well, things get interesting.\u00a0 Let us look at some [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[302,17],"tags":[305,306],"class_list":["post-2658","post","type-post","status-publish","format-standard","hentry","category-d-language","category-programming","tag-dlang","tag-ufcs"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9OLnF-GS","jetpack-related-posts":[{"id":2645,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/12\/25\/calling-lisp-functions-from-d-language\/","url_meta":{"origin":2658,"position":0},"title":"Calling Lisp Functions from D Language","author":"admin","date":"December 25, 2021","format":false,"excerpt":"After exploring \"newLisp\" in the past few posts, I would like to start looking at the \"D Programming Language\"\u00a0(DLang). DLang\u00a0has been around since 2001. It was originally created by Walter Bright and later Andrei Alexandrescu joined the team in 2007. The main inspiration for DLang was C++, although it uses\u2026","rel":"","context":"In &quot;D Language&quot;","block_context":{"text":"D Language","link":"https:\/\/www.rangakrish.com\/index.php\/category\/d-language\/"},"img":{"alt_text":"Lisp Function Called from D","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/12\/Lisp-300x107.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/12\/Lisp-300x107.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/12\/Lisp-300x107.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":2668,"url":"https:\/\/www.rangakrish.com\/index.php\/2022\/01\/23\/template-mixins-in-d-programming-language\/","url_meta":{"origin":2658,"position":1},"title":"Template Mixins in D Programming Language","author":"admin","date":"January 23, 2022","format":false,"excerpt":"When I heard the name Mixin\u00a0for the first time in the context of Dlang, I imagined it would be something similar to the mixins\u00a0of Common Lisp, but I was completely wrong!\u00a0 Mixins are a very interesting feature of D language. They allow code to be \"injected\" into the source at\u2026","rel":"","context":"In &quot;D Language&quot;","block_context":{"text":"D Language","link":"https:\/\/www.rangakrish.com\/index.php\/category\/d-language\/"},"img":{"alt_text":"Simple Template Mixin","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2022\/01\/Defn-300x98.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1091,"url":"https:\/\/www.rangakrish.com\/index.php\/2018\/10\/14\/c17-stdapply-and-stdinvoke\/","url_meta":{"origin":2658,"position":2},"title":"C++17 &#8211; std::apply() and std::invoke()","author":"admin","date":"October 14, 2018","format":false,"excerpt":"Calling a function (or function object) dynamically, through a pointer known at runtime, is a common programming scenario. Almost all languages support this use case. Lisp, for example, has apply and funcall. When using apply, you can see that the arguments are passed via a separate list object. With funcall,\u2026","rel":"","context":"In &quot;C++&quot;","block_context":{"text":"C++","link":"https:\/\/www.rangakrish.com\/index.php\/category\/c\/"},"img":{"alt_text":"Calling Member Functions","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2018\/10\/Code5.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2018\/10\/Code5.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2018\/10\/Code5.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2018\/10\/Code5.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2152,"url":"https:\/\/www.rangakrish.com\/index.php\/2020\/09\/28\/template-based-text-generation\/","url_meta":{"origin":2658,"position":3},"title":"Template-Based Text Generation","author":"admin","date":"September 28, 2020","format":false,"excerpt":"I had written earlier about natural language generation\u00a0using my iLangGen framework. I used a \"template\" text file which was instantiated dynamically based on predefined \"grammars\" and external data. The sample application I show-cased demonstrated its utility and versatility. Today I would like to touch upon a few other \"pattern\" elements\u2026","rel":"","context":"In &quot;LISP&quot;","block_context":{"text":"LISP","link":"https:\/\/www.rangakrish.com\/index.php\/category\/lisp\/"},"img":{"alt_text":"Template File","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2020\/09\/Template-300x195.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2020\/09\/Template-300x195.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2020\/09\/Template-300x195.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":2540,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/09\/19\/c-20-concepts\/","url_meta":{"origin":2658,"position":4},"title":"C++ 20: Concepts","author":"admin","date":"September 19, 2021","format":false,"excerpt":"Concepts, introduced in C++20, are predicates that act as contraints on template parameters. As you would expect, the nice thing is that the constraint checking happens as part of template instantiation at compile time and not at run time! Since templates can have type as well as non-type parameters, Concepts\u2026","rel":"","context":"In &quot;C++&quot;","block_context":{"text":"C++","link":"https:\/\/www.rangakrish.com\/index.php\/category\/c\/"},"img":{"alt_text":"Constraint on Type","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/09\/Example1-300x213.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2580,"url":"https:\/\/www.rangakrish.com\/index.php\/2021\/10\/17\/some-interesting-features-of-newlisp\/","url_meta":{"origin":2658,"position":5},"title":"Some Interesting Features of &#8220;newLisp&#8221;","author":"admin","date":"October 17, 2021","format":false,"excerpt":"newLisp is a general-purpose scripting language with a Lisp-like syntax. That is one of the reasons I wanted to take a closer look at the language. It has a compact footprint, small resource requirements, and can easily be embedded. It is available on multiple platforms, and on my Windows machine,\u2026","rel":"","context":"In &quot;newLisp&quot;","block_context":{"text":"newLisp","link":"https:\/\/www.rangakrish.com\/index.php\/category\/newlisp\/"},"img":{"alt_text":"\"amb\" Function","src":"https:\/\/i0.wp.com\/www.rangakrish.com\/wp-content\/uploads\/2021\/10\/example1.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts\/2658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/comments?post=2658"}],"version-history":[{"count":0,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/posts\/2658\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/media?parent=2658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/categories?post=2658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rangakrish.com\/index.php\/wp-json\/wp\/v2\/tags?post=2658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}