Search
Write a publication
Pull to refresh
0
0
Send message

Хороший проект, особенно интересно будет посмотреть как будешь интегрировать llvm ir (к слову есть ещё несколько других достойных, может быть упомянешь о них)! Единственное не пойму - почему не добавить побитовые операции как встроенные операции в языке? Это же одни из самых быстрых операций которые компьютер может выполнять, зачем их из одной инструкции раздувать во множество?

"Компиляция на этапе выполнения" это скорее к джитам(jit) или языкам, которые открывают сам компилятор как встроенную библиотеку внутри языка, что не является случаем с++.

А вот "выполнение во время компиляции" - выполнение действий из исходного кода, до запуска программы, во время её компиляции - как раз то, что по идее обсуждается в статье.

Спасибо, что поделились, это и в правду кажется более распространенной нуждой для компиляторов питона.

Всё идёт отлично. Писать можно на чем угодно, с чем вы себя чувствуете уверенно, в том и делайте. Ведь компилятор это обычная программа , такая же как любые другие, она получает одну строку текста и выдают другую. Если интересно о том, как создаются компиляторы, то сначала поищите информацию на счет лексеров, парсеров, потом на счёт того, какие бывают промежуточные представления кода (IR), а потом о генерации кода (codegen). Сейчас проще начать с генерации не машинного кода, а например llvm ir или прямо транслировать в си/с++, другой компилируемый язык. Таким образом вы конечно, пропускает некоторые этапы "понижения" уровня кода и когда вы окончательно будете довольны с функционалом компилятора, возможно будет задуматься и о прямой генерации машинного кода.

Из личного интереса (я тоже разрабатываю компилятор для питона), как вам помогает этот проект?

Что именно, по-вашему, является вредной информацией?)

Вы нашли это дело захватывающим - это самое ценное, если вы продолжите заниматься программированием, решение проблем останется также приятным, а сложность проблем, которые вы можете решать будет повышаться. А gpt программистов не заменит, зато может улучшить их способности, это такой тандем, и потому нет ничего зазорного в его использовании, наоборот!

Здесь как обычно используется проверка на конкретный объект:

MISSING = object()

dic = {}
key = ...

if (val := dic.get(key, MISSING)) is not MISSING:
  ...

Но правда говоря, в большинстве случаев проверка на None - более чем.

Ну и да, правда говоря, если иметь возможность вернуть именно ссылку/указатель, то проверка на присутствие пары ключ-значения становится проще.

```from random import randint

# такая функция называется лямбдой

get_random_int = lambda min, max: randint(min, max)

print(f'Случайное целое число в диапазоне от 0 до 100: {get_random_int(0, 100)}')

```

Что с вами не так? Зачем было в лямбду функцию засовывать, если без лямбды можно было напрямую вызвать? Тем более, зачем вы присваиваете имя лямбде? Смысл лямбды в том, что у неё нет имени ...

Information

Rating
Does not participate
Registered
Activity