The Peregrine programming language - A Python-like language that's as fast as C.
Tags: showdev, python, programming, c
Published: 2021-10-04 05:45:39

Hey guys!

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

## About
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.

#### Peregrine
```python
def fib(int n) -> int :
    if n <= 0:
        return 1
    return fib(n-1) + fib(n-2)

def main():
    count = 0 # Peregrine has type inference!
    int res = 0

    while count < 40:
        res = fib(count)
        count++
```
function return types can be omitted.

#### Python
```python
def fib(n):
    if n <= 0:
        return 1
    return fib(n-1) + fib(n-2)

res = 0
for c in range(0, 40):
    res = fib(c)

```

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:

#### Peregrine:
Executed in: 1.06 secs

#### Python:
Executed in: 32.30 secs

As you can see, Peregrine is significantly faster than Python. It is around 30x faster than python, without optimization when running this program.

## What's new?
Here are some of Peregrine's newest features:

### Type Inference
[Type Inference](https://en.wikipedia.org/wiki/Type_inference) is one of Pergrine's newest features. This allows Peregrine code to be written with simplicity.

### if/else/match
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.

## New-ish Features
Let's talk more about the features that are currently available in Peregrine.
### Ccode
`Ccode` allows C code to be ran in Peregrine. Here is an example:
```python
def main():
    x = 1
    Ccode x++; Ccode
    print("{x}\n") # prints 2
```
As you can see, any variables declared outside the `Ccode` block can be used within `Ccode` and vice versa. This also means you can import any C library through `Ccode` and use it in Peregrine.

### Inline Assembly
You can also have inline assembly in Peregrine. Here is an example:
```python
def main():
    int arg1 = 45
    int arg2 = 50
    int add = 0
    print("It should add 45 and 50 using asm and print it\n")
    asm("addl %%ebx, %%eax;" : "=a" (add) : "a" (arg1) , "b" (arg2))
    printf("%lld", add)
```
This prints `90`, as expected.

### More
You can find some more examples in the [Peregrine test folder](https://github.com/peregrine-lang/Peregrine/tree/main/Peregrine/tests)

## Planned Features
- Structs
- More decorators for different purposes
- Python ecosystem in Peregrine
    * You will be able to use any python module in Peregrine

## Conclusion
Peregrine is planned to release version 0.0.1 sometime in March, so make sure to show some support by starring the [repo](https://github.com/peregrine-lang/peregrine) and make sure to press on the "Watch" button so you don't miss any updates.

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](https://github.com/peregrine-lang/peregrine/issues/)

Thanks so much for reading!