6 Commits 2367c0752f ... 8050c867e6

Author SHA1 Message Date
  Girish M 8050c867e6 critique of c++ essay 1 year ago
  Girish M 6520dc6f37 updated resume 1 year ago
  Girish M c7183e208e updated resume 1 year ago
  Girish M adeca8770d updated work exp 1 year ago
  Girish M 91d85d9b7d updated resume 1 year ago
  Girish M 3728bb02c9 removed GitHub sponsors 1 year ago
10 changed files with 543 additions and 55 deletions
  1. 1 1
      AffairWithCPP.html
  2. 486 0
      CritiqueOfCPP.html
  3. BIN
      assets/pdf/girishResume.pdf
  4. BIN
      assets/pdf/girishmResume.pdf
  5. 3 3
      books.html
  6. 3 3
      education.html
  7. 46 44
      index.html
  8. 1 1
      menu.html
  9. 3 3
      photo.html
  10. 0 0
      project.html

+ 1 - 1
AffairWithCPP.html

@@ -351,7 +351,7 @@ beginning, later we decided to learn something else.
 <nav class="right">
     <a href="telltaleOfTypewriter.html"><img src="assets/img/previous.jpg" alt="Previous"></a>
     <a href="index.html"><img src="assets/img/home.jpg"></a>
-    <a href="EvaluateSoftwareLib.html"><img src="assets/img/next.jpg" alt="Next"></a>
+    <a href="CritiqueOfCPP.html"><img src="assets/img/next.jpg" alt="Next"></a>
 </nav>
 <div id="postamble" class="status">
 <p class="author">Author: Girish</p>

+ 486 - 0
CritiqueOfCPP.html

@@ -0,0 +1,486 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+  <meta charset="utf-8" />
+  <meta name="generator" content="pandoc" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+  <meta name="author" content="Girish M" />
+  <title>Critiques of C++ Programming Language: Unraveling the Complexity</title>
+  <style>
+    html {
+      line-height: 1.5;
+      font-family: Georgia, serif;
+      font-size: 20px;
+      color: #1a1a1a;
+      background-color: #fdfdfd;
+    }
+    body {
+      margin: 0 auto;
+      max-width: 36em;
+      padding-left: 50px;
+      padding-right: 50px;
+      padding-top: 50px;
+      padding-bottom: 50px;
+      hyphens: auto;
+      overflow-wrap: break-word;
+      text-rendering: optimizeLegibility;
+      font-kerning: normal;
+    }
+    @media (max-width: 600px) {
+      body {
+        font-size: 0.9em;
+        padding: 1em;
+      }
+      h1 {
+        font-size: 1.8em;
+      }
+    }
+    @media print {
+      body {
+        background-color: transparent;
+        color: black;
+        font-size: 12pt;
+      }
+      p, h2, h3 {
+        orphans: 3;
+        widows: 3;
+      }
+      h2, h3, h4 {
+        page-break-after: avoid;
+      }
+    }
+    p {
+      margin: 1em 0;
+    }
+    a {
+      color: #1a1a1a;
+    }
+    a:visited {
+      color: #1a1a1a;
+    }
+    img {
+      max-width: 100%;
+    }
+    h1, h2, h3, h4, h5, h6 {
+      margin-top: 1.4em;
+    }
+    h5, h6 {
+      font-size: 1em;
+      font-style: italic;
+    }
+    h6 {
+      font-weight: normal;
+    }
+    ol, ul {
+      padding-left: 1.7em;
+      margin-top: 1em;
+    }
+    li > ol, li > ul {
+      margin-top: 0;
+    }
+    blockquote {
+      margin: 1em 0 1em 1.7em;
+      padding-left: 1em;
+      border-left: 2px solid #e6e6e6;
+      color: #606060;
+    }
+    code {
+      font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
+      font-size: 85%;
+      margin: 0;
+    }
+    pre {
+      margin: 1em 0;
+      overflow: auto;
+    }
+    pre code {
+      padding: 0;
+      overflow: visible;
+      overflow-wrap: normal;
+    }
+    .sourceCode {
+     background-color: transparent;
+     overflow: visible;
+    }
+    hr {
+      background-color: #1a1a1a;
+      border: none;
+      height: 1px;
+      margin: 1em 0;
+    }
+    table {
+      margin: 1em 0;
+      border-collapse: collapse;
+      width: 100%;
+      overflow-x: auto;
+      display: block;
+      font-variant-numeric: lining-nums tabular-nums;
+    }
+    table caption {
+      margin-bottom: 0.75em;
+    }
+    tbody {
+      margin-top: 0.5em;
+      border-top: 1px solid #1a1a1a;
+      border-bottom: 1px solid #1a1a1a;
+    }
+    th {
+      border-top: 1px solid #1a1a1a;
+      padding: 0.25em 0.5em 0.25em 0.5em;
+    }
+    td {
+      padding: 0.125em 0.5em 0.25em 0.5em;
+    }
+    header {
+      margin-bottom: 4em;
+      text-align: center;
+    }
+    #TOC li {
+      list-style: none;
+    }
+    #TOC ul {
+      padding-left: 1.3em;
+    }
+    #TOC > ul {
+      padding-left: 0;
+    }
+    #TOC a:not(:hover) {
+      text-decoration: none;
+    }
+    code{white-space: pre-wrap;}
+    span.smallcaps{font-variant: small-caps;}
+    span.underline{text-decoration: underline;}
+    div.column{display: inline-block; vertical-align: top; width: 50%;}
+    div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
+    ul.task-list{list-style: none;}
+    pre > code.sourceCode { white-space: pre; position: relative; }
+    pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
+    pre > code.sourceCode > span:empty { height: 1.2em; }
+    .sourceCode { overflow: visible; }
+    code.sourceCode > span { color: inherit; text-decoration: inherit; }
+    div.sourceCode { margin: 1em 0; }
+    pre.sourceCode { margin: 0; }
+    @media screen {
+    div.sourceCode { overflow: auto; }
+    }
+    @media print {
+    pre > code.sourceCode { white-space: pre-wrap; }
+    pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
+    }
+    pre.numberSource code
+      { counter-reset: source-line 0; }
+    pre.numberSource code > span
+      { position: relative; left: -4em; counter-increment: source-line; }
+    pre.numberSource code > span > a:first-child::before
+      { content: counter(source-line);
+        position: relative; left: -1em; text-align: right; vertical-align: baseline;
+        border: none; display: inline-block;
+        -webkit-touch-callout: none; -webkit-user-select: none;
+        -khtml-user-select: none; -moz-user-select: none;
+        -ms-user-select: none; user-select: none;
+        padding: 0 4px; width: 4em;
+        color: #aaaaaa;
+      }
+    pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
+    div.sourceCode
+      {   }
+    @media screen {
+    pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
+    }
+    code span.al { color: #ff0000; font-weight: bold; } /* Alert */
+    code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
+    code span.at { color: #7d9029; } /* Attribute */
+    code span.bn { color: #40a070; } /* BaseN */
+    code span.bu { color: #008000; } /* BuiltIn */
+    code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
+    code span.ch { color: #4070a0; } /* Char */
+    code span.cn { color: #880000; } /* Constant */
+    code span.co { color: #60a0b0; font-style: italic; } /* Comment */
+    code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
+    code span.do { color: #ba2121; font-style: italic; } /* Documentation */
+    code span.dt { color: #902000; } /* DataType */
+    code span.dv { color: #40a070; } /* DecVal */
+    code span.er { color: #ff0000; font-weight: bold; } /* Error */
+    code span.ex { } /* Extension */
+    code span.fl { color: #40a070; } /* Float */
+    code span.fu { color: #06287e; } /* Function */
+    code span.im { color: #008000; font-weight: bold; } /* Import */
+    code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
+    code span.kw { color: #007020; font-weight: bold; } /* Keyword */
+    code span.op { color: #666666; } /* Operator */
+    code span.ot { color: #007020; } /* Other */
+    code span.pp { color: #bc7a00; } /* Preprocessor */
+    code span.sc { color: #4070a0; } /* SpecialChar */
+    code span.ss { color: #bb6688; } /* SpecialString */
+    code span.st { color: #4070a0; } /* String */
+    code span.va { color: #19177c; } /* Variable */
+    code span.vs { color: #4070a0; } /* VerbatimString */
+    code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
+    .display.math{display: block; text-align: center; margin: 0.5rem auto;}
+  </style>
+</head>
+<body>
+<header id="title-block-header">
+<h1 class="title">Critiques of C++ Programming Language: Unraveling the
+Complexity</h1>
+<p class="author">Girish M</p>
+</header>
+<h1 id="introduction">Introduction</h1>
+<p>The C++ programming language, renowned for its performance and
+versatility, has been a staple in the software industry for decades.
+However, it is not without its flaws. In this essay, I will explore and
+elaborate on some strong and convincing critiques of C++. While
+acknowledging its numerous advantages, I will delve into the
+complexities, memory safety concerns, syntax issues, limitations of the
+standard library, lack of a proper module system, inconsistent
+standardization, and limited metaprogramming capabilities. By examining
+these critiques and providing code snippets as examples, I aim to shed
+light on the challenges faced by developers working with C++.</p>
+<h1 id="complexity-and-difficulty">Complexity and Difficulty</h1>
+<p>One of the most notable critiques of C++ is its inherent complexity
+and steep learning curve. With a vast array of features, including
+object-oriented programming, templates, and multiple inheritance, C++
+can be overwhelming for beginners and even experienced programmers. This
+complexity often leads to intricate and convoluted code, making it
+difficult to read, maintain, and debug. Moreover, the presence of legacy
+features and backward compatibility further complicates the language,
+resulting in a patchwork of different paradigms and confusing
+syntax.</p>
+<p>The code snippet below illustrates the complexity of C++ code with
+multiple paradigms:</p>
+<div class="sourceCode" id="cb1" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="kw">class</span> Base <span class="op">{</span></span>
+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a><span class="kw">public</span><span class="op">:</span></span>
+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>    <span class="kw">virtual</span> <span class="dt">void</span> print<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a>        <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="st">&quot;Base class&quot;</span> <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
+<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span>
+<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-10"><a href="#cb1-10" aria-hidden="true" tabindex="-1"></a><span class="kw">class</span> Derived <span class="op">:</span> <span class="kw">public</span> Base <span class="op">{</span></span>
+<span id="cb1-11"><a href="#cb1-11" aria-hidden="true" tabindex="-1"></a><span class="kw">public</span><span class="op">:</span></span>
+<span id="cb1-12"><a href="#cb1-12" aria-hidden="true" tabindex="-1"></a>    <span class="dt">void</span> print<span class="op">()</span> <span class="kw">override</span> <span class="op">{</span></span>
+<span id="cb1-13"><a href="#cb1-13" aria-hidden="true" tabindex="-1"></a>        <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="st">&quot;Derived class&quot;</span> <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb1-14"><a href="#cb1-14" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
+<span id="cb1-15"><a href="#cb1-15" aria-hidden="true" tabindex="-1"></a><span class="op">};</span></span>
+<span id="cb1-16"><a href="#cb1-16" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-17"><a href="#cb1-17" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb1-18"><a href="#cb1-18" aria-hidden="true" tabindex="-1"></a>    Base<span class="op">*</span> basePtr <span class="op">=</span> <span class="kw">new</span> Derived<span class="op">();</span></span>
+<span id="cb1-19"><a href="#cb1-19" aria-hidden="true" tabindex="-1"></a>    basePtr<span class="op">-&gt;</span>print<span class="op">();</span>  <span class="co">// Outputs &quot;Derived class&quot;</span></span>
+<span id="cb1-20"><a href="#cb1-20" aria-hidden="true" tabindex="-1"></a>    <span class="kw">delete</span> basePtr<span class="op">;</span></span>
+<span id="cb1-21"><a href="#cb1-21" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb1-22"><a href="#cb1-22" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the interplay between base and derived classes,
+along with virtual functions and dynamic dispatch, showcases the
+intricate nature of C++ code.</p>
+<h1 id="lack-of-memory-safety">Lack of Memory Safety</h1>
+<p>While C++ grants programmers direct control over memory management,
+it also exposes them to the dangers of memory-related errors. Buffer
+overflows, memory leaks, and dangling pointers are just a few examples
+of the pitfalls that programmers face when working with C++. These
+issues can lead to crashes, security vulnerabilities, and notoriously
+difficult-to-debug problems.</p>
+<p>Consider the following code snippet that demonstrates potential
+memory-related errors in C++:</p>
+<div class="sourceCode" id="cb2" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span><span class="op">*</span> allocateInt<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> num <span class="op">=</span> <span class="dv">42</span><span class="op">;</span></span>
+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="op">&amp;</span>num<span class="op">;</span>  <span class="co">// Returning a pointer to a local variable</span></span>
+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span><span class="op">*</span> ptr <span class="op">=</span> allocateInt<span class="op">();</span></span>
+<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="op">*</span>ptr <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span>  <span class="co">// Undefined behavior, accessing invalid memory</span></span>
+<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the <code>allocateInt()</code> function returns a
+pointer to a local variable, which leads to undefined behavior when
+accessed outside its scope. This highlights the lack of memory safety in
+C++ and the potential for introducing bugs and vulnerabilities.</p>
+<h1 id="fragile-and-error-prone-syntax">Fragile and Error-Prone
+Syntax</h1>
+<p>C++ syntax has been widely criticized for being fragile and
+error-prone. The language’s complex rules regarding operator
+overloading, template metaprogramming, and implicit conversions can lead
+to unexpected behavior, confusing even seasoned programmers. The syntax
+can also be verbose and repetitive, requiring developers to write more
+code than necessary for common tasks.</p>
+<p>The following code snippet demonstrates the error-prone nature of C++
+syntax:</p>
+<div class="sourceCode" id="cb3" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> a <span class="op">=</span> <span class="dv">5</span><span class="op">;</span></span>
+<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> b <span class="op">=</span> <span class="dv">2</span><span class="op">;</span></span>
+<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> result <span class="op">=</span> a <span class="op">+</span> b<span class="op">++;</span>  <span class="co">// Implicit conversion and undefined behavior</span></span>
+<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="st">&quot;Result: &quot;</span> <span class="op">&lt;&lt;</span> result <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the code intends to add <code>a</code> and the
+post-incremented value of <code>b</code>. However, due to the subtle
+interaction between operator precedence, implicit conversion, and
+sequencing, the result is undefined behavior. This showcases the
+challenges posed by C++’s syntax and the potential for introducing
+errors.</p>
+<h1 id="limited-standard-library">Limited Standard Library</h1>
+<p>Although the C++ Standard Library provides essential functionality,
+it has been criticized for its slow evolution compared to other modern
+programming languages. Many commonly used features, such as string
+manipulation, regular expressions, and networking, require third-party
+libraries. This fragmented landscape introduces compatibility issues
+across different implementations and dependencies on external
+sources.</p>
+<p>Consider the following code snippet that showcases the use of a
+third-party library for string manipulation:</p>
+<div class="sourceCode" id="cb4" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;boost/algorithm/string.hpp&gt;</span></span>
+<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>string<span class="op"> </span>str <span class="op">=</span> <span class="st">&quot;hello world&quot;</span><span class="op">;</span></span>
+<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a>    <span class="ex">boost::</span>algorithm<span class="ex">::</span>to_upper<span class="op">(</span>str<span class="op">);</span>  <span class="co">// Using boost library for string manipulation</span></span>
+<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> str <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span>  <span class="co">// Outputs &quot;HELLO WORLD&quot;</span></span>
+<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the Boost library is utilized for string
+manipulation instead of relying solely on the standard library. This
+highlights the limitations of the C++ Standard Library and the need for
+external dependencies, leading to increased complexity and potential
+compatibility issues.</p>
+<h1 id="lack-of-proper-module-system">Lack of Proper Module System</h1>
+<p>C++ lacks a standardized module system, making it challenging to
+manage dependencies and build large-scale projects. Without a proper
+module system, code reuse becomes more difficult, compilation times
+increase, and the organization of code becomes more complex. As a
+result, developers often resort to workarounds, such as header files and
+manual dependency management, which can lead to inefficient and
+error-prone practices.</p>
+<p>Consider the following code snippets that exemplify the lack of a
+proper module system in C++:</p>
+<div class="sourceCode" id="cb5" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#ifndef MYMODULE_H</span></span>
+<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#define MYMODULE_H</span></span>
+<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> foo<span class="op">();</span></span>
+<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a><span class="pp">#endif</span></span></code></pre></div>
+<div class="sourceCode" id="cb6" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&quot;mymodule.h&quot;</span></span>
+<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a><span class="dt">void</span> foo<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="st">&quot;This is foo&quot;</span> <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<div class="sourceCode" id="cb7" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&quot;mymodule.h&quot;</span></span>
+<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>    foo<span class="op">();</span></span>
+<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the manual management of dependencies through header
+files is employed. This highlights the lack of a standardized module
+system in C++ and the resultant complexities in organizing and
+maintaining code.</p>
+<h1 id="inconsistent-standardization">Inconsistent Standardization</h1>
+<p>The evolution of C++ standards has been relatively slow, and not all
+features are implemented consistently across different compilers and
+platforms. This lack of consistency poses challenges for developers
+seeking to write portable code that works uniformly across multiple
+environments. Code that compiles and behaves correctly on one compiler
+may fail on another, requiring additional effort to address these
+compatibility issues.</p>
+<p>Consider the following code snippet that demonstrates inconsistent
+behavior across different compilers:</p>
+<div class="sourceCode" id="cb8" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a>    <span class="at">const</span> <span class="dt">int</span> size <span class="op">=</span> <span class="dv">5</span><span class="op">;</span></span>
+<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> arr<span class="op">[</span>size<span class="op">]</span> <span class="op">=</span> <span class="op">{</span><span class="dv">1</span><span class="op">,</span> <span class="dv">2</span><span class="op">,</span> <span class="dv">3</span><span class="op">,</span> <span class="dv">4</span><span class="op">,</span> <span class="dv">5</span><span class="op">};</span></span>
+<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a>    <span class="cf">for</span> <span class="op">(</span><span class="dt">int</span> i <span class="op">=</span> <span class="dv">0</span><span class="op">;</span> i <span class="op">&lt;=</span> size<span class="op">;</span> <span class="op">++</span>i<span class="op">)</span> <span class="op">{</span>  <span class="co">// Loop index out of bounds</span></span>
+<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a>        <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> arr<span class="op">[</span>i<span class="op">]</span> <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a>    <span class="op">}</span></span>
+<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the loop index goes out of bounds, resulting in
+undefined behavior. However, different compilers may exhibit varying
+behavior, including silent errors or warnings. This highlights the
+inconsistent standardization of C++ and the challenges it poses for
+writing portable code.</p>
+<h1 id="limited-metaprogramming-capabilities">Limited Metaprogramming
+Capabilities</h1>
+<p>C++ offers template metaprogramming as a powerful feature, enabling
+compile-time computation and code generation. However, the complexity of
+C++’s template system, coupled with its arcane syntax, makes it
+challenging to grasp and utilize effectively. This limitation restricts
+developers’ ability to write highly generic and reusable code, as
+metaprogramming requires a deep understanding of template
+metaprogramming techniques.</p>
+<p>Consider the following code snippet that showcases limited
+metaprogramming capabilities in C++:</p>
+<div class="sourceCode" id="cb9" data-language="C++"><pre
+class="sourceCode c++"><code class="sourceCode cpp"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iostream&gt;</span></span>
+<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">typename</span> T<span class="op">&gt;</span></span>
+<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a>T add<span class="op">(</span>T a<span class="op">,</span> T b<span class="op">)</span> <span class="op">{</span></span>
+<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> a <span class="op">+</span> b<span class="op">;</span></span>
+<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span>
+<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
+<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> result <span class="op">=</span> add<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;(</span><span class="dv">5</span><span class="op">,</span> <span class="dv">7</span><span class="op">);</span>  <span class="co">// Template specialization required</span></span>
+<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a>    <span class="bu">std::</span>cout<span class="op"> &lt;&lt;</span> <span class="st">&quot;Result: &quot;</span> <span class="op">&lt;&lt;</span> result <span class="op">&lt;&lt;</span> <span class="bu">std::</span>endl<span class="op">;</span></span>
+<span id="cb9-11"><a href="#cb9-11" aria-hidden="true" tabindex="-1"></a>    <span class="cf">return</span> <span class="dv">0</span><span class="op">;</span></span>
+<span id="cb9-12"><a href="#cb9-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
+<p>In this example, the <code>add()</code> function utilizes templates
+to perform addition. However, the need for explicit template
+specialization limits the flexibility and expressiveness of
+metaprogramming in C++. Other modern programming languages, such as Rust
+or Haskell, provide more advanced metaprogramming facilities that enable
+developers to write elegant and flexible code with less effort.</p>
+<h1 id="conclusion">Conclusion</h1>
+<p>In conclusion, while C++ remains a widely used programming language
+with many strengths, it is essential to acknowledge and address its
+critiques. The complexity and difficulty associated with C++, the lack
+of memory safety, fragile syntax, limited standard library, absence of a
+proper module system, inconsistent standardization, and limited
+metaprogramming capabilities are all challenges that developers must
+overcome when working with C++.</p>
+<p>By exemplifying these critiques through code snippets, I have
+demonstrated the intricacies and pitfalls inherent in the language.
+Recognizing these critiques prompts us to seek solutions and
+advancements within the language. Efforts to simplify the syntax,
+improve memory safety through safer alternatives or language features,
+enhance the standard library, provide a standardized module system, and
+establish a proper module system can contribute to a more robust and
+developer-friendly C++ ecosystem.</p>
+<p>While these critiques highlight the areas where C++ falls short, it
+is important to acknowledge that C++ is a mature and powerful language
+that continues to evolve. With a strong community and ongoing
+standardization efforts, it is possible to address these concerns and
+make C++ more accessible and enjoyable for developers.</p>
+<h1 id="bibliography">Bibliography</h1>
+<ol>
+<li><p>Stroustrup, B. (1996). The Design and Evolution of C++.
+Addison-Wesley.</p></li>
+<li><p>Meyers, S. (2014). Effective Modern C++. O’Reilly Media.</p></li>
+<li><p>Stroustrup, B. (2005). The C++ Programming Language.
+Addison-Wesley.</p></li>
+<li><p>Vandevoorde, D. and Josuttis, N. M. (2017). C++ Templates: The
+Complete Guide. Addison-Wesley.</p></li>
+<li><p>Lakos, J. (1996). Large-Scale C++ Software Design.
+Addison-Wesley.</p></li>
+</ol>
+</body>
+<nav class="right">
+  <a href="AffairWithCPP.html"><img src="assets/img/previous.jpg" alt="Previous"></a>
+  <a href="index.html"><img src="assets/img/home.jpg"></a>
+  <a href="EvaluateSoftwareLib.html"><img src="assets/img/next.jpg" alt="Next"></a>
+</nav>
+</html>

BIN
assets/pdf/girishResume.pdf


BIN
assets/pdf/girishmResume.pdf


+ 3 - 3
books.html

@@ -33,7 +33,7 @@
         <!-- <li><a href="shop.html">Shop</a></li> -->
         <!-- <li><a href="contact.html">Contact</a></li> -->
         <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-        <li><a href="subscribe.html">Sponsor me</a></li>
+        <li><a href="subscribe.html">Contact</a></li>
     </ul>
 </nav>
 <section id="one" class="wrapper">
@@ -338,7 +338,7 @@
         <!-- <li><a href="shop.html">Shop</a></li> -->
         <!-- <li><a href="contact.html">Contact</a></li> -->
         <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-        <li><a href="subscribe.html">Sponsor me</a></li>
+        <li><a href="subscribe.html">Contact</a></li>
     </ul>
     <div class="inner">
         <h2>Get In Touch</h2>
@@ -363,7 +363,7 @@
                 <!-- <li><a href="shop.html">Shop</a></li> -->
                 <!--<li><a href="contact.html">Contact</a></li>-->
                 <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-                <li><a href="subscribe.html">Sponsor me</a></li>
+                <li><a href="subscribe.html">Contact</a></li>
             </ul>
         </div>
     </noscript>

+ 3 - 3
education.html

@@ -61,7 +61,7 @@
             <!-- <li><a href="shop.html">Shop</a></li> -->
             <!-- <li><a href="contact.html">Contact</a></li> -->
             <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
+            <li><a href="subscribe.html">Contact</a></li>
         </ul>
 </nav>
 
@@ -112,7 +112,7 @@
             <!-- <li><a href="shop.html">Shop</a></li> -->
             <!-- <li><a href="contact.html">Contact</a></li> -->
             <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
+            <li><a href="subscribe.html">Contact</a></li>
         </ul>
     <div class="inner">
         <h2>Get In Touch</h2>
@@ -137,7 +137,7 @@
                 <!-- <li><a href="shop.html">Shop</a></li> -->
                 <!--<li><a href="contact.html">Contact</a></li>-->
                 <li><a href="assets/pdf/girishmResume.pdf">CV</a></li>
-                <li><a href="subscribe.html">Sponsor me</a></li>
+                <li><a href="subscribe.html">Contact</a></li>
             </ul>
         </div>
     </noscript>

+ 46 - 44
index.html

@@ -24,18 +24,20 @@
 <head>
     <title>Girish M</title>
     <meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1"/>
-    <link rel="stylesheet" href="assets/css/main.css"/>
+    <meta content="width=device-width, initial-scale=1" name="viewport"/>
+    <link href="assets/css/main.css" rel="stylesheet"/>
     <style type="text/css">
-        #intro{
+        #intro {
             font-weight: bolder;
         }
-        #intro::first-letter{
+
+        #intro::first-letter {
             color: chocolate;
             font-size: 200%;
             font-weight: bold;
         }
-        #altLinks li{
+
+        #altLinks li {
             display: inline;
         }
     </style>
@@ -46,30 +48,30 @@
 <header id="header">
     <nav class="right">
         <label for="dark-theme-checkbox" id="dark-theme-checkbox-label">Dark Mode</label>
-        <input type="checkbox" id="dark-theme-checkbox">
+        <input id="dark-theme-checkbox" type="checkbox">
     </nav>
     <nav class="left">
         <a href="#menu"><span>Menu</span></a>
     </nav>
-    <a href="index.html" class="logo">Girish M</a>
+    <a class="logo" href="index.html">Girish M</a>
 </header>
 
 <!-- Menu -->
 <nav id="menu">
-        <ul class="links">
-            <li><a href="index.html">Home</a></li>
-            <li><a href="services.html">Services</a></li>
-            <li><a href="project.html">Projects</a></li>
-            <li><a href="workExperience.html">Experience</a></li>
-            <li><a href="education.html">Education</a></li>
-            <li><a href="writing.html">Blog</a></li>
-            <li><a href="books.html">Book library</a></li>
-            <li><a href="photo.html">Photos</a></li>
-            <!-- <li><a href="shop.html">Shop</a></li> -->
-            <!-- <li><a href="contact.html">Contact</a></li> -->
-            <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
-        </ul>
+    <ul class="links">
+        <li><a href="index.html">Home</a></li>
+        <li><a href="services.html">Services</a></li>
+        <li><a href="project.html">Projects</a></li>
+        <li><a href="workExperience.html">Experience</a></li>
+        <li><a href="education.html">Education</a></li>
+        <li><a href="writing.html">Blog</a></li>
+        <li><a href="books.html">Book library</a></li>
+        <li><a href="photo.html">Photos</a></li>
+        <!-- <li><a href="shop.html">Shop</a></li> -->
+        <!-- <li><a href="contact.html">Contact</a></li> -->
+        <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
+        <li><a href="subscribe.html">Contact</a></li>
+    </ul>
 </nav>
 
 <!-- Banner -->l
@@ -79,34 +81,34 @@
     </div>
 </section>
 <!-- Three -->
-<section id="three" class="wrapper">
+<section class="wrapper" id="three">
     <div class="inner flex flex-3 row 6u 12u$(small)">
         <p id="intro">Welcome, Girish is a
-        Free/Libre Open source software (FLOSS) contributor and a
-        software engineer.</p>
+            Free/Libre Open source software (FLOSS) contributor and a
+            software engineer.</p>
     </div>
     <div class="inner flex flex-3 row 6u 12u$(small)">
         <p>Hint - To know more, click on top left menu icon</p>
     </div>
-    
+
 </section>
 
 <!-- Footer -->
 <footer id="footer">
-        <ul class="actions">
-            <li><a href="index.html">Home</a></li>
-            <li><a href="services.html">Services</a></li>
-            <li><a href="project.html">Projects</a></li>
-            <li><a href="workExperience.html">Experience</a></li>
-            <li><a href="education.html">Education</a></li>
-            <li><a href="writing.html">Blog</a></li>
-            <li><a href="books.html">Book library</a></li>
-            <li><a href="photo.html">Photos</a></li>
-            <!-- <li><a href="shop.html">Shop</a></li> -->
-            <!-- <li><a href="contact.html">Contact</a></li> -->
-            <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
-        </ul>
+    <ul class="actions">
+        <li><a href="index.html">Home</a></li>
+        <li><a href="services.html">Services</a></li>
+        <li><a href="project.html">Projects</a></li>
+        <li><a href="workExperience.html">Experience</a></li>
+        <li><a href="education.html">Education</a></li>
+        <li><a href="writing.html">Blog</a></li>
+        <li><a href="books.html">Book library</a></li>
+        <li><a href="photo.html">Photos</a></li>
+        <!-- <li><a href="shop.html">Shop</a></li> -->
+        <!-- <li><a href="contact.html">Contact</a></li> -->
+        <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
+        <li><a href="subscribe.html">Contact</a></li>
+    </ul>
     <div class="inner">
         <h2>Get In Touch</h2>
         <ul class="actions">
@@ -130,7 +132,7 @@
                 <!-- <li><a href="shop.html">Shop</a></li> -->
                 <!--<li><a href="contact.html">Contact</a></li>-->
                 <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-                <li><a href="subscribe.html">Sponsor me</a></li>
+                <li><a href="subscribe.html">Contact</a></li>
             </ul>
         </div>
     </noscript>
@@ -138,11 +140,11 @@
         <img src="assets/img/5041589.png" alt="FSF Associate Member">
     </div>-->
     <div class="copyright">
-        <p>Copyright &copy; 2019 to present, Girish M, <img alt="Creative Commons License" style="border-width:0"
-                                                 src="assets/img/cc.png"/>
+        <p>Copyright &copy; 2019 to present, Girish M, <img alt="Creative Commons License" src="assets/img/cc.png"
+                                                            style="border-width:0"/>
             <br/>
-            This work is licensed under a <a rel="license"
-                                             href="http://creativecommons.org/licenses/by/4.0/">Creative
+            This work is licensed under a <a href="http://creativecommons.org/licenses/by/4.0/"
+                                             rel="license">Creative
                 Commons
                 Attribution 4.0 International License</a>. The source for this web-page can be found <a
                     href="https://notabug.org/girishm/girishm.nfshost.com/src/test/index.html">here</a>

+ 1 - 1
menu.html

@@ -11,6 +11,6 @@
         <!-- <li><a href="shop.html">Shop</a></li> -->
         <!-- <li><a href="contact.html">Contact</a></li> -->
         <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-        <li><a href="subscribe.html">Sponsor me</a></li>
+        <li><a href="subscribe.html">Contact</a></li>
     </ul>
 </nav>

+ 3 - 3
photo.html

@@ -62,7 +62,7 @@
             <!-- <li><a href="shop.html">Shop</a></li> -->
             <!-- <li><a href="contact.html">Contact</a></li> -->
             <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
+            <li><a href="subscribe.html">Contact</a></li>
         </ul>
 </nav>
 
@@ -321,7 +321,7 @@
             <!-- <li><a href="shop.html">Shop</a></li> -->
             <!-- <li><a href="contact.html">Contact</a></li> -->
             <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-            <li><a href="subscribe.html">Sponsor me</a></li>
+            <li><a href="subscribe.html">Contact</a></li>
         </ul>
     <div class="inner">
         <h2>Get In Touch</h2>
@@ -346,7 +346,7 @@
                 <!-- <li><a href="shop.html">Shop</a></li> -->
                 <!--<li><a href="contact.html">Contact</a></li>-->
                 <li><a href="assets/pdf/girishResume.pdf">CV</a></li>
-                <li><a href="subscribe.html">Sponsor me</a></li>
+                <li><a href="subscribe.html">Contact</a></li>
             </ul>
         </div>
     </noscript>

+ 0 - 0
project.html


Some files were not shown because too many files changed in this diff