Category: Entwicklung

Pahole: Ein leistungsstarkes Tool zur Inspektion des Speicherlayouts von C/C++-Datenstrukturen

2025-04-19

Dieser Blogbeitrag stellt pahole vor, ein leistungsstarkes Tool zur Analyse des Speicherlayouts von C/C++-Datenstrukturen, einschließlich Details zu Padding und Ausrichtung. Durch das Lesen der vom Compiler generierten DWARF-Debugging-Informationen zeigt pahole visuell, wie Datenstrukturen im Speicher angeordnet sind, und weist auf "Löcher" hin, die vom Compiler eingefügt wurden, um die Speicheranforderungen zu erfüllen. Dies ist entscheidend für die Optimierung der Code-Cache-Auslastung und die Reduzierung von falschem Cache-Zeilen-Sharing. Der Beitrag zeigt auch, wie pahole installiert und wie seine Befehlszeilenoptionen verwendet werden, um Strukturgrößen zu analysieren, die Reihenfolge der Member zur Optimierung des Speicherlayouts anzupassen und Speicherlayoutunterschiede bei verschiedenen Cache-Zeilengrößen zu untersuchen.

Entwicklung Speicherlayout

JavaScript-Views auf die harte Tour bauen

2025-04-19
JavaScript-Views auf die harte Tour bauen

Dieser Artikel stellt ein Muster zum Erstellen von Views in reinem JavaScript vor, wobei die Schwerpunkte auf Wartbarkeit, Performance und Spaß liegen, während die Komplexität von Frameworks wie React, Vue oder lit-html vermieden wird. Dieser Ansatz verwendet direkten imperativen Code für hohe Performance, benötigt keine Abhängigkeiten, bietet hervorragende Portabilität und Wartbarkeit und unterstützt alle Browser. Der Artikel beschreibt detailliert die Struktur einer View-Komponente, einschließlich Template, Klonfunktion, Initialisierungsfunktion, DOM-Variablen, DOM-Views, Zustandsvariablen, DOM-Update-Funktionen und Zustands-Update-Funktionen, sowie Namenskonventionen und Best Practices, um die Lesbarkeit und Wartbarkeit des Codes zu gewährleisten.

Entwicklung

EdgeBit: KI-Agenten für effiziente automatische Behebung von Abhängigkeiten

2025-04-18

EdgeBit ist eine Sicherheitsplattform, die Anwendungsentwicklungsteams bei der Suche und Behebung von Sicherheitslücken unterstützt. Die Funktion „Automatische Behebung von Abhängigkeiten“ enthält eine extrem präzise Erreichbarkeits-Engine, um die Auswirkungen auf Ihre App zu identifizieren. Die meisten Updates haben keine Auswirkungen, sodass EdgeBit-Nutzer ihre Bemühungen auf wirkungsvolle Upgrades konzentrieren können. Dies bedeutet mehr Zeit für die eigentliche Aufgabe und weniger Zeit für die Verwaltung von Abhängigkeiten. Dieser Beitrag behandelt die Identifizierung von Bereichen, in denen 1) fokussierte Tools eingesetzt, 2) Fehler intelligent gehandhabt und 3) die Persistenz eines KI-Agenten für massive Effizienzsteigerungen genutzt werden können, wie wir es bei der automatischen Behebung von Abhängigkeiten getan haben, mit Daten zur Unterstützung.

Entwicklung

PDCurses: Eine plattformübergreifende Public-Domain-Curses-Bibliothek

2025-04-18
PDCurses: Eine plattformübergreifende Public-Domain-Curses-Bibliothek

PDCurses ist eine Public-Domain-Curses-Bibliothek, die DOS, OS/2, Windows-Konsole, X11 und SDL unterstützt. Sie implementiert die meisten Funktionen von X/Open und System V R4 Curses und ermöglicht die Neukompilierung von textbasierten Curses-Programmen zu GUI-Anwendungen über ihre X11- und SDL-Ports. Hauptsächlich als Quellcode verteilt, können auch vorkompilierte Bibliotheken verfügbar sein. Die neueste Version finden Sie unter https://pdcurses.org/.

Entwicklung Curses-Bibliothek

Bram Moolenaar zum Gedenken: Eine Geschichte von Vi und Vim

2025-04-18
Bram Moolenaar zum Gedenken: Eine Geschichte von Vi und Vim

Der Tod von Bram Moolenaar, dem Schöpfer von Vim, regt zu einer Reflexion über die reiche Geschichte der UNIX-Texteditoren an. Dieser Artikel verfolgt die Entwicklung von ed bis Vim und erzählt die Geschichten von Ken Thompsons ed, George Coulouris' em, Bill Joys vi und zahlreichen Vi-Klonen wie Stevie und Elvis. Ihre Entwicklung ist eng mit der Entwicklung von UNIX und der Informatik selbst verwoben und zeigt den bleibenden Geist von Open-Source-Software. Vim, ursprünglich ein Amiga-Port von Stevie, entwickelte sich zu einem leistungsstarken Editor, der bis heute weit verbreitet ist.

Entwicklung UNIX-Editoren

Python integriert die formal verifizierte Kryptografie-Bibliothek HACL*

2025-04-18

Nach 2,5 Jahren Arbeit hat Python erfolgreich die formal verifizierte kryptografische Bibliothek HACL* in seine Hash- und HMAC-Implementierungen integriert. Dieses Update ersetzt die vorherige SHA3-Implementierung, die eine CVE-Schwachstelle enthielt, und umfasst verschiedene Algorithmen wie Blake2, SHA3 und HMAC, wodurch die Sicherheit von Python deutlich verbessert wird. Das Projekt meisterte die Herausforderungen bei der Implementierung von Streaming-APIs und dem Build-System und implementierte auch die Behandlung von Speicherzuweisungfehlern. Dies zeigt das Potenzial der formalen Verifikation in großen realen Projekten.

Entwicklung

Good Karma Kit: Spenden Sie Ihre ungenutzte Rechenleistung für den guten Zweck

2025-04-18

Das Good Karma Kit ist ein Docker Compose-Projekt, das ungenutzte CPU-, Festplatten- und Bandbreitenressourcen auf Servern nutzt, um Rechenleistung für über zehn gemeinnützige Projekte bereitzustellen. Es umfasst Netzwerkprojekte wie Tor und i2p, verteilte Computerprojekte wie BOINC und Folding@home, Internet-Archivierungsprojekte wie ArchiveBox und Kiwix sowie verteilte Speicherprojekte wie IPFS und Storj. Benutzer können auswählen, an welchen Projekten sie teilnehmen möchten, und die Ressourcenzuweisung anpassen. Das Projekt zielt darauf ab, ungenutzte Ressourcen für wohltätige Zwecke einzusetzen und bietet Bestenlisten, um die Teilnahme zu fördern. Einige Projekte sind gemeinnützig, während andere Kryptowährungsbelohnungen anbieten.

Entwicklung

UML-Diagramme dekonstruieren Evans' DDD-Beispiel für den Frachtversand

2025-04-18
UML-Diagramme dekonstruieren Evans' DDD-Beispiel für den Frachtversand

Dieses Projekt visualisiert das DDD-Beispiel für den Frachtversand aus Eric Evans' Buch mithilfe von UML-Diagrammen. Generiert aus dem dddsample-core GitHub-Projekt, beleuchten diese Diagramme – einschließlich Klassen-, Sequenz-, Objekt- und Kommunikationsdiagrammen – die Architektur und das Verhalten des Systems und zeigen die Interaktion zwischen den Komponenten und die Struktur des Domänenmodells. Ein gerichteter Graph, erstellt mit Astah Professional, verdeutlicht die Beziehungen zwischen den Elementen weiter. Diese Ressource bietet ein praktisches und visuelles Verständnis der DDD-Prinzipien in Aktion.

Entwicklung Frachtversandsystem

Loglan'82: Eine Programmiersprache für objektorientierte und verteilte Programmierung

2025-04-18

Loglan'82 ist eine Programmiersprache, die für objektorientierte und verteilte Programmierung entwickelt wurde und Funktionen bietet, die andere Sprachen übertreffen. Ihr einzigartiges, sicheres und effizientes Objektmanagementsystem, die Unterstützung für modulare Klassen, Koroutinen und Threads sowie die Möglichkeit, Berechnungen auf einem Netzwerk virtueller Maschinen zu verteilen, zeichnen sie aus. Loglan'82 bietet ein originales, objektbasiertes Kommunikations- und Synchronisierungsprotokoll namens 'alien call' und löst komplexe Probleme im Objektmanagement, in der Semantik von Koroutinen und im verteilten Rechnen. Sie eignet sich für ambitionierte Programmierer, Dozenten und Forscher.

GPU-Programmierung mit Zig: Ein moderner Ansatz

2025-04-18

GPU-Programmierung bedeutete früher, mit C++-Compilern, aufgeblähten SDKs und herstellerspezifischen Toolchains zu kämpfen. Das ändert sich. Jetzt können Sie GPU-Code in modernen Sprachen wie Rust und Zig mit weniger Abstraktionsschichten schreiben. Dieser Beitrag untersucht den aktuellen Stand der GPU-Backends von Zig und deren Leistung auf Vulkan, OpenCL und nativen ISAs. Zig unterstützt SPIR-V, PTX und AMDGCN, wodurch native Binärdateien erzeugt werden können, die zur Laufzeit geladen werden können, wodurch CUDA, HIP oder HLSL nicht mehr benötigt werden. Obwohl Vulkan und OpenCL die wichtigsten SPIR-V-Umgebungen sind, beeinflussen die Unterschiede zwischen ihnen die Erfolgsraten der Verhaltenstests des SPIR-V-Backends von Zig. Zukünftige Pläne umfassen die Verbesserung des SPIR-V-Backends, die Bereitstellung von CUDA/HIP-Runtime-Bindungen und das Hinzufügen weiterer GPU-Algorithmen zur Standardbibliothek.

Entwicklung

arXivLabs: Experimentelle Projekte mit Community-Mitwirkenden

2025-04-18
arXivLabs: Experimentelle Projekte mit Community-Mitwirkenden

arXivLabs ist ein Framework, das es Mitarbeitern ermöglicht, neue arXiv-Funktionen direkt auf unserer Website zu entwickeln und zu teilen. Sowohl Einzelpersonen als auch Organisationen, die mit arXivLabs zusammenarbeiten, haben unsere Werte von Offenheit, Community, Exzellenz und Datenschutz der Benutzerdaten angenommen und akzeptiert. arXiv verpflichtet sich zu diesen Werten und arbeitet nur mit Partnern zusammen, die diese einhalten. Haben Sie eine Idee für ein Projekt, das der arXiv-Community einen Mehrwert bietet? Erfahren Sie mehr über arXivLabs.

Entwicklung

Durchbruch beim Constraint-System: Dynamische Medien-Herausforderungen gemeistert

2025-04-18
Durchbruch beim Constraint-System: Dynamische Medien-Herausforderungen gemeistert

In Phase zwei konnte das Team Herausforderungen wie "Schwebeeffekte", "Explosionen" und schlechte Performance bei Constraint-Systemen erfolgreich bewältigen. Verwendete Techniken umfassten die Weitergabe bekannter Werte, die Nutzung linearer Beziehungen zur Reduzierung der Variablendimensionen des Solvers und die Gruppierung von Constraints in unabhängig lösbarer Cluster. Dies verbesserte die Stabilität und Performance des Systems deutlich. Das Team testete verschiedene Solver und optimierte das System weiter, indem es die Werte-Darstellung änderte (z. B. Verwendung von Polarkoordinaten). Diese Verbesserungen ermöglichten den Bau physikalisch genauer mechanischer Strukturen und echte bidirektionale Berechnungen und legten somit den Grundstein für die Entwicklung dynamischer Medien.

Attune: Sicheres und schnelles Hosting von Linux-Paketen

2025-04-18
Attune: Sicheres und schnelles Hosting von Linux-Paketen

Attune ist ein Tool zum sicheren Veröffentlichen und Hosten von Linux-Paketen und bietet sowohl selbst gehostete als auch Cloud-basierte Bereitstellungsoptionen. Die CLI führt die Signierung des Repository-Index lokal durch, wodurch die Sicherheit der Schlüssel gewährleistet ist. Inkrementale Index-Neuerstellungen machen es unglaublich schnell. Derzeit werden APT-Repositories (Debian und Ubuntu) unterstützt, weitere folgen in Kürze. Richten Sie ein APT-Repository in etwa 5 Minuten mit Docker und GnuPG ein.

Objective-C: Das unerwartete Erbe einer polarisierenden Sprache

2025-04-18
Objective-C: Das unerwartete Erbe einer polarisierenden Sprache

Leibniz' Traum von einer 'characteristica universalis' lebt in Programmiersprachen weiter. Diese Geschichte erzählt die Erfahrung des Autors mit Objective-C, einer wortreichen und polarisierenden Sprache, die unerwartet zur Grundlage des Apple-Ökosystems wurde. Trotz der Kritik haben die einzigartige Syntax von Objective-C und seine Rolle in der frühen iOS-Entwicklung einen nachhaltigen Einfluss gehabt, wie der Autor auf seinem persönlichen Weg und die überraschende Kraft dieser oft übersehenen Sprache teilt.

Entwicklung

Neue ASN.1-API von PyCA Cryptography: Geschwindigkeit und Sicherheit

2025-04-18

Das PyCA Cryptography-Team entwickelt eine neue ASN.1-API mit einem reinen Rust-Parser für deutlich verbesserte Leistung und reduzierte Sicherheitsrisiken durch Unterschiede zu anderen ASN.1-Parsern. Die neue API bietet auch eine deklarative Schnittstelle im Dataclass-Stil für bessere Lesbarkeit und Wartbarkeit des Codes. Dies behebt die Mängel bestehender Python-ASN.1-Bibliotheken in Bezug auf Leistung und Sicherheit und unterstützt neue Ökosysteme wie Sigstore besser.

Entwicklung

Schreiben von schnellerem C, C++ und Assembler-Code: Ein praktischer Leitfaden für die Performance

2025-04-18
Schreiben von schnellerem C, C++ und Assembler-Code: Ein praktischer Leitfaden für die Performance

Dieses Repository bietet praktische Beispiele für das Schreiben von effizientem C- und C++-Code und behandelt Themen von Mikrokerneln bis hin zu parallelen Algorithmen. Es zeigt, wie man C++20-Features und Compiler-Optimierungen nutzt, um die Performance zu steigern (z. B. Beschleunigung der Trigonometrie um das 40-fache), und untersucht Best Practices zur Vermeidung von Performance-Engpässen, wie effizientes JSON-Handling, die Verwendung von STL-Assoziationscontainern und die Wahl des richtigen parallelen Programmiermodells. Das Projekt enthält auch Codebeispiele für Hardware-Beschleunigung mit Assembler, CUDA und FPGA, um Entwickler beim Schreiben schnelleren und sichereren Codes zu unterstützen.

KI-gestützter Code-Editor-Bot fabriziert Richtlinie, was zu Abonnementskündigungen führt

2025-04-18
KI-gestützter Code-Editor-Bot fabriziert Richtlinie, was zu Abonnementskündigungen führt

Ein KI-gestützter Code-Editor, Cursor, erhielt kürzlich negative Rückmeldungen, nachdem sein KI-Chatbot eine Unternehmensrichtlinie erfunden hatte. Ein Entwickler stellte fest, dass das Wechseln von Geräten ihn sofort von Cursor abmeldete. Bei Kontaktaufnahme mit dem Support behauptete ein KI-Agent namens "Sam", dies sei eine neue Sicherheitsfunktion. Es gab jedoch keine solche Richtlinie; die KI erfand die Information, was zu Beschwerden von Nutzern und Abonnementskündigungen führte. Dies unterstreicht die Risiken, KI-Systeme in kundenorientierten Rollen ohne menschliche Aufsicht einzusetzen, was zu frustrierten Kunden, beschädigtem Vertrauen und finanziellen Verlusten führen kann.

Entwicklung

arXivLabs: Experimentelle Projekte mit Community-Mitwirkenden

2025-04-18
arXivLabs: Experimentelle Projekte mit Community-Mitwirkenden

arXivLabs ist ein Framework, das es Mitwirkenden ermöglicht, neue arXiv-Funktionen direkt auf unserer Website zu entwickeln und zu teilen. Sowohl Einzelpersonen als auch Organisationen, die mit arXivLabs zusammenarbeiten, haben unsere Werte von Offenheit, Community, Exzellenz und Datenschutz der Benutzerdaten angenommen und akzeptiert. arXiv engagiert sich für diese Werte und arbeitet nur mit Partnern zusammen, die diese Werte teilen. Haben Sie eine Idee für ein Projekt, das der arXiv-Community einen Mehrwert bietet? Erfahren Sie mehr über arXivLabs.

Entwicklung

Defold Engine-Update-Schwemme: Neue Versionen und Cloud-Build-Verbesserungen

2025-04-18
Defold Engine-Update-Schwemme: Neue Versionen und Cloud-Build-Verbesserungen

Die Defold-Spielengine hat Ende 2024 und Anfang 2025 mehrere Updates erhalten, darunter die Versionen 1.9.6, 1.9.7 und 1.9.8. Ein Showreel mit beeindruckenden Spielen aus dem Jahr 2024 wurde ebenfalls veröffentlicht. Zusätzlich zu den neuen Versionen wurde eine technische Vorschau der Editor-Scripting-API für interaktive UI-Elemente vorgestellt und die Cloud-Build-Server wurden erheblich verbessert, um Entwicklung und Wartung zu vereinfachen. Diese Verbesserungen zielen darauf ab, die Benutzerfreundlichkeit und Effizienz von Defold zu steigern und Entwicklern leistungsstärkere Tools für die Spieleentwicklung zu bieten.

Entwicklung

Jai: Eine moderne Programmiersprache für erfahrene Entwickler

2025-04-18

Ein erfahrener Programmierer, der mit unzähligen Sprachen gearbeitet hat, teilt seine Erfahrungen mit Jai, einer Hochleistungssprache, die für erfahrene Entwickler entwickelt wurde. Der Autor hebt die Stärken von Jai hervor: einfache Syntax, blitzschnelle Kompilierung, leistungsstarke Metaprogrammierfunktionen und plattformübergreifende Kompatibilität. Er bespricht die Verwendung von Jai in einer Produktionsumgebung und erklärt, warum es sich noch in der geschlossenen Beta-Phase befindet. Insgesamt lobt der Autor Jai als moderne Sprache, die die Entwicklereffizienz verbessert und die Erstellung hochwertiger, effizienter Software ermöglicht.

Entwicklung

Warum ich selbstgehostetes Sentry aufgegeben habe: 16 GB RAM und eine komplexe Installation waren der Grund

2025-04-18
Warum ich selbstgehostetes Sentry aufgegeben habe: 16 GB RAM und eine komplexe Installation waren der Grund

Der Autor beschreibt seine Erfahrung mit dem Aufgeben von selbstgehostetem Sentry. Anfänglich, aufgrund beruflicher Anforderungen, hat er Sentry erfolgreich selbst gehostet. Jahre später, beim Versuch, selbstgehostetes Sentry für einen Kollegen einzurichten, stieß er auf zahlreiche Warnungen in der Sentry-Dokumentation über die Risiken des Selbst-Hostings sowie auf hohe Ressourcenanforderungen (mindestens 16 GB RAM und mehrere Kerne). Dies erwies sich als teuer und unglaublich schwer zu warten, wobei der Installationsprozess Hunderte von Skriptzeilen umfasste. Feedback von Nutzern im Internet bestätigte die Schwierigkeit, selbstgehostetes Sentry zu warten. Schließlich gab der Autor selbstgehostetes Sentry auf und beschloss, eine leichtere Alternative zu entwickeln.

Entwicklung

60.000 Zeilen Lua später: Die Reflexion eines Spieleentwicklers

2025-04-18
60.000 Zeilen Lua später: Die Reflexion eines Spieleentwicklers

Oleg von Luden.io interviewt Ivan Trusov, den Hauptprogrammierer des Lua-basierten Spiels Craftomation 101 (~60.000 Codezeilen mit der Defold-Engine), über seine Erfahrungen. Ivan bespricht die Vor- und Nachteile von Lua, wie das Fehlen von Inkrement-Operatoren und Klassen, sowie Array-Indizes, die bei 1 beginnen. Trotzdem schätzt er die Einfachheit und Flexibilität von Lua, insbesondere seine leistungsstarken "Tabellen", merkt aber an, dass Laufzeitfehler in großen Projekten aufgrund der dynamischen Typisierung auftreten können. Er vergleicht Lua mit Python und C++ und bespricht die potenzielle Verwendung von statischen Analysetools und mögliche Lua-Upgrades (wie Luau). Letztendlich stellt er fest, dass Lua in Defold gut funktioniert, aber für das nächste Projekt könnte er eine stärker typisierte Sprache in Betracht ziehen, um Fehler bereits während der Kompilierung zu erkennen.

Entwicklung

PostgreSQL Shared Buffer: Mehr RAM, mehr Probleme?

2025-04-18
PostgreSQL Shared Buffer: Mehr RAM, mehr Probleme?

Rechner mit Hunderten von Gigabyte RAM sind heutzutage keine Seltenheit mehr. Der Shared Buffer von PostgreSQL kann die Performance deutlich verbessern, aber seine Funktionsweise ist weniger intuitiv als man erwarten könnte. Dieser Artikel geht detailliert auf die Buffer-Austauschstrategie von PostgreSQL ein, einschließlich des Clock-Sweep-Algorithmus und der Ring-Buffer-Strategien. Während ein größerer Shared Buffer vorteilhaft erscheint, kann die Performance über einem bestimmten Schwellenwert (z. B. 64 GB) abnehmen, da der Algorithmus länger braucht, um austauschbare Blöcke zu finden. Der Artikel rät dazu, den Shared Buffer sorgfältig anhand der Datengröße und des Systemspeichers zu dimensionieren und übermäßig große Einstellungen zu vermeiden, die Engpässe verursachen können.

Entwicklung

KI macht uns zu Klebstoff: Die Angst eines Softwareentwicklers

2025-04-17

Der rasante Fortschritt der KI, insbesondere großer Sprachmodelle, verändert die tägliche Arbeit von Softwareentwicklern drastisch. Der Autor, ein Softwareentwickler, stellt fest, dass KI komplexe Bugs schnell beheben und Code refaktorieren kann, was die Effizienz steigert, ihm aber die Freude am Lösen komplexer Probleme und am tiefen Verständnis der Systemarchitektur nimmt. Der Autor prognostiziert, dass KI in den meisten Aufgaben des „tiefen linearen Denkens“ überlegen sein wird, und die Menschen als „Klebstoff“ fungieren werden, der die KI mit der realen Welt verbindet und sich um alltägliche Aufgaben wie die Konfiguration von Cloud-Diensten oder die Verkabelung von Hardware kümmert. Er äußert seine Besorgnis über die Zukunft und befürchtet, dass viele Arbeitsplätze verschwinden werden und selbst neue Möglichkeiten wahrscheinlich repetitive und unbefriedigende „Klebstoff“-Aufgaben umfassen werden.

Entwicklung

Mux: Video für Entwickler demokratisieren

2025-04-17
Mux: Video für Entwickler demokratisieren

Mux baut eine Videoinfrastruktur für Entwickler und zielt darauf ab, Video durch die Bewältigung der Herausforderungen bei der Videocodierung, dem Streaming (Mux Video) und der Überwachung (Mux Data) zu demokratisieren. Unterstützt von Top-Investoren wie Coatue und Accel und mit einem Team, das Erfahrung bei Google, YouTube und Twitch mitbringt, bedient Mux eine breite Palette von Kunden, von Startups bis hin zu etablierten Unternehmen wie Reddit und Vimeo. Sie veranstalten auch Demuxed, die führende Konferenz für Videoingenieure.

Sichere Verwaltung von Umgebungsvariablen mit GPG-verschlüsselten Dateien

2025-04-17
Sichere Verwaltung von Umgebungsvariablen mit GPG-verschlüsselten Dateien

Dieses Shell-Tool bietet eine sichere Möglichkeit, Umgebungsvariablen mithilfe von GPG-verschlüsselten Dateien zu verwalten. Es behebt das häufige Problem, dass Befehlszeilentools Umgebungsvariablen benötigen, die sensible Informationen enthalten, die in unverschlüsselten Shell-Dateien gespeichert sind. Das Tool ermöglicht es Benutzern, Geheimnisse aus verschlüsselten Dateien zu lesen und einfach zwischen verschiedenen Konten zu wechseln. Es unterstützt verschachtelte Anmeldungen, aktualisiert die Umgebungsvariable `SECRET_LOGIN` und ändert die Shell-Eingabeaufforderung, um die aktuelle Anmeldung anzuzeigen. Die automatische Vervollständigung für verfügbare Dateinamen ist ebenfalls enthalten.

Val: Eine beliebig genaue Taschenrechner-Sprache

2025-04-17
Val: Eine beliebig genaue Taschenrechner-Sprache

Val ist eine einfache, beliebig genaue Taschenrechner-Sprache, die auf Chumsky und Ariadne aufbaut. Sie läuft unter Linux, MacOS, BSDs und Windows. Die Installation erfolgt einfach über Cargo, oder vorgefertigte Binärdateien stehen zur Verfügung. Val bietet eine Kommandozeilenschnittstelle und eine REPL mit Syntaxhervorhebung, persistenten Verlauf und emacs-artiger Bearbeitung. Die Sprache unterstützt Funktionen, Schleifen, bedingte Anweisungen und eine umfangreiche Menge an eingebauten Funktionen, die arithmetische, logische, Vergleichs- und Sammlungsoperationen abdecken. Datentypen umfassen Zahlen, Boolesche Werte, Zeichenketten und Listen.

Entwicklung

Zähmen von wiederkehrenden iCalendar-Ereignissen mit Distanzfunktionen

2025-04-17
Zähmen von wiederkehrenden iCalendar-Ereignissen mit Distanzfunktionen

Der Autor stieß bei der Implementierung einer Bibliothek zur Verarbeitung von iCalendar-Dateien auf die Herausforderung, wiederkehrende Ereignisse zu verarbeiten. iCalendar verwendet komplexe Regeln zur Definition wiederkehrender Ereignisse, und traditionelle Implementierungen erfordern in der Regel viel spezifische Logik für verschiedene Frequenzen und Parameter. Der Autor wählte einen anderen Ansatz, indem er Wiederholungsregeln als SQL-Abfragen betrachtete und Ideen von signierten Distanzfunktionen (SDF) in der Computergrafik übernahm, wobei er Ereignisvorkommen mit Distanzfunktionen repräsentierte. Diese Methode zerlegt komplexe Regeln in einfache Distanzfunktionen, berechnet iterativ die Auftretenzeiten von Ereignissen, um zahlreiche bedingte Urteile zu vermeiden, was zu saubererem und einfacher zu wartendem Code führt. Obwohl die anfängliche Implementierung nicht sehr effizient war, optimierte der Autor sie, um komplexe Wiederholungsregeln in Millisekunden zu verarbeiten.

(pwy.io)

TypeScript: Objektparameter vs. einzelne Parameter

2025-04-17

Beim Schreiben von Funktionen in TypeScript können Sie Argumente einzeln oder in einem Objekt gruppiert übergeben. Dieser Artikel argumentiert, dass Objektparameter überlegen sind. Einzelne Parameter führen zu Mehrdeutigkeit und Wartungsproblemen, wenn die Anzahl der Parameter zunimmt. Objektparameter, wie `{firstName: "John", lastName: "Doe", age: 28, isActive: true}`, bieten Klarheit, Selbstdokumentation und nutzen die Autovervollständigungs- und Typsicherheitsfunktionen von TypeScript.

Schreiben und Transaktionsunterstützung in SQLite virtuellen Tabellen

2025-04-17

Dieser Beitrag befasst sich eingehend mit der Implementierung von Schreib- und Transaktionsunterstützung in virtuellen SQLite-Tabellen. Durch die Implementierung von Hooks wie xUpdate, xBegin, xSync, xCommit und xRollback können virtuelle Tabellen Schreibvorgänge unterstützen und die Transaktionsintegrität gewährleisten. Der Artikel erklärt, wie die Rollback-Journal- und Super-Journal-Mechanismen von SQLite atomare Commits in Szenarien mit einer und mehreren Datenbanken koordinieren und wie virtuelle Tabellen an diesem Zweiphasen-Commit-Protokoll teilnehmen. Der Autor betont, dass die Dauerhaftigkeit in xSync gehandhabt werden muss, während xCommit und xRollback nur idempotente Bereinigungsvorgänge durchführen sollten, um Vorgänge zu vermeiden, die fehlschlagen könnten.

1 2 109 110 111 113 115 116 117 214 215