A robust tool to transpile Python source code into V(vlang) code.
Транслятор Python → V автоматически вставляет специальные комментарии //##LLM@@ в сгенерированный V-код. Эти комментарии помогают разработчикам и ИИ-ассистентам быстро находить места, где требуется ручная доработка из-за фундаментальных различий между Python и V.
Все LLM-комментарии начинаются с префикса //##LLM@@ и содержат:
Пример:
//##LLM@@ Function `wrapper` has both *args and **kwargs. V requires the variadic parameter (...args) to be the final parameter. Please reorder the parameters so that the variadic parameter is last, and update all calls to this function accordingly.
pub fn wrapper(args ...Any, kwargs map[string]Any) {
// ...
}
| Ситуация | Комментарий |
|---|---|
Функция с *args и **kwargs одновременно |
Требует перестановки параметров (variadic должен быть последним) |
| Необычное имя функции после транслитерации | Рекомендуется упростить имя |
| Перегруженные функции | Рекомендуется консолидировать или упростить имена |
global/nonlocal в функциях |
V не поддерживает глобальное состояние напрямую |
| Немаппированные dunder-методы | Требуется ручная реализация поведения |
Пример Python:
def wrapper(*args, **kwargs):
pass
Сгенерированный V:
//##LLM@@ Function `wrapper` has both *args and **kwargs. V requires the variadic parameter (...args) to be the final parameter. Please reorder the parameters so that the variadic parameter is last, and update all calls to this function accordingly.
pub fn wrapper(args ...Any, kwargs map[string]Any) {
// ...
}
| Ситуация | Комментарий |
|---|---|
getattr/setattr/hasattr |
V требует статической типизации полей |
eval()/exec()/compile() |
Динамическое выполнение кода не поддерживается в V |
del для переменных |
V не поддерживает удаление переменных из scope |
del для атрибутов |
V не поддерживает удаление атрибутов структур |
Пример Python:
value = getattr(obj, 'attr', None)
Сгенерированный V:
//##LLM@@ Dynamic attribute access (getattr/setattr/hasattr) used here. V structs are strictly typed at compile time. Please refactor using explicit struct fields, V's compile-time reflection ($for field in struct), or interfaces.
value := $if obj.has_field('attr') { true } $else { false }
| Ситуация | Комментарий |
|---|---|
try/except/finally |
V использует Result/Option типы вместо исключений |
Bare except: |
Может ловить неожиданные V panic/error |
except* (ExceptionGroup) |
V не поддерживает групповую обработку исключений |
continue в finally |
V defer не может использоваться здесь |
Bare raise вне exception block |
V не может re-raise без активной ошибки |
Пример Python:
try:
risky_operation()
except:
print("Error occurred")
Сгенерированный V:
//##LLM@@ Python try/except/finally block detected. V uses Result/Option types for error handling. Please refactor this function to return a Result (!Type) or Option (?Type), and handle errors using V's 'or { ... }' or '?' syntax.
risky_operation() or {
//##LLM@@ Bare 'except:' block detected. This is generally bad practice and may inadvertently catch unexpected V panics/errors. Please review and restrict the caught exception types if possible.
println('Error occurred')
}
| Ситуация | Комментарий |
|---|---|
enumerate() с одной переменной |
Требуется распаковать индекс и значение |
| Async comprehensions | Требуется реализовать семантику async итератора |
| Сложные вложенные comprehensions | Рекомендуется развернуть в явные циклы |
Пример Python:
for item in enumerate(data):
print(item)
Сгенерированный V:
//##LLM@@ Enumerate used with a single target variable instead of unpacking. Please rewrite to unpack the index and value properly.
for item in py_enumerate(data) {
println(item)
}
| Ситуация | Комментарий |
|---|---|
LiteralString с input() |
Потеря гарантии LiteralString |
LiteralString с non-literal значением |
Требуется проверить security implications |
| Обработка аннотации не удалась | Требуется вручную указать тип |
| Union типы (суммарные типы) | Рекомендуется дать осмысленное имя типу |
Пример Python:
from typing import LiteralString
s: LiteralString = input()
Сгенерированный V:
//##LLM@@ LiteralString variable 's' receives value from input() (loss of guarantee). Please review the security implications.
mut s := io.read_line()
| Ситуация | Комментарий |
|---|---|
| List comprehension | Поддержка отсутствует, требуется ручная транслитерация |
| Set comprehension | Поддержка отсутствует, требуется ручная транслитерация |
| Dict comprehension | Поддержка отсутствует, требуется ручная транслитерация |
| Generator expression | Поддержка отсутствует, требуется ручная транслитерация |
Пример Python:
result = [x * 2 for x in data if x > 0]
Сгенерированный V:
//##LLM@@ List comprehension support is missing in the transpiler. Please manually transpile this list comprehension.
result := []int{cap: data.len}
for x in data {
if x > 0 {
result << x * 2
}
}
| Модуль | Комментарий |
|---|---|
struct |
Методы заглушены, требуется реализовать packing/unpacking |
pickle |
Частичная маппинг на JSON, может не работать для сложных объектов |
fractions |
Парсинг из строки неполный |
threading |
PyThread — placeholder, требуется использовать V spawn |
bytes форматирование |
Заглушено, может быть некорректным |
Пример Python:
import pickle
data = pickle.dumps(obj)
Сгенерированный V:
//##LLM@@ Pickle operations are partially mapped to JSON serialization. This may not handle complex objects or exact pickle semantics. Please review and manually implement correct binary serialization if required.
data := json.encode(obj) or { panic(err) }
| Ситуация | Комментарий |
|---|---|
Generic модели BaseModel[T] |
Требуется ручная аннотация типов в V |
Field(default_factory=...) |
Требуется вручную инициализировать значение |
| Nested model fields | Валидация не вызывает .validate() для вложенных моделей |
Validator с mode='wrap' |
Требуется рефакторинг логики валидации |
@computed_field |
Генерируется как обычный метод без кэширования |
Пример Python:
from pydantic import BaseModel, Field
class Config(BaseModel):
items: list[str] = Field(default_factory=list)
Сгенерированный V:
//##LLM@@ Pydantic Generic model (BaseModel[T]) detected in 'Config'. This requires manual type annotation and adjustments in V. Please review the generated struct.
pub struct Config {
//##LLM@@ Pydantic 'Field(default_factory=...)' detected on field 'items'. This is not fully supported by the transpiler. Please manually initialize the default value in the V struct or factory.
items []string
}
| Ситуация | Комментарий |
|---|---|
| Неподдерживаемый target destructuring | Требуется ручная реализация распаковки |
Пример Python:
a, *b, c = [1, 2, 3, 4, 5]
Сгенерированный V:
//##LLM@@ Unsupported destructuring target: <class 'ast.Starred'>. Please manually implement this unpacking logic in V.
a := data[0]
b := data[1:-1]
c := data[-1]
Транслятор автоматически вставляет LLM-комментарии в следующих случаях:
*args + **kwargs одновременноgetattr, evalpickle → JSONДля быстрого поиска всех мест, требующих доработки, используйте:
# Поиск в Linux/macOS
grep -r "//##LLM@@" output/
# Поиск в Windows (PowerShell)
Select-String -Path "output/*.v" -Pattern "//##LLM@@"
# Подсчёт количества комментариев
grep -rc "//##LLM@@" output/ | awk -F: '{sum+=$2} END {print sum}'
try/except на Result/Option типы VLLM-комментарии разработаны для использования с ИИ-ассистентами:
//##LLM@@ комментарииПример промпта для ИИ:
Найди все //##LLM@@ комментарии в этом файле и исправь проблемы по порядку приоритета:
1. Функции с некорректными параметрами
2. Обработку ошибок
3. Динамические операции
Чтобы добавить новый тип LLM-комментария в транслятор:
py2v_transpiler/core/translator/self.output.append(f"{self._indent()}//##LLM@@ Описание проблемы. Рекомендации по исправлению.")
py2v_transpiler/tests/translator/ для проверки генерации комментарияНа март 2026 года в трансляторе реализовано 40+ уникальных типов LLM-комментариев, охватывающих: