<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ethan Olchik</title>
    <description>The latest articles on DEV Community by Ethan Olchik (@ethanolchik).</description>
    <link>https://dev.to/ethanolchik</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F718442%2F673e77fe-3e46-4475-ae05-58cb094767e8.png</url>
      <title>DEV Community: Ethan Olchik</title>
      <link>https://dev.to/ethanolchik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ethanolchik"/>
    <language>en</language>
    <item>
      <title>Peregrine Update - The Python-like programming language that's as fast as C++</title>
      <dc:creator>Ethan Olchik</dc:creator>
      <pubDate>Sun, 16 Jan 2022 22:31:09 +0000</pubDate>
      <link>https://dev.to/ethanolchik/peregrine-update-the-python-like-programming-language-thats-as-fast-as-c-2bf1</link>
      <guid>https://dev.to/ethanolchik/peregrine-update-the-python-like-programming-language-thats-as-fast-as-c-2bf1</guid>
      <description>&lt;p&gt;&lt;em&gt;"Blazing-Fast Language for the Blazing-Fast World" - Peregrine Motto&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hey guys, it's been a long time! If you don't already know me, my name is Ethan and I'm one of a few &lt;a href="https://github.com/Peregrine-lang/Peregrine"&gt;Peregrine Programming Language&lt;/a&gt; developers. Over the past few months, we've managed to surpass the progress in the 1st write (code for the 1st write has been deleted) and add new features. This post will be discussing the progress that has been made.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Peregrine
&lt;/h2&gt;

&lt;p&gt;If you know Python, you know how easy it is. However, it also comes with a big downgrade. Python is slow, and I'm pretty sure every python developer knows this by now. This is kind of annoying. That's where Peregrine comes in. Me and 11 friends have been working on Peregrine for the past few months. Peregine's syntax is very similar to Python's, and it gets trans-compiled to C++, thus making it as fast as C++. Some of you may know Peregrine as the "Language that's as fast as C", however we've decided to trans-compile it to C++ instead of C.&lt;/p&gt;

&lt;h2&gt;
  
  
  New Language Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Class
&lt;/h3&gt;

&lt;p&gt;After a lot of work, &lt;a href="https://github.com/peregrine-lang/Peregrine/commit/d4de6e4ab15e866b044dab77009ce9b4b54fae23"&gt;classes have been added to Peregrine&lt;/a&gt;. They essentially act the same way you'd expect them to act in python. Here's a quick example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Vector3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x=%d, y=%d, z=%d&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is pretty self-explanatory. If you put this code into python, you'd just have to change &lt;code&gt;printf&lt;/code&gt; to &lt;code&gt;print&lt;/code&gt; and change the string formatting and then it works like a charm.&lt;/p&gt;

&lt;p&gt;Classes also have magic methods that allow operator overloading, iterators, context managers etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enum
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/peregrine-lang/Peregrine/commit/b953ceba25a84c011068567d0befa7eae699eccc"&gt;Enums have also been added to Peregrine&lt;/a&gt;. They work like any other enum in any other language.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;RGB&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;RED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;144&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;BLUE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;OTHER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, &lt;code&gt;RGB.GREEN&lt;/code&gt; = &lt;code&gt;155&lt;/code&gt;, because the value is defaulted to the previous value + 1. &lt;code&gt;RGB.OTHER&lt;/code&gt; = &lt;code&gt;164&lt;/code&gt;, because 155+9=164.&lt;/p&gt;

&lt;h3&gt;
  
  
  Union
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/peregrine-lang/Peregrine/commit/599d12db39027a0d22f711a6bba69088cf7d5da3"&gt;Unions&lt;/a&gt;, like in C, C++ etc... are data types that allows the storage of different data types in the same memory location.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;abc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;_x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;abc&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;abc&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: you don't have to create a pointer to a variable of type &lt;code&gt;abc&lt;/code&gt; in order to assign and access it's fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  custom decorators
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/peregrine-lang/Peregrine/commit/52b6129c1d770b90ff6e6b6fb6113e3466b06f9c"&gt;Peregrine supports user-defined decorators&lt;/a&gt;, just like Python. Here's an example that's taken from &lt;a href="https://github.com/peregrine-lang/Peregrine/blob/main/can_comp.pe"&gt;can_comp.pe&lt;/a&gt;, but slightly modified to improve readability (that file is hardcoded):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;def&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;
&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;def&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;decorator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
        &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Answer is %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;

&lt;span class="n"&gt;variable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;

&lt;span class="nd"&gt;@decorator&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dec_test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;dec_test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see here, you must define a type for the function being decorated and a type for the return type of the decorator (should return a function).&lt;/p&gt;

&lt;p&gt;The program would output &lt;code&gt;Answer is 100&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  More
&lt;/h2&gt;

&lt;p&gt;You can find some more code examples in &lt;a href="https://github.com/peregrine-lang/Peregrine/blob/main/can_comp.pe"&gt;can_comp.pe&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Planned features
&lt;/h2&gt;

&lt;p&gt;Here are some features that are planned to be implemented into peregrine before the first release:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structs&lt;/li&gt;
&lt;li&gt;Python ecosystem in Peregrine

&lt;ul&gt;
&lt;li&gt;You will be able to use any python module in Peregrine&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Imports&lt;/li&gt;
&lt;li&gt;Standard Library&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Peregrine is planned to release version 0.0.1 sometime between March and April, so make sure to show some support by starring the &lt;a href="https://github.com/peregrine-lang/peregrine"&gt;repo&lt;/a&gt; and make sure to press on the "Watch" button so you don't miss any updates.&lt;/p&gt;

&lt;p&gt;We would greatly appreciate any contributions, so if you find something that you can improve, open a pull-request! You can also check out our &lt;a href="https://github.com/peregrine-lang/peregrine/issues/"&gt;open issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks so much for reading!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>cpp</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Peregrine Rewrite - The python-like language that's as fast as C</title>
      <dc:creator>Ethan Olchik</dc:creator>
      <pubDate>Sat, 09 Oct 2021 17:31:42 +0000</pubDate>
      <link>https://dev.to/ethanolchik/peregrine-rewrite-the-python-like-language-that-s-as-fast-as-c-1bfp</link>
      <guid>https://dev.to/ethanolchik/peregrine-rewrite-the-python-like-language-that-s-as-fast-as-c-1bfp</guid>
      <description>&lt;p&gt;Hey guys!&lt;br&gt;
My name is Ethan, and I'm one of 12 Peregrine developers. Some of you may already know what Peregrine is, some of you don't, but this article is going to explain the current state at where Peregrine is at.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Peregrine
&lt;/h2&gt;

&lt;p&gt;If you know Python, you know how easy it is. However, it also comes with a big downgrade. Python is slow, and I'm pretty sure every python developer knows this by now. This is kind of annoying. That's where Peregrine comes in. Me and 12 other friends have been working on Peregrine for the past few months, starting as a hobby project. Peregine's syntax is very similar to Python's, and it gets trans-compiled to C, thus making it as fast as C.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update on Peregrine's current status
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Name
&lt;/h3&gt;

&lt;p&gt;Peregrine's name has been getting more popular ever since I posted &lt;a href="https://dev.to/ethanolchik/the-swallow-programming-language-a-python-like-language-that-s-as-fast-as-c-43j7"&gt;my last article&lt;/a&gt;, and a lot of things has been changed. The most noticeable thing that has changed is the name. A lot of people recommended a name change from Swallow, so it is now called Peregrine which we think suits the language more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rewrite
&lt;/h3&gt;

&lt;p&gt;You probably already know this from the title - Peregrine is getting a rewrite. We are writing this in Python. The Lexer is already complete. We are going to rebuild the parser and codegen so it will be more efficient, and hopefully faster. This is all being done on &lt;a href="https://github.com/peregrine-lang/Peregrine/tree/rewrite"&gt;a different branch&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Peregrine as a scripting language
&lt;/h3&gt;

&lt;p&gt;Peregrine uses &lt;a href="//bellard.org/tcc"&gt;tcc&lt;/a&gt; as a secondary backend to allow it to be used as a scripting language. It uses &lt;a href="https://github.com/peregrine-lang/Peregrine/blob/rewrite/Peregrine/vlibtcc/vlibtcc.v"&gt;vlibtcc&lt;/a&gt; which is a V wrapper for libtcc. It was implemented yesterday and is still at a very early stage. Some features do not work with it, so it is not recommended to use it at this stage, however it will be updated and fixed in the rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Q: Is Peregrine a hobby project?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  A: As of 9/10/2021, Peregrine is no longer a hobby project.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Q: Can I join the developer team?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  A: Peregrine is not in need of new Developers at the moment, however you can always contribute to the repository.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Q: Is there a discord server?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  A: Yes, you can join it by &lt;a href="https://discord.gg/J8yvySvCRx"&gt;clicking here&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Q: Why not contribute to Nim or Julia?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  A: Peregrine has different goals than Nim and Julia. They also achieve different things in different ways.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Q: Will all python modules be compatible with Peregrine?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  A: Yes, that's the plan. It will take a long time to implement as it is a difficult task, however it will be there.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Got any more questions that you would like to be answered?
&lt;/h2&gt;

&lt;p&gt;You can open a &lt;a href="https://github.com/peregrine-lang/Peregrine/discussions"&gt;new discussion&lt;/a&gt; that discusses your questions. You can also email &lt;a href="mailto:saptakbhoumik@gmail.com"&gt;saptakbhoumik@gmail.com&lt;/a&gt;, or &lt;a href="https://discord.gg/J8yvySvCRx"&gt;join our discord server&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Peregrine is planned to release version 0.0.1 sometime in March, so make sure to show some support by starring the &lt;a href="https://github.com/peregrine-lang/peregrine"&gt;repo&lt;/a&gt; and make sure to press on the "Watch" button so you don't miss any updates.&lt;/p&gt;

&lt;p&gt;We would greatly appreciate any contributions, so if you find something that you can improve, open a pull-request! You can also check out our open issues. Please make sure you contribute to the &lt;a href="https://github.com/peregrine-lang/peregrine/tree/rewrite"&gt;rewrite branch&lt;/a&gt;, as we are going to replace the main branch with the rewrite.&lt;/p&gt;

&lt;p&gt;Thanks so much for reading &amp;lt;3!&lt;/p&gt;

</description>
      <category>c</category>
      <category>programming</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Peregrine programming language - A Python-like language that's as fast as C.</title>
      <dc:creator>Ethan Olchik</dc:creator>
      <pubDate>Mon, 04 Oct 2021 05:45:39 +0000</pubDate>
      <link>https://dev.to/ethanolchik/the-swallow-programming-language-a-python-like-language-that-s-as-fast-as-c-43j7</link>
      <guid>https://dev.to/ethanolchik/the-swallow-programming-language-a-python-like-language-that-s-as-fast-as-c-43j7</guid>
      <description>&lt;p&gt;Hey guys!&lt;/p&gt;

&lt;p&gt;I'm Ethan, I'm one of 10 Peregrine developers. This post is gonna be about some updates we've added into Peregrine lately.&lt;/p&gt;

&lt;h2&gt;
  
  
  About
&lt;/h2&gt;

&lt;p&gt;If you know Python, you know how easy it is. However, it also comes with a big downgrade. Python is slow, and I'm pretty sure every python developer knows this by now. This is kind of annoying. That's where Peregrine comes in. Me and 8 other friends have been working on Peregrine for the past few months. Peregines syntax is very similar to Python's, and it gets trans-compiled to C, thus making it as fast as C. Below I've written 2 programs, one in Peregrine and one in Python.&lt;/p&gt;

&lt;h4&gt;
  
  
  Peregrine
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;# Peregrine has type inference!
&lt;/span&gt;    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;function return types can be omitted.&lt;/p&gt;

&lt;h4&gt;
  
  
  Python
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These two programs are almost the same, which makes it so easy for Python users to switch to. Now, you might be asking: "How much faster is Peregrine?" Well, to answer your question, here are the results:&lt;/p&gt;

&lt;h4&gt;
  
  
  Peregrine:
&lt;/h4&gt;

&lt;p&gt;Executed in: 1.06 secs&lt;/p&gt;

&lt;h4&gt;
  
  
  Python:
&lt;/h4&gt;

&lt;p&gt;Executed in: 32.30 secs&lt;/p&gt;

&lt;p&gt;As you can see, Peregrine is significantly faster than Python. It is around 30x faster than python, without optimization when running this program.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new?
&lt;/h2&gt;

&lt;p&gt;Here are some of Peregrine's newest features:&lt;/p&gt;

&lt;h3&gt;
  
  
  Type Inference
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Type_inference"&gt;Type Inference&lt;/a&gt; is one of Pergrine's newest features. This allows Peregrine code to be written with simplicity.&lt;/p&gt;

&lt;h3&gt;
  
  
  if/else/match
&lt;/h3&gt;

&lt;p&gt;Although this may seem like a standard feature in any programming language, it does take time to add these features which is why I'm acknowledging it. Not much to say about it since it's in every programming language.&lt;/p&gt;

&lt;h2&gt;
  
  
  New-ish Features
&lt;/h2&gt;

&lt;p&gt;Let's talk more about the features that are currently available in Peregrine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ccode
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Ccode&lt;/code&gt; allows C code to be ran in Peregrine. Here is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;Ccode&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Ccode&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{x}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# prints 2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, any variables declared outside the &lt;code&gt;Ccode&lt;/code&gt; block can be used within &lt;code&gt;Ccode&lt;/code&gt; and vice versa. This also means you can import any C library through &lt;code&gt;Ccode&lt;/code&gt; and use it in Peregrine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inline Assembly
&lt;/h3&gt;

&lt;p&gt;You can also have inline assembly in Peregrine. Here is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;arg1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;
    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;arg2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;It should add 45 and 50 using asm and print it&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;asm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;addl %%ebx, %%eax;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;=a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%lld&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prints &lt;code&gt;90&lt;/code&gt;, as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  More
&lt;/h3&gt;

&lt;p&gt;You can find some more examples in the &lt;a href="https://github.com/peregrine-lang/Peregrine/tree/main/Peregrine/tests"&gt;Peregrine test folder&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Planned Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Structs&lt;/li&gt;
&lt;li&gt;More decorators for different purposes&lt;/li&gt;
&lt;li&gt;Python ecosystem in Peregrine

&lt;ul&gt;
&lt;li&gt;You will be able to use any python module in Peregrine&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Peregrine is planned to release version 0.0.1 sometime in March, so make sure to show some support by starring the &lt;a href="https://github.com/peregrine-lang/peregrine"&gt;repo&lt;/a&gt; and make sure to press on the "Watch" button so you don't miss any updates.&lt;/p&gt;

&lt;p&gt;We would greatly appreciate any contributions, so if you find something that you can improve, open a pull-request! You can also check out our &lt;a href="https://github.com/peregrine-lang/peregrine/issues/"&gt;open issues&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks so much for reading!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>programming</category>
      <category>c</category>
    </item>
  </channel>
</rss>
