Вижу, что некоторые комментаторы подталкивают вас далеко вперёд, но я бы хотел обратить внимание на очень важный момент: на работу с памятью. Сейчас у вас лишь есть выделение памяти на стеке (alloca в llvm), но вы ведь 100% захотите выделять память и в куче тоже. Но тогда сразу нужно подумать о том, кто ответственен за это: или разработчик (как в C malloc/free, как в C++ new/delete) или язык (через GC как во многиех языках или посложнее) или как-то ещё.
Это обязательная история, но после этого вас остановит только фантазия
Как уже отмечали: это скорее транспилятор в nodejs, а не интерпретатор на nodejs. Ваша задача решается лексером -> map по токенам -> join в исходник -> запуск.
Долгосрочные планы очень амбициозные, но сразу скажу, что вам с десяток раз придётся всё переписать с нуля, чтобы начать двигаться в правильном направлении.
Раз время позволяет (13 лет) и желание огромно, то рекомендую копать в сторону llvm при учёте крепкого понимания базы (что такое указатели, что есть стек и куча и т.п.). Да, тема очень объемная, вообще не на один день, но повышение хард-скиллов обещаю.
Можете попробовать начать с малого, например классика - пусть код - набор арифметических целых выражений, присваивание и лог в терминал. Задача: написать компилятор. Потом можно и условия/циклы добавить, типы и т.п. И только после этого можно будет подумать над jit или своим интерпретатором.
По крайней мере, это ИМХО, я бы так поступил на вашем месте, если вам действительно интересна тема разработки языков программирования
Согласен, ChatGPT - очень слабый. Сам использую для быстрой генерации ответов для линейных задач, чуть сложнее - и он сыпится. Но проблема в том, что собеседуемые пытаются использовать его вместо проявления умений. Даже на самом собесе
Человек видит моё резюме, там написано, что я работал там-то там-то, список навыков и рабочих мест.
Сколько раз я видел своего HR с горящими глазами "я тебе такого кандидата нашёл! Он везде работал, всё умеет", а на собесе оказывалось, что либо опыт липовый, либо человек за 100 лет опыта 2 раза клавиатуру потрогал. Я не задаю тупые вопросы, но я даю задачки на 5 минут, которые в моём понимании "оскорбительно простые для сеньор левела". И сыпались на них подавляющее большинство. Кто не сыпался - того сразу брал на работу. Просто потому что выбирать почти не из кого.
P. S. Сейчас мне удалось сократить количество собесов буквально в 20 раз тем, что HR всем без исключения даёт 1 задачку, которую делать 5 минут, а проверять мне 1 минуту (chat gpt до сих пор даëт неправильное решение на неё).
Замечательная статья, продолжайте!
Вижу, что некоторые комментаторы подталкивают вас далеко вперёд, но я бы хотел обратить внимание на очень важный момент: на работу с памятью. Сейчас у вас лишь есть выделение памяти на стеке (
allocaв llvm), но вы ведь 100% захотите выделять память и в куче тоже. Но тогда сразу нужно подумать о том, кто ответственен за это: или разработчик (как в C malloc/free, как в C++ new/delete) или язык (через GC как во многиех языках или посложнее) или как-то ещё.Это обязательная история, но после этого вас остановит только фантазия
Как уже отмечали: это скорее транспилятор в nodejs, а не интерпретатор на nodejs. Ваша задача решается лексером -> map по токенам -> join в исходник -> запуск.
Долгосрочные планы очень амбициозные, но сразу скажу, что вам с десяток раз придётся всё переписать с нуля, чтобы начать двигаться в правильном направлении.
Раз время позволяет (13 лет) и желание огромно, то рекомендую копать в сторону llvm при учёте крепкого понимания базы (что такое указатели, что есть стек и куча и т.п.). Да, тема очень объемная, вообще не на один день, но повышение хард-скиллов обещаю.
Можете попробовать начать с малого, например классика - пусть код - набор арифметических целых выражений, присваивание и лог в терминал. Задача: написать компилятор. Потом можно и условия/циклы добавить, типы и т.п. И только после этого можно будет подумать над jit или своим интерпретатором.
По крайней мере, это ИМХО, я бы так поступил на вашем месте, если вам действительно интересна тема разработки языков программирования
Согласен, ChatGPT - очень слабый. Сам использую для быстрой генерации ответов для линейных задач, чуть сложнее - и он сыпится. Но проблема в том, что собеседуемые пытаются использовать его вместо проявления умений. Даже на самом собесе
Сколько раз я видел своего HR с горящими глазами "я тебе такого кандидата нашёл! Он везде работал, всё умеет", а на собесе оказывалось, что либо опыт липовый, либо человек за 100 лет опыта 2 раза клавиатуру потрогал. Я не задаю тупые вопросы, но я даю задачки на 5 минут, которые в моём понимании "оскорбительно простые для сеньор левела". И сыпались на них подавляющее большинство. Кто не сыпался - того сразу брал на работу. Просто потому что выбирать почти не из кого.
P. S. Сейчас мне удалось сократить количество собесов буквально в 20 раз тем, что HR всем без исключения даёт 1 задачку, которую делать 5 минут, а проверять мне 1 минуту (chat gpt до сих пор даëт неправильное решение на неё).
Я специально потратил время, чтобы изучить:
Это в лучшем случае express. Ни о какой серьёзной модульной разработке речи не идёт