Preskoči na glavno vsebino


Go's concurrency in a dynamic language Rye

  The Rye programming language is a dynamic scripting language based on REBOL’s ideas, taking inspiration from the Factor language and Unix shell. Rye is written in Go and inherits Go’s concurrency capabilities, including goroutines and channels. Recently, Rye gained support for Go’s select and waitgroups. Building blocks Goroutines Goroutines are lightweight threads of execution that are managed by the Go/Rye runtime. They operate independently, allowing multiple tasks to run concurrently without blocking each other. Creating a Goroutine in Rye is straightforward. The go keyword is used to launch a new Goroutine, followed by the Rye function to be executed concurrently. For instance, the following code snippet creates and starts a Goroutine that prints a message after a delay: ; # Hello Goroutine print "Starting Goroutine" go does { ; does creates a function without arguments sleep 1000 print "Hello from Goroutine!" } print "Sleepi
Najnovejše objave

New website, reference, documentation, VS Code extension ...

Work on testing and improving quality of Rye core continues. We keep unifying interfaces, adding missing type support to built-in functions, exception handling, doc-strings ... We are writing tests that autogenerate function reference : A week or so ago I also created first proper front page for Rye. Fellow contributor keeps tweaking github actions to include Go linters, unit tests and other checks. He also added support for binary releases and binary docker images. - binary release - binary docker image Now, since function reference is no way to understand the language itself I started writing bigger documentation effort, Meet Rye Rye structures is the most interesting page for now. There is also a first version of VS Code extension available that offers syntax highlighting. You can find it in VS Code Exten

Talking in Rye over Telegram

Telegram is a popular messaging app that offers a variety of solid clients and features, including chatbots. In this blog post, we will explore how to create a Telegram chatbot that we can communicate with, in Rye language - yeah, we’re fans :=). Starting with an Echo Bot Our first step in creating a Telegram chatbot will be to create a simple Echo bot. An Echo bot simply echoes back whatever message it receives. This is a good starting point for learning how to create more complex bots. Setting up a new bot in Telegram involves interacting with the BotFather on Telegram itself to get a token, which you’ll save in a .token file. Rye uses Go’s telegram-bot-api library quite direct. With a few helper functions the example code could be shorter and more high level, but this better shows us what is going on behind the scenes.   So we load the API token, create an instance of the Telegram-bot and define its on-update method. In it we parse the ‘Message’ out of the JSON mess

Receiving emails with Go's smtpd and Rye

This goes a while back. At some project for user support, we needed to receive emails and save them to appropriate databases. The best option back in the day seemed project Lamson . And it worked well ever since. It was written in Python by then quite known programmer Zed Shaw. It worked like a Python based SMTP server, that called your handlers when emails arrived. It was sort of Ruby on Rails for email. We were using this ever since. Now our system needs to be improved, there are still some emails or attachments that don't get parsed correctly. That isn't the problem of Lamson, but of our code that parses the emails. But Lamson development has been passive for more than 10 years. And I am already moving smaller utilities to Rye.  Rye uses Go, and Go has this nice library smtpd , which seems like made for this task. I integrated it and parsemail into Rye and tested it in the Rye console first. Interesting function here is enter-console , that can put you into Rye console any

Ryelang - controlled file serving example and comparison to Python

This is as anecdotal as it gets, but basic HTTP serving functions in Rye seem to be working quite OK. They do directly use the extremely solid Go 's HTTP functions, so that should be somewhat expected. I made a web-server with few lines of Rye code 3 months ago and the process was running ever since and served more than 30.000 pages. If not else, it  seems there are no inherent memory leaks in Rye interpreter. Those would probably show up in a 3 month long running process? And now I got another simple project. I needed to make a HTTP API for some mobile app. API should accept a key, and return / download a binary file in response if the key is correct. Otherwise it should return a HTTP error. So I strapped in and created Rye code below. I think I only needed to add generic methods stat and size? , all other were already implemented, which is a good sign. Of course, we are in an age of ChatGPT, so I used it to generate the equivalent  Python code. It used the elegant

Ryelang Reddit Group

If you are an occasional visitor of this blog, you maybe noticed, that I haven't posted in a while. This was not because of the lack of activity on my end though.  I started a Reddit group /r/ryelang at the end of February, and I was very active over there since then. I wrote over 20 Reddit posts on the group. Few examples: Adding Regexp to Ryelang Rye basics: a gentle introduction trough Python examples #1 Rye basics: a gentle introduction trough Python examples #2 Chat-like interface for the terminal in Rye Rye's Http server can now handle file uploads (example) Rye, meet GPT3 ... and vice versa :)    Spreadsheet datatype in Ryelang First version of Semantic search with Rye So, please visit our reddit group and if you are interested, comment, like and become a member! :) And some screenshots:    

Chat-like interface for the terminal in Rye

Rye is at this point focused on becoming a useful tool for use in Linux shell (the server/back-end tasks). So I integrate it with the libraries that make sense there and I also like to improve the whole terminal capability of Rye.   I got some idea (one of many of this kind, we will see how this one goes :P) that I could make a set of interactive tasks, that could teach my two kids (and others potentially) about how the computer works, and how you can work with a computer through Linux shell. For this I would need some sort of interactive terminal based user interface, I imagined something chat like. See how the "game" looks in action with asciinema . Above is a small demo of the idea after a day of work on it. It's in form o a very very small text based adventure game :). To make this work I needed to create basically 2 functions, chat (and chat-lines for now) and choice. I wanted to use short, context specific words to do all this so I created it inside a chat-tui co