A trip on the rusty D-Bus

Intro 🚌 D-Bus is a message bus system and standard for inter-process communication, mostly used in Linux desktop applications. Both Qt and GLib have high-level abstractions for D-Bus communication, and many of the desktop services we rely on export D-Bus protocols. Also the omnipresent systemd can be only interfaced via D-Bus API. However, D-Bus has its shortcomings — namely a lack of documentation. In this article we’ll explore how to write our own D-Bus Service in Rust and connect it to our D-Bus client. ...

October 4, 2023 Â· Andrea Manzini

il linguaggio Lua: parte 14

segue dalla parte 13 Coroutine Come approccio alla programmazione concorrente, il linguaggio Lua non ha meccanismi interni per gestire nativamente i thread, ma si può appoggiare a ciò che offre il sistema operativo sottostante. Lua invece internamente offre il supporto alle coroutine: un programma Lua può avere diversi percorsi di esecuzione ‘parallela’ ognuno col proprio stack e variabili locali ma che condividono risorse e variabili globali con le altre coroutine. La prima differenza sostanziale col modello classico dei thread è che in un determinato istante ‘gira’ una e una sola coroutine, mentre in un sistema multiprocessore ci possono essere più thread in esecuzione in contemporanea. ...

February 15, 2019 Â· Andrea Manzini

il linguaggio Lua: parte 13

segue dalla parte 12 Upvalue e Closure Per chi non ha familiarità con i concetti di programmazione funzionale questi termini possono sembrare un po’ oscuri; vediamo di chiarirli con un semplice esempio: -- definisco una funzione che parte da un numero N e conta alla rovescia function CreaContatore(N) local v=N local function conta(x) if v>=x then v=v-x end return v end return conta end -- creo qualche istanza: contaDaDieci=CreaContatore(10) contaDaCento=CreaContatore(100) print(contaDaDieci(1)) 9 print(contaDaCento(1)) 99 print(contaDaCento(1)) 98 print(contaDaDieci(1)) 8 print(contaDaDieci(2)) 6 print(contaDaCento(10)) 88 osserviamo le variabili N,v che usate dalla funzione interna: non sono locali, ma nemmeno globali… Sono upvalue, ovvero riferimenti che provengono da uno stackframe esterno. Quando una funzione usa variabili definite in uno scope lessicale a livello superiore, Lua provvede a memorizzare lo stato, tecnicamente spostando la gestione degli upvalue dallo stack in una zona di memoria dedicata, perché altrimenti al ritorno della funzione lo stack verrebbe perso. Ogni funzione che usa uno o più upvalue è chiamata closure. Si tratta di una caratteristica molto potente perché ci permette ad esempio di implementare callback e sandbox. Un esempio a puro scopo didattico: ...

January 19, 2019 Â· Andrea Manzini

il linguaggio Lua: parte 12

segue dalla parte 11 segnalazioni lunari Tra le rocks più interessanti citiamo quelle che permettono le operazioni di networking, come luasocket; salendo di livello, spicca il Kepler project, che comprende un intero stack per applicazioni web: Lapis micro framework, il framework MVC Sailor, e TurboLua, un tool per costuire velocissimi microservizi REST . Concludiamo la panoramica sulle librerie accennando ai moduli per creare interfacce grafiche; al pari degli altri linguaggi di scripting, Lua offre binding per i maggiori toolkit grafici: curses, GTK, QT, fltk, wx si usano come negli altri linguaggi e sarebbe qui tedioso illustrarne le modalità. Ci focalizzeremo invece su due progetti peculiari, rispettivamente Lua Visual Controls (VCLua) e LÖVE , che hanno l’ulteriore pregio di essere leggeri e snelli. Scarichiamo e installiamo VCLua: ...

October 24, 2018 Â· Andrea Manzini