LangRank — утилита на Rust, которая собирает свежие рейтинги популярности языков программирования (TIOBE, PYPL, Languish), объединяет их с данными Benchmarks Game и TechEmpower Framework Benchmarks, и вычисляет итоговое ранжирование по методу Шульце.
🎨 Визуализация итогового рейтинга
- 📚 О проекте
- 🛠️ Сборка и запуск
- 💾 Сохранение выгрузок
- 🖼️ HTML-отчёт
- 🧮 Алгоритм Шульце
- 🤖 Автодополнение команд
- 🌐 Источники данных
- 🧱 Статическая сборка
Приложение ориентировано на быструю сверку разных метрик популярности языков. Оно:
- Подтягивает сводки рейтингов TIOBE, PYPL и Languish.
- Нормализует названия языков и объединяет показатели.
- Скачивает CSV Benchmarks Game и вычисляет относительную скорость (геометрическое среднее по отношению к лучшим результатам на задачах).
- Считывает TechEmpower Framework Benchmarks и берёт лучший фреймворк языка по композитному score.
- Строит итоговую таблицу по методу Шульце, учитывая популярность и производительность.
# Запуск с выводом топ-10 в терминале
cargo run --release
# Подробный вывод с полным Schulze-ранжированием
cargo run --release -- --full-outputКаждый флаг можно передать без пути — в этом случае используется значение по умолчанию. Добавьте --archive-csv, чтобы сохранять CSV в .gz (удобно для публикации на сайте).
# Сохраняем комбинированные рейтинги и Schulze-таблицу
cargo run --release -- \
--save-rankings data/output/rankings.csv \
--save-schulze
# Сохраняем CSV Benchmarks Game в кастомный путь
cargo run --release -- --save-benchmarks data/raw/alldata.csv
# Сохраняем CSV в gzip-архивы
cargo run --release -- --save-rankings --save-schulze --archive-csvLangRank умеет генерировать красивую HTML-страницу с итоговой таблицей, которую можно раздавать статически через nginx.
Если включён --full-output, в отчёт попадёт полная таблица, иначе — топ‑10.
При использовании --archive-csv ссылки в HTML будут указывать на .gz.
Минификация HTML включена по умолчанию; отключить её можно флагом --no-minify-html.
# Сохранить HTML-отчёт (по умолчанию data/output/report.html)
cargo run --release -- --save-html
# Сохранить HTML-отчёт в кастомный путь
cargo run --release -- --save-html report.html
# Полная таблица в HTML
cargo run --release -- --save-html report.html --full-output
# Отключить минификацию HTML
cargo run --release -- --save-html report.html --no-minify-htmlLangRank строит четыре «бюллетеня» предпочтений: по позициям в TIOBE, PYPL, Languish и по итоговому показателю Perf (объединение Benchmarks Game и TechEmpower). Затем для каждого языка вычисляется количество побед над конкурентами в матрице сильнейших путей Шульце. При равенстве используется комбинированный счёт: доли рейтингов + Perf.
BG считается по данным Benchmarks Game так:
где
TechEmpower (TE) считается так:
- Берём последний completed run с
tfb-status.techempower.com. - Для каждого фреймворка считаем пропускную способность (RPS) по каждому тесту: JSON, Plaintext, Single Query (db), Multi Query (query), Fortunes (fortune), Updates (update).
- Нормализуем RPS по каждому тесту, деля на максимальный RPS среди всех фреймворков в этом тесте.
- Считаем композитный score фреймворка с весами (TPR bias coefficients): JSON=1.0, Plaintext=0.75, db=0.75, query=0.75, fortune=1.5, update=1.25.
- Для языка берём лучший (максимальный) score среди всех его фреймворков.
Формулы:
Если у языка нет данных TE, используется 0.
Perf — объединённый показатель на основе BG и TE. TE нормализуется к диапазону 0..1, после чего берётся среднее. Если у языка нет BG или TE, соответствующий компонент считается 0 (в таблицах для BG/TE отображается «-»). Если нет ни BG, ни TE, Perf также показывается как «-».
Утилита умеет генерировать скрипты автодополнения для популярных оболочек:
# Сгенерировать и установить автодополнение для Bash
cargo run -- completions bash --install
# Вывести скрипт для fish в stdout
cargo run -- completions fish- 🔵 TIOBE Index — https://www.tiobe.com/tiobe-index/
- 🔶 PYPL Popularity Index — https://pypl.github.io/PYPL.html
- 🟢 Languish (Programming Language Trends) — https://tjpalmer.github.io/languish/
- 🟥 Benchmarks Game — https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/raw/master/public/data/alldata.csv
- 🟣 TechEmpower Framework Benchmarks — https://www.techempower.com/benchmarks/
Для сборки статического бинарника под Linux/musl используйте скрипт:
./build_musl.shОн запускает официальный контейнер clux/muslrust:nightly и собирает релизную версию.
