<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programming Language Archives - Huahua&#039;s Tech Road</title>
	<atom:link href="https://zxi.mytechroad.com/blog/category/programming-language/feed/" rel="self" type="application/rss+xml" />
	<link>https://zxi.mytechroad.com/blog/category/programming-language/</link>
	<description></description>
	<lastBuildDate>Tue, 11 Feb 2020 01:36:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.8</generator>

<image>
	<url>https://zxi.mytechroad.com/blog/wp-content/uploads/2017/09/cropped-photo-32x32.jpg</url>
	<title>Programming Language Archives - Huahua&#039;s Tech Road</title>
	<link>https://zxi.mytechroad.com/blog/category/programming-language/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Morden C++</title>
		<link>https://zxi.mytechroad.com/blog/programming-language/morden-cpp/</link>
					<comments>https://zxi.mytechroad.com/blog/programming-language/morden-cpp/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Tue, 11 Feb 2020 01:29:28 +0000</pubDate>
				<category><![CDATA[Programming Language]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=6278</guid>

					<description><![CDATA[<p>之前在B站发起的编程语言投票已经有了结果，没想到C++居然是第一名！因为我用C++，所以我的受众大部分用C++，这就是所谓的幸存者偏差吗？做这期节目的主要原因是由于 1.注册了某OJ，发现连C++11都不支持，代码写得太别扭了，放弃。2. 由于我自己也在不断学习morden C++，使用一些新的语法和API然后一直有同学在问这是什么东西啊？之前没看到过嘛。于是我就稍微整理了一下。这一切还要从41年前说起。 C++ 诞生于1979年，相信比花花和绝大部分的同学年纪还要大。最早的时候还不叫C++，而是叫C with classes。C++的第一次标准化C++98则是在其诞生整整19年之后的1998年才完成的（标准化委员会到是早在1990/1991年就成立了），放在今天这是绝对不能想象的事情。C++98完善了模版，增加了STL containers，包含我们最常用的vector, set, deque, list, map等，iterator，iostream，complex，algorithms (std::sort, std::upper_bound, std::fill, std::swap)等这些都是在C++98标准化的。可以说C++98奠定了Classic C++的地位，易用性和可移植性都大幅提高，对C++的普及起到了关键的作用。之后的C++03在C++98的基础上做了小幅的改进。至此C++的标准化告一段落，C++也迎来了“黄金时期”，并于2003年8月21号达到TIOBE编程语言排行榜的历史最高成绩：17.531%，排名第三。上面有地位不可撼动的老大哥C语言还有领跑多年的Java，后面则有JavaScript/C#/Python等新秀奋起直追（PHP说：还有我！还有我！），老态龙钟的C++有些力不从心，在2003年之后就一直走下坡路，到2014年中旬一度跌破5%。 廉颇老矣尚能饭否？C++痛定思痛，10年磨一剑，终于在2011年推出了C++11标准，在C++98的基础上增加了许许多多的新功能，拉开了C++现代化的帷幕。有同学要问了：这么强大的C++11标准推出之后为什么C++的排名不降反升了？正是因为C++11的改动太大了，直到2020年，还有一些（主流）编译器没有完整实现C++11。这然我想起了早些年坊间的一则流言：“没有一款编辑器完整地实现了C++”，那时候很多东西没有标准化这么说当然是可以的。但放到标准化之后的今天，这条流言好像也不假。标准虽然在2011就提出了，但完全实现和普及已经是几年之后的事情了。之后的C++标准委员会就像打了鸡血一样，每隔三年就制定一个新标准C++14，C++17。C++20也已经FC（feature complete）了。新的标准让C++更强大，更优雅，更高效，但这一切的代价就是用户的学习成本也陡然上升，并且会有一些抵触情绪，拒绝接受新事物。任何人都不能否认现代C++变得更难了，如果有谁和你说他精通C++，你可以反问他是不是还在用VC98。反正我只敢说略懂皮毛。 以为这期节目就是听花花说书吗？当然不只是这些，下面花花作为一名普通C++用户给大家列举一些现代C++（C++11/14/17）一些好用的语法、类和函数，也欢迎大家留言补充。 1. std::unordered_map / std::unordered_set&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/morden-cpp/">Morden C++</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前在B站发起的编程语言投票已经有了结果，没想到C++居然是第一名！因为我用C++，所以我的受众大部分用C++，这就是所谓的幸存者偏差吗？做这期节目的主要原因是由于 1.注册了某OJ，发现连C++11都不支持，代码写得太别扭了，放弃。2. 由于我自己也在不断学习morden C++，使用一些新的语法和API然后一直有同学在问这是什么东西啊？之前没看到过嘛。于是我就稍微整理了一下。这一切还要从41年前说起。</p>



<figure class="wp-block-image"><img width="1024" height="942" src="https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1-1024x942.png" alt="" class="wp-image-6292" srcset="https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1-1024x942.png 1024w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1-300x276.png 300w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1-768x707.png 768w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1.png 1054w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>C++ 诞生于1979年，相信比花花和绝大部分的同学年纪还要大。最早的时候还不叫C++，而是叫C with classes。C++的第一次标准化C++98则是在其诞生整整19年之后的1998年才完成的（标准化委员会到是早在1990/1991年就成立了），放在今天这是绝对不能想象的事情。C++98完善了模版，增加了STL containers，包含我们最常用的vector, set, deque, list, map等，iterator，iostream，complex，algorithms (std::sort, std::upper_bound, std::fill, std::swap)等这些都是在C++98标准化的。可以说C++98奠定了Classic C++的地位，易用性和可移植性都大幅提高，对C++的普及起到了关键的作用。之后的C++03在C++98的基础上做了小幅的改进。至此C++的标准化告一段落，C++也迎来了“黄金时期”，并于2003年8月21号达到TIOBE编程语言排行榜的历史最高成绩：17.531%，排名第三。上面有地位不可撼动的老大哥C语言还有领跑多年的Java，后面则有JavaScript/C#/Python等新秀奋起直追（PHP说：还有我！还有我！），老态龙钟的C++有些力不从心，在2003年之后就一直走下坡路，到2014年中旬一度跌破5%。</p>



<figure class="wp-block-image"><img width="1024" height="504" src="https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1024x504.png" alt="" class="wp-image-6279" srcset="https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-1024x504.png 1024w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-300x148.png 300w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image-768x378.png 768w, https://zxi.mytechroad.com/blog/wp-content/uploads/2020/02/image.png 1878w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>廉颇老矣尚能饭否？C++痛定思痛，10年磨一剑，终于在2011年推出了C++11标准，在C++98的基础上增加了许许多多的新功能，拉开了C++现代化的帷幕。有同学要问了：这么强大的C++11标准推出之后为什么C++的排名不降反升了？正是因为C++11的改动太大了，直到2020年，还有一些（主流）编译器没有完整实现C++11。这然我想起了早些年坊间的一则流言：“没有一款编辑器完整地实现了C++”，那时候很多东西没有标准化这么说当然是可以的。但放到标准化之后的今天，这条流言好像也不假。标准虽然在2011就提出了，但完全实现和普及已经是几年之后的事情了。之后的C++标准委员会就像打了鸡血一样，每隔三年就制定一个新标准C++14，C++17。C++20也已经FC（feature complete）了。新的标准让C++更强大，更优雅，更高效，但这一切的代价就是用户的学习成本也陡然上升，并且会有一些抵触情绪，拒绝接受新事物。任何人都不能否认现代C++变得更难了，如果有谁和你说他精通C++，你可以反问他是不是还在用VC98。反正我只敢说略懂皮毛。</p>



<p>以为这期节目就是听花花说书吗？当然不只是这些，下面花花作为一名普通C++用户给大家列举一些现代C++（C++11/14/17）一些好用的语法、类和函数，也欢迎大家留言补充。</p>



<h2><strong>1. std::unordered_map / std::unordered_set C++11</strong></h2>



<p>想不到吧，hashtable是在C++11才正式标准化的，虽然之前各编译器都有支持，但毕竟不是标准版。unordered_*提供了O(1)时间的查找、插入和删除。是一个非常高效的数据结构（C用户哭晕在厕所）。为什么叫unorderd_map这么奇怪的一个名字而不直接叫hash_map呢？只是为了告诉用户key是无序的吗？标准委员会给出的回答是：hash_map已经被各大vendor抢注了，同名容易造成冲突… 哎，谁让你这么晚才标准化呢！？域名抢注要趁早！<br>Java对应：HashMap，HashSet<br>Python对应：dict, set</p>



<h2><strong>2. initializer_list C++11</strong></h2>



<p>initializer_list方便了（容器）对象的初始化</p>



<p>int a = 2; // Before, assignment<br>int a{2}; // After, construction</p>



<p>vector&lt;int&gt; v; // Before<br>v.push_back(1); <br>v.push_back(2);<br>v.push_back(3);</p>



<p>vector&lt;int&gt; v = {1,2,3}; // After, assignment<br>vector&lt;int&gt; v{1,2,3}; // After, construction<br>对于vector&lt;int&gt; v{1,2,3}; 编译器做了两件事情：<br>1. 用{1,2,3}字面量创建 initializer_list&lt;int&gt; l<br>2. 调用vector&lt;int&gt;的拷贝构造函数，传入l<br>所以说使用initializer_list还是有一些些overhead的</p>



<p>pair&lt;int, float&gt; p{1, 3.14}; // After<br>map&lt;string, int&gt; m{{&#8220;hello&#8221;, 1}, {&#8220;world&#8221;, 2}}; // After</p>



<p>vector&lt;int&gt; foo() {  // Before<br>  set&lt;int&gt; s = &#8230;<br>  return vector&lt;int&gt;(begin(s), end(s)); <br>} <br>vector&lt;int&gt; foo() { // After<br>  set&lt;int&gt; s = &#8230;<br>  return {begin(s), end(s)}; <br>} </p>



<p>Java对应：多种不同方法&#8230;<br>Python对应：[], (), {}</p>



<h2><strong>3. auto 关键词 C++11</strong></h2>



<p>新增的auto关键词让人又爱又恨，编译器做了类型推断省去了冗长的类型名称的拼写，但需谨慎使用。</p>



<p>int a = 2;<br>auto a = 2; // a is int<br><br>float a = 2; // implicit conversion<br>auto a = 2; // a is int not float<br>auto a = 2.0; // a is double not float<br>auto a = 2.0f; // a is flot</p>



<p>auto v{1,2,3}; // does not compile<br>auto v = {1,2,3}; // v is initializer_list not vector<br>auto v = vector&lt;int&gt;{1,2,3,4}; // ok, but longer<br>vector&lt;int&gt; v{1,2,3,4}; // best</p>



<p>std::unique_ptr&lt;Foo&gt; p = std::make_unique&lt;Foo&gt;(&#8230;); // Before<br>auto p = std::make_unique&lt;Foo&gt;(&#8230;); // OK, shorter</p>



<p>有多少人是被iterator劝退的？<br>for (std::unordered_map&lt;std::string, int&gt;::const_iterator it = s.begin(); it != s.end(); ++it) // Before<br>for (auto it = s.begin(); it != s.end(); ++it) // After</p>



<p>Java对应：var Java10<br>Python对应：傲娇地说：类型是神马？</p>



<h2><strong>4. Structured Binding C++17</strong></h2>



<p>有了类型推断和auto关键词之后我们就可以做结构化绑定了</p>



<p>// Before<br>pair&lt;int, float&gt; p(1, 3.14); <br>int x = p.first;<br>float y = p.second;</p>



<p>// After<br>auto [x, y] = p; // must use auto<br>// x is int, x = 1;<br>// y is float, y = 3.14</p>



<p>// Before<br>set&lt;int&gt; s; <br>auto kv = s.insert(x);<br>auto it = kv.first; // iterator<br>bool success = kv.second; // inserted or not </p>



<p>// After<br>set&lt;int&gt; s;<br>auto [it, success] = s.insert(x);</p>



<p>我们在下面还会看到结构化绑定的身影</p>



<p>Java 对应：null<br>Python 对应：a, b = c, d</p>



<h2><strong>5. Range based for loop C++11</strong></h2>



<p>这也是一个非常好用的功能，配合上auto和structured binding简直了。<br><br>for (int i = 0; i &lt; v.size(); ++i) cout &lt;&lt; v[i] &lt;&lt; endl; // Before<br>for (int x : v) cout &lt;&lt; x &lt;&lt; endl; // After</p>



<p>for (std::unordered_map&lt;std::string, int&gt;::const_iterator it = s.begin(); it != s.end(); ++it) // Before<br>for (auto it = s.begin(); it != s.end(); ++it) // w/ auto<br>for (auto&amp;&amp; kv : s) cout &lt;&lt; kv.first &lt;&lt; &#8220;-&gt;&#8221; &lt;&lt; kv.second &lt;&lt; endl; // range based for loop<br>for (auto&amp;&amp; [k, v] : s) cout &lt;&lt; k &lt;&lt; &#8220;-&gt;&#8221; &lt;&lt; v &lt;&lt; endl; // w/ structured binding</p>



<p>Java 对应 for (int x : v)<br>Python 对应 for k, v in s.items()</p>



<h2><strong>6. Lambda Expressions C++11</strong></h2>



<p>我们可以用lambda表达式来捕获对象并创建closure（闭包）。</p>



<p>最简单的用法是创建function对象，你可以把它看做在函数里面定义函数。</p>



<pre class="crayon-plain-tag">auto sum = [](int a, int b) { return a + b; };
int s = sum(2, 3); // s = 5</pre>



<p>也可以用来自定义排序</p>



<pre class="crayon-plain-tag">bool comp(const Foo&amp; a, const Foo&amp; b) { return ... ; }
void Bar() {
  vector&lt;Foo&gt; v = ...
  sort(begin(v), end(v), comp); // Before
  sort(begin(v), end(v), [](const auto&amp; a, const auto&amp; b) { return ... ; }); // After
}</pre>



<p>通过捕获非状态参数，减少递归函数的参数</p>



<pre class="crayon-plain-tag">// Before
int dfs(int cur, const vector&lt;int&gt;&amp; nums, vector&lt;int&gt;&amp; seen) {
  ...
  dfs(cur + 1, nums, seen);
  ...
}

int solve(const vector&lt;int&gt;&amp; nums) {
  vectot&lt;int&gt; seen = ...
  return dfs(0, nums, seen);
}

// After
int solve(const vector&lt;int&gt;&amp; nums) {
  vector&lt;int&gt; seen = ...
  // &amp; captures nums, seen and dfs itself as reference
  function&lt;int(int)&gt;&gt; dfs = [&amp;](int cur) {
    ...
    dfs(cur + 1);
    ...
  };
  return dfs(0);
}</pre>



<p>Java 对应：-&gt;<br>Python 对应：lambda or nested functions</p>



<p>好了今天先讲到这里，给大家一点时间消化一下。也可以在YouTube/B站上看视频版本。</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/morden-cpp/">Morden C++</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/programming-language/morden-cpp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>花花酱 LeetCode 10. Regular Expression Matching</title>
		<link>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/</link>
					<comments>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Mon, 17 Sep 2018 15:59:41 +0000</pubDate>
				<category><![CDATA[Programming Language]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[hard]]></category>
		<category><![CDATA[matching]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[string]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=4007</guid>

					<description><![CDATA[<p>Problem Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'. '.' Matches any single character. '*' Matches zero&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/">花花酱 LeetCode 10. Regular Expression Matching</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1><strong>Problem</strong></h1>
<p>Given an input string (<code>s</code>) and a pattern (<code>p</code>), implement regular expression matching with support for <code>'.'</code> and <code>'*'</code>.</p>
<pre class="crayon:false ">'.' Matches any single character.
'*' Matches zero or more of the preceding element.
</pre>
<p>The matching should cover the <strong>entire</strong> input string (not partial).</p>
<p><strong>Note:</strong></p>
<ul>
<li><code>s</code> could be empty and contains only lowercase letters <code>a-z</code>.</li>
<li><code>p</code> could be empty and contains only lowercase letters <code>a-z</code>, and characters like <code>.</code> or <code>*</code>.</li>
</ul>
<p><strong>Example 1:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aa"
p = "a"
<strong>Output:</strong> false
<strong>Explanation:</strong> "a" does not match the entire string "aa".
</pre>
<p><strong>Example 2:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aa"
p = "a*"
<strong>Output:</strong> true
<strong>Explanation:</strong> '*' means zero or more of the precedeng element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
</pre>
<p><strong>Example 3:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "ab"
p = ".*"
<strong>Output:</strong> true
<strong>Explanation:</strong> ".*" means "zero or more (*) of any character (.)".
</pre>
<p><strong>Example 4:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "aab"
p = "c*a*b"
<strong>Output:</strong> true
<strong>Explanation:</strong> c can be repeated 0 times, a can be repeated 1 time. Therefore it matches "aab".
</pre>
<p><strong>Example 5:</strong></p>
<pre class="crayon:false"><strong>Input:</strong>
s = "mississippi"
p = "mis*is*p*."
<strong>Output:</strong> false
</pre>
<h1><strong>Solution 1: Recursion</strong></h1>
<p>Time complexity: O((|s| + |p|) * 2 ^ (|s| + |p|))</p>
<p>Space complexity: O(|s| + |p|)</p>
<p><div class="responsive-tabs">
<h2 class="tabtitle">C++</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua, 14 ms
class Solution {
public:
  bool isMatch(string s, string p) {
    return isMatch(s.c_str(), p.c_str());
  }
private:
  bool isMatch(const char* s, const char* p) {
    if (*p == '\0') return *s == '\0';
        
    // normal case, e.g. 'a.b','aaa', 'a'
    if (p[1] != '*' || p[1] == '\0') {
      // no char to match
      if (*s == '\0') return false;

      if (*s == *p || *p == '.')
        return isMatch(s + 1, p + 1);
      else
        return false;
    }
    else {
      int i = -1;
      while (i == -1 || s[i] == p[0] || p[0] == '.') {
          if (isMatch(s + i + 1, p + 2)) return true;
          if (s[++i] == '\0') break;
      }
      return false;
    }
    
    return false;
  }
};</pre><p></div></div></p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/">花花酱 LeetCode 10. Regular Expression Matching</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/programming-language/leetcode-10-regular-expression-matching/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TIOBE Index History (2001-2018)</title>
		<link>https://zxi.mytechroad.com/blog/programming-language/tiobe-index-history-2001-2018/</link>
					<comments>https://zxi.mytechroad.com/blog/programming-language/tiobe-index-history-2001-2018/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Wed, 08 Aug 2018 09:55:54 +0000</pubDate>
				<category><![CDATA[Programming Language]]></category>
		<guid isPermaLink="false">https://zxi.mytechroad.com/blog/?p=3474</guid>

					<description><![CDATA[<p>Data Source: https://www.tiobe.com/tiobe-index/ Preprocessing: Sublime + Python Visualization: https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js &#160;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/tiobe-index-history-2001-2018/">TIOBE Index History (2001-2018)</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><iframe width="500" height="375" src="https://www.youtube.com/embed/ZkP4sv3H6g8?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></p>
<p>Data Source: <a href="https://www.tiobe.com/tiobe-index/">https://www.tiobe.com/tiobe-index/</a></p>
<p>Preprocessing: Sublime + Python</p>
<p>Visualization: <a href="https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js">https://github.com/Jannchie/Historical-ranking-data-visualization-based-on-d3.js</a></p>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/programming-language/tiobe-index-history-2001-2018/">TIOBE Index History (2001-2018)</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/programming-language/tiobe-index-history-2001-2018/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
