diff options
| author | Leitwolf | 2026-11-13 07:02:11 +0300 |
|---|---|---|
| committer | GitHub | 2026-11-13 07:02:11 +0300 |
| commit | 7f8b15bf14d7784c856680e38cac9631f3a56018 (patch) | |
| tree | aea990410b7b5e43750c1cdee9e9ccff2cb9aa3b /apps | |
| parent | 9da64618a1cbdf6495155d1b96a7f156cb3b5f14 (diff) | |
| parent | e43b880759e728a9ebd2d9e7da597304ad4e05c8 (diff) | |
| download | progmaweb-feature/viget-c-languages.tar.gz | |
Merge branch 'main' into feature/viget-c-languagesfeature/viget-c-languages
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/web/lib/products.ts | 281 | ||||
| -rw-r--r-- | apps/web/tests/sites.test.mjs | 11 |
2 files changed, 33 insertions, 259 deletions
diff --git a/apps/web/lib/products.ts b/apps/web/lib/products.ts index 4fe8dfd..afc9bc9 100644 --- a/apps/web/lib/products.ts +++ b/apps/web/lib/products.ts @@ -7,14 +7,7 @@ import type { Locale } from "./localization"; * The products of product.progmasoft.com. Each one has a page there and its * own site; the catalog only introduces it and leads on. */ -export const productSlugs = [ - "tala-lang", - "talac", - "talafmt", - "talalint", - "tazel", - "catch3", -] as const; +export const productSlugs = ["tazel", "catch3"] as const; export type ProductSlug = (typeof productSlugs)[number]; export function isProductSlug(value: string): value is ProductSlug { @@ -31,30 +24,6 @@ interface ProductFacts { } export const products: Record<ProductSlug, ProductFacts> = { - "tala-lang": { - name: "Tala", - site: "https://tala.run/", - source: "https://github.com/Progmasoft/tala", - accent: "violet", - }, - talac: { - name: "talac", - site: "https://talac.tala.run/", - source: "https://github.com/Progmasoft/tala", - accent: "blue", - }, - talafmt: { - name: "talafmt", - site: "https://talafmt.tala.run/", - source: "https://github.com/Progmasoft/talafmt", - accent: "teal", - }, - talalint: { - name: "talalint", - site: "https://talalint.tala.run/", - source: "https://github.com/Progmasoft/talalint", - accent: "green", - }, tazel: { name: "Tazel", site: "https://tazel.net/", @@ -94,7 +63,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "en-US": { metadataTitle: "Products", metadataDescription: - "The products of Progmasoft: the Tala language with its tools, and the Catch3 testing toolkit.", + "The products of Progmasoft: the Tazel build system and the Catch3 testing toolkit.", eyebrow: "Progmasoft products", title: "Products", description: @@ -105,64 +74,16 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { features: "What it does", back: "All products", products: { - "tala-lang": { - category: "Programming language", - tagline: "A lazy, statically typed language.", - description: - "Tala evaluates by need and checks types before it runs. Programs are organized in namespaces and classes, and an executable starts at a parameterless static Main method.", - features: [ - "Call-by-need evaluation with effects kept out of sight of the types", - "Namespaces and classes; no top-level functions", - "The System standard library and the Progmasoft library", - "Packages published on ViGet", - ], - }, - talac: { - category: "Compiler", - tagline: "The Tala compiler.", - description: - "talac turns Tala sources into native executables. Its frontend parses, resolves and type-checks in Haskell; its backend lowers through its own intermediate representations to LLVM in C++.", - features: [ - "One program from any number of source files", - "Inspectable intermediate stages (.core, .xpp, .xmm)", - "Native executables through LLVM", - "A command line read by a typed parser", - ], - }, - talafmt: { - category: "Formatter", - tagline: "One layout for every Tala file.", - description: - "talafmt rewrites Tala sources in place to one consistent layout, or checks them without changing anything.", - features: [ - "Formats files in place by default", - "--check for continuous integration", - "Output as files, standard output, coverage, Checkstyle or JSON", - "Settings in talafmt.kts", - ], - }, - talalint: { - category: "Linter", - tagline: "Finds what a compiler lets through.", - description: - "talalint reports what is wrong with Tala sources: the diagnostics of the Tala compiler frontend, and checks of its own on the physical source.", - features: [ - "The diagnostics of the Tala compiler, under the compiler check", - "Trailing whitespace, mixed line endings and a missing final newline", - "--fix applies only safe fixes to the physical source", - "Runs from Tazel with tazel lint", - ], - }, tazel: { category: "Build system and package manager", - tagline: "Builds Tala projects and their packages.", + tagline: "Builds C, C++, Objective-C, Objective-C++ and Zig.", description: - "Tazel reads a project from BUILD.kts, resolves its packages from ViGet, records them in a lockfile and runs talac to build.", + "Tazel reads a module from MODULE.kts and one BUILD.kts per package, compiles each translation unit on its own and builds again only what changed.", features: [ - "Projects described in a Kotlin DSL (BUILD.kts)", - "Packages from ViGet, with a lockfile", - "Runs the compiler, formatter and linter", - "Extensible with DSL plugins", + "Kotlin project files, MODULE.kts and BUILD.kts, with labels such as //app/:greeter", + "Clang, GCC and zig cc from the machine; cross builds by LLVM target triple", + "Incremental per action, by the content of every input", + "Commands of your own in tazel_custom.txt", ], }, catch3: { @@ -182,7 +103,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "de-DE": { metadataTitle: "Produkte", metadataDescription: - "Die Produkte von Progmasoft: die Sprache Tala mit ihren Werkzeugen und das Testwerkzeug Catch3.", + "Die Produkte von Progmasoft: das Build-System Tazel und das Testwerkzeug Catch3.", eyebrow: "Progmasoft-Produkte", title: "Produkte", description: @@ -193,64 +114,16 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { features: "Was es kann", back: "Alle Produkte", products: { - "tala-lang": { - category: "Programmiersprache", - tagline: "Eine träge, statisch typisierte Sprache.", - description: - "Tala wertet nach Bedarf aus und prüft Typen vor der Ausführung. Programme sind in Namespaces und Klassen gegliedert; ein Programm beginnt bei einer parameterlosen statischen Main-Methode.", - features: [ - "Auswertung nach Bedarf, Effekte bleiben für die Typen unsichtbar", - "Namespaces und Klassen; keine Funktionen auf oberster Ebene", - "Die Standardbibliothek System und die Progmasoft-Bibliothek", - "Pakete auf ViGet", - ], - }, - talac: { - category: "Compiler", - tagline: "Der Tala-Compiler.", - description: - "talac übersetzt Tala-Quellen in native Programme. Das Frontend parst, löst Namen auf und prüft Typen in Haskell; das Backend senkt über eigene Zwischendarstellungen in C++ nach LLVM ab.", - features: [ - "Ein Programm aus beliebig vielen Quelldateien", - "Einsehbare Zwischenstufen (.core, .xpp, .xmm)", - "Native Programme über LLVM", - "Eine Kommandozeile mit typisiertem Parser", - ], - }, - talafmt: { - category: "Formatierer", - tagline: "Ein Layout für jede Tala-Datei.", - description: - "talafmt bringt Tala-Quellen direkt in ein einheitliches Layout oder prüft sie, ohne etwas zu ändern.", - features: [ - "Formatiert Dateien standardmäßig direkt", - "--check für die kontinuierliche Integration", - "Ausgabe als Dateien, Standardausgabe, Abdeckung, Checkstyle oder JSON", - "Einstellungen in talafmt.kts", - ], - }, - talalint: { - category: "Linter", - tagline: "Findet, was ein Compiler durchlässt.", - description: - "talalint meldet, was an Tala-Quellen nicht stimmt: die Diagnosen des Tala-Compiler-Frontends und eigene Prüfungen der physischen Quelle.", - features: [ - "Die Diagnosen des Tala-Compilers unter der Prüfung compiler", - "Leerzeichen am Zeilenende, gemischte Zeilenenden und ein fehlender Zeilenumbruch am Dateiende", - "--fix wendet nur sichere Korrekturen an der physischen Quelle an", - "Läuft aus Tazel mit tazel lint", - ], - }, tazel: { category: "Build-System und Paketmanager", - tagline: "Baut Tala-Projekte und ihre Pakete.", + tagline: "Baut C, C++, Objective-C, Objective-C++ und Zig.", description: - "Tazel liest ein Projekt aus BUILD.kts, löst seine Pakete aus ViGet auf, hält sie in einer Lock-Datei fest und baut mit talac.", + "Tazel liest ein Modul aus MODULE.kts und einer BUILD.kts je Paket, übersetzt jede Übersetzungseinheit für sich und baut nur neu, was sich geändert hat.", features: [ - "Projekte in einer Kotlin-DSL (BUILD.kts)", - "Pakete aus ViGet mit Lock-Datei", - "Startet Compiler, Formatierer und Linter", - "Erweiterbar mit DSL-Plugins", + "Projektdateien in Kotlin, MODULE.kts und BUILD.kts, mit Labels wie //app/:greeter", + "Clang, GCC und zig cc vom Rechner; Cross-Builds per LLVM-Target-Triple", + "Inkrementell je Aktion, nach dem Inhalt jeder Eingabe", + "Eigene Befehle in tazel_custom.txt", ], }, catch3: { @@ -270,7 +143,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "ru-RU": { metadataTitle: "Продукты", metadataDescription: - "Продукты Progmasoft: язык Tala с его инструментами и набор для тестирования Catch3.", + "Продукты Progmasoft: система сборки Tazel и набор для тестирования Catch3.", eyebrow: "Продукты Progmasoft", title: "Продукты", description: @@ -281,64 +154,16 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { features: "Что он умеет", back: "Все продукты", products: { - "tala-lang": { - category: "Язык программирования", - tagline: "Ленивый язык со статической типизацией.", - description: - "Tala вычисляет по необходимости и проверяет типы до запуска. Программы организованы в пространства имён и классы, а исполняемая программа начинается со статического метода Main без параметров.", - features: [ - "Вычисление по необходимости; эффекты скрыты от типов", - "Пространства имён и классы; без функций верхнего уровня", - "Стандартная библиотека System и библиотека Progmasoft", - "Пакеты публикуются в ViGet", - ], - }, - talac: { - category: "Компилятор", - tagline: "Компилятор Tala.", - description: - "talac превращает исходные тексты Tala в исполняемые программы. Фронтенд разбирает, разрешает имена и проверяет типы на Haskell; бэкенд на C++ через собственные промежуточные представления доходит до LLVM.", - features: [ - "Одна программа из любого числа исходных файлов", - "Доступные для просмотра промежуточные этапы (.core, .xpp, .xmm)", - "Исполняемые программы через LLVM", - "Командная строка с типизированным разбором", - ], - }, - talafmt: { - category: "Форматировщик", - tagline: "Единое оформление для каждого файла Tala.", - description: - "talafmt приводит исходные тексты Tala к единому оформлению на месте или только проверяет их, ничего не меняя.", - features: [ - "По умолчанию форматирует файлы на месте", - "--check для непрерывной интеграции", - "Вывод в файлы, стандартный вывод, покрытие, Checkstyle или JSON", - "Настройки в talafmt.kts", - ], - }, - talalint: { - category: "Линтер", - tagline: "Находит то, что пропускает компилятор.", - description: - "talalint сообщает, что не так в исходных текстах Tala: диагностику фронтенда компилятора Tala и собственные проверки физического текста.", - features: [ - "Диагностика компилятора Tala в проверке compiler", - "Пробелы в конце строк, смешанные концы строк и отсутствие перевода строки в конце файла", - "--fix применяет только безопасные исправления физического текста", - "Запускается из Tazel командой tazel lint", - ], - }, tazel: { category: "Система сборки и менеджер пакетов", - tagline: "Собирает проекты Tala и их пакеты.", + tagline: "Собирает C, C++, Objective-C, Objective-C++ и Zig.", description: - "Tazel читает проект из BUILD.kts, разрешает его пакеты из ViGet, фиксирует их в lock-файле и собирает с помощью talac.", + "Tazel читает модуль из MODULE.kts и по одному BUILD.kts на пакет, компилирует каждую единицу трансляции отдельно и пересобирает только то, что изменилось.", features: [ - "Проекты описываются на Kotlin DSL (BUILD.kts)", - "Пакеты из ViGet с lock-файлом", - "Запускает компилятор, форматировщик и линтер", - "Расширяется DSL-плагинами", + "Файлы проекта на Kotlin, MODULE.kts и BUILD.kts, с метками вида //app/:greeter", + "Clang, GCC и zig cc с машины; кросс-сборка по LLVM target triple", + "Инкрементальная сборка на уровне действий, по содержимому каждого входа", + "Собственные команды в tazel_custom.txt", ], }, catch3: { @@ -358,7 +183,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "he-IL": { metadataTitle: "מוצרים", metadataDescription: - "המוצרים של Progmasoft: שפת Tala עם הכלים שלה וערכת הבדיקות Catch3.", + "המוצרים של Progmasoft: מערכת הבנייה Tazel וערכת הבדיקות Catch3.", eyebrow: "המוצרים של Progmasoft", title: "מוצרים", description: @@ -369,64 +194,16 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { features: "מה הוא עושה", back: "כל המוצרים", products: { - "tala-lang": { - category: "שפת תכנות", - tagline: "שפה עצלה עם טיפוסים סטטיים.", - description: - "Tala מחשבת לפי הצורך ובודקת טיפוסים לפני ההרצה. התוכניות מאורגנות במרחבי שמות ובמחלקות, ותוכנית מתחילה במתודת Main סטטית בלי פרמטרים.", - features: [ - "חישוב לפי הצורך; האפקטים נשארים מחוץ לטיפוסים", - "מרחבי שמות ומחלקות; אין פונקציות ברמה העליונה", - "הספרייה הסטנדרטית System והספרייה של Progmasoft", - "חבילות שמתפרסמות ב־ViGet", - ], - }, - talac: { - category: "מהדר", - tagline: "המהדר של Tala.", - description: - "talac הופך קוד Tala לתוכניות מכונה. החלק הקדמי מנתח, פותר שמות ובודק טיפוסים ב־Haskell; החלק האחורי ב־C++ יורד דרך ייצוגי ביניים משלו אל LLVM.", - features: [ - "תוכנית אחת מכל מספר של קובצי מקור", - "שלבי ביניים שאפשר לבחון (.core, .xpp, .xmm)", - "תוכניות מכונה דרך LLVM", - "שורת פקודה שנקראת במנתח עם טיפוסים", - ], - }, - talafmt: { - category: "מעצב קוד", - tagline: "פריסה אחת לכל קובץ Tala.", - description: - "talafmt משכתב קוד Tala במקום לפריסה אחידה, או בודק אותו בלי לשנות דבר.", - features: [ - "מעצב קבצים במקום כברירת מחדל", - "--check לאינטגרציה רציפה", - "פלט כקבצים, פלט תקני, כיסוי, Checkstyle או JSON", - "הגדרות ב־talafmt.kts", - ], - }, - talalint: { - category: "לינטר", - tagline: "מוצא את מה שהמהדר מעביר.", - description: - "talalint מדווח מה לא תקין בקוד Tala: האבחונים של החלק הקדמי של מהדר Tala, ובדיקות משלו על הטקסט הפיזי.", - features: [ - "האבחונים של מהדר Tala, תחת הבדיקה compiler", - "רווחים בסוף שורה, סופי שורה מעורבים ושורה חדשה חסרה בסוף הקובץ", - "--fix מחיל רק תיקונים בטוחים על הטקסט הפיזי", - "רץ מתוך Tazel עם tazel lint", - ], - }, tazel: { category: "מערכת בנייה ומנהל חבילות", - tagline: "בונה פרויקטים של Tala ואת החבילות שלהם.", + tagline: "בונה C, C++, Objective-C, Objective-C++ ו־Zig.", description: - "Tazel קורא פרויקט מ־BUILD.kts, פותר את החבילות שלו מ־ViGet, רושם אותן בקובץ נעילה ובונה עם talac.", + "Tazel קורא מודול מ־MODULE.kts ומקובץ BUILD.kts אחד לכל חבילה, מהדר כל יחידת תרגום בנפרד ובונה מחדש רק את מה שהשתנה.", features: [ - "פרויקטים שמתוארים ב־Kotlin DSL (BUILD.kts)", - "חבילות מ־ViGet עם קובץ נעילה", - "מפעיל את המהדר, מעצב הקוד והלינטר", - "ניתן להרחבה בתוספי DSL", + "קובצי פרויקט ב־Kotlin, MODULE.kts ו־BUILD.kts, עם תוויות כמו //app/:greeter", + "Clang, GCC ו־zig cc מהמחשב; בנייה צולבת לפי LLVM target triple", + "בנייה מצטברת ברמת הפעולה, לפי התוכן של כל קלט", + "פקודות משלך ב־tazel_custom.txt", ], }, catch3: { diff --git a/apps/web/tests/sites.test.mjs b/apps/web/tests/sites.test.mjs index c366c11..8083e76 100644 --- a/apps/web/tests/sites.test.mjs +++ b/apps/web/tests/sites.test.mjs @@ -38,10 +38,7 @@ test("every language has the same home, catalog and product-site text", () => { }); test("the catalog lists the products the user named, each with a site", () => { - assert.deepEqual( - [...productSlugs], - ["tala-lang", "talac", "talafmt", "talalint", "tazel", "catch3"], - ); + assert.deepEqual([...productSlugs], ["tazel", "catch3"]); for (const slug of productSlugs) { assert.match(products[slug].site, /^https:\/\//, slug); assert.match( @@ -69,9 +66,9 @@ test("the home page names areas, not products", () => { test("the product hosts map to their internal routes", () => { assert.equal(productRoute("/"), "/products"); - assert.equal(productRoute("/talac"), "/products/talac"); - assert.equal(productRoute("/tala-lang/"), "/products/tala-lang"); - assert.equal(productRoute("/talac/extra"), null); + assert.equal(productRoute("/tazel"), "/products/tazel"); + assert.equal(productRoute("/catch3/"), "/products/catch3"); + assert.equal(productRoute("/tazel/extra"), null); assert.equal(productRoute("/../x"), null); assert.equal(catch3Route("/"), "/catch3"); assert.equal(catch3Route("/docs"), null); |