Skip to content

Ngôn ngữ được hỗ trợ

Danh sách ngôn ngữ LCOJ có thể chấm, cách xem ngôn ngữ đang thực sự dùng được trên site, và cách quản trị viên thêm ngôn ngữ mới.

⏱ ~5 phút đọc · 👤 Mọi người dùng, quản trị viên

Khi nào cần trang này

  • Bạn muốn biết site có chấm ngôn ngữ mình dùng không, hoặc phiên bản trình biên dịch là gì.
  • Một ngôn ngữ không xuất hiện trong ô chọn khi nộp bài.
  • Bạn là quản trị viên và muốn bật thêm ngôn ngữ cho site.

Mã nguồn judge của LCOJ (luyencode/judge-server, dựa trên DMOJ và VNOJ) có sẵn trình chạy (executor) cho gần 70 ngôn ngữ. Tuy vậy, danh sách ngôn ngữ bạn thực sự dùng được trên một site cụ thể là do các judge của site đó báo lên, không phải danh sách đầy đủ bên dưới.

Xem ngôn ngữ đang dùng được

Trên site LCOJ (ví dụ https://luyencode.net), mở:

TrangNội dung
/runtimes/Danh sách ngôn ngữ đang có ít nhất một judge online hỗ trợ, kèm phiên bản trình biên dịch/thông dịch
/runtimes/matrix/Bảng phiên bản runtime theo từng judge
/status/Danh sách judge đang online và runtime của từng judge

Khi nộp bài, ô chọn ngôn ngữ chỉ hiện những ngôn ngữ thỏa cả ba điều kiện:

  1. Một judge đang online đã nạp được executor của ngôn ngữ đó (judge tự kiểm tra từng ngôn ngữ lúc khởi động và bỏ những ngôn ngữ lỗi).
  2. Cơ sở dữ liệu của website có bản ghi Language với key trùng tên executor (ví dụ CPP17, PY3). Judge báo một executor mà website không có bản ghi tương ứng thì ngôn ngữ đó không xuất hiện.
  3. Người ra đề cho phép ngôn ngữ đó trong bài, và judge có dữ liệu của bài.

Ngôn ngữ có sẵn khi cài mới

Khi cài đặt, lệnh ./scripts/manage.py loaddata language_small (xem Cài đặt với Docker) tạo sẵn các ngôn ngữ sau:

KeyTên hiển thịGhi chú
C, C11C, C11GCC
CPP03, CPP11, CPP14, CPP17, CPP20C++03 … C++20GCC với chuẩn C++ tương ứng
PASPascalFree Pascal
PY2, PY3Python 2, Python 3CPython
PYPY, PYPY3PyPy 2, PyPy 3Python chạy nhanh hơn nhờ JIT
JAVA8, JAVAJava 8, Java 19JAVA dùng phiên bản Java mới nhất có trên judge; tên hiển thị do quản trị viên đặt
KOTLINKotlin
TEXTTEXTNộp trực tiếp nội dung output
OUTPUTOutput OnlyChỉ nộp file .zip chứa output (tối đa 10 MB)
SCRATCHScratchChỉ nộp file .sb3 (tối đa 1 MB)

Muốn thêm ngôn ngữ khác, quản trị viên thêm bản ghi tại /admin/judge/language/ với key trùng tên executor (xem bảng bên dưới).

Không nạp language_all chồng lên language_small

Repo có sẵn fixture language_all, nhưng khóa chính (id) của nó trùng với language_small mà nội dung khác nhau. Nạp chồng sẽ ghi đè sai các ngôn ngữ đang có. Chỉ cân nhắc dùng language_all thay cho language_small trên một cơ sở dữ liệu mới.

Phiên bản thật nằm ở /runtimes/

Tên hiển thị như "Java 19" chỉ là nhãn lưu trong cơ sở dữ liệu. Phiên bản thực tế của trình biên dịch/thông dịch là do judge báo lên và hiển thị ở /runtimes/, cũng như ở ô chọn ngôn ngữ khi nộp bài.

Toàn bộ executor của judge

Judge có sẵn các executor dưới đây, mỗi executor là một module trong thư mục dmoj/executors/ của judge. Một executor chỉ hoạt động khi image judge có cài runtime tương ứng.

NhómKey (tên ngôn ngữ)
C/C++C, C11, CLANG (Clang), CPP03, CPP11, CPP14, CPP17, CPP20, CLANGX (Clang++), CICPC, CPPICPC (C/C++ theo cờ biên dịch kiểu ICPC), CPPTHEMIS (C++ theo kiểu Themis)
PascalPAS (Free Pascal), PASTHEMIS (Pascal theo kiểu Themis)
PythonPY2, PY3, PYPY, PYPY3
JVMJAVA8, JAVA, KOTLIN, SCALA, GROOVY
.NET (Mono)MONOCS (C#), MONOFS (F#), MONOVB (Visual Basic)
JavaScriptNODEJS (Node.js), V8JS (V8), COFFEE (CoffeeScript)
Hợp ngữGAS32, GAS64, GASARM (GNU as), NASM, NASM64, LLC (LLVM IR)
Hệ thốngGO, RUST, D, ZIG, SWIFT, OBJC (Objective-C), DART
Hàm và logicHASK (Haskell), OCAML, SBCL (Common Lisp), SCM (Scheme), RKT (Racket), PRO (Prolog), LEAN4 (Lean 4)
Kịch bảnRUBY, PERL, PHP, LUA, TCL, BASH, AWK, SED, PIKE
Cổ điển và khácADA, CBL (COBOL), F95 (Fortran), FORTH, ALGL68 (Algol 68), TUR (Turing), BF (Brain****), ICK (INTERCAL)
Đặc biệtTEXT, OUTPUT (output-only), SCRATCH

Lưu ý

  • Ngôn ngữ phổ biến trong lập trình thi đấu là C++ (nên dùng CPP17 hoặc CPP20), Python 3 (với bài nặng, thử PYPY3), Java và Pascal.
  • Mỗi bài có thể đặt giới hạn thời gian và bộ nhớ riêng cho từng ngôn ngữ. Giới hạn áp dụng được ghi trên trang đề bài.
  • Các ngôn ngữ ít dùng có thể còn lỗi chưa phát hiện. Nếu gặp lỗi với một ngôn ngữ, hãy báo lỗi cho judge.

Tiếp theo