Войти
ФлеймФорумПрограммирование

Сделал интерпретатор С++11 подобного языка.

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 Следующая »
#0
17:24, 24 мар. 2016

Дома. Для Развлечения.

Секрет: Ещё по дороге сделал не меньше двух интерпретаторов asm подобных языков. А на этой неделе сделал простую виртуальную машину исполняющую байткод.
Только тсс, я вам этого не говорил ^_^

Потом начал думать над тем, чтобы сделать журнал разработчика интерпретатора С++11 подобного языка. Но рассказывать про то что уже сделано как-то не так интересно и для публики и для меня. А писать блог во время разработки я не мог, так как был сильно увлёчен процессом.

У меня всегда такая беда - или я пишу код и не могу отвлечся или я страдю фигнёй и не могу начать писать код.

Выкладывать исполняемый файл в публичный доступ бесплатно не стал и не собираюсь, так цель разработки - развлечение, а не заработки или популизм. Максимум что могу показать публично - это пример кода на этом языке и скриншоты/видео, но только в обмен на что-то.

Ваши предложения?

Ах, да, а ещё я ищу работу.

HR не пройдёт!

Текст который не понятно куда вставлять(Удалить его нафиг?):
Мой предыдущий журнал разработчика не набрал популярности(такой цели и небыло), но я своей цели добился - перешёл на С++. А журнал забросил. Ссылку не дам.

Такие дела.


#1
17:38, 24 мар. 2016

Adler
> С++11 подобного языка
Какого типа в нем могут быть переменные? Может его точнее называть С-подобным?

#2
17:40, 24 мар. 2016

https://en.wikipedia.org/wiki/Ch_(computer_programming)
https://en.wikipedia.org/wiki/CINT
https://root.cern.ch/cling
?

#3
17:48, 24 мар. 2016

cNoNim
Те что до 2011 года можно сразу отбросить, не конкуренты.

#4
17:50, 24 мар. 2016

kipar
да я больше в качестве исторической справки
Ch проприетарный кажись, CINT старый
а вот cling вполне

#5
17:56, 24 мар. 2016

kipar
> Какого типа в нем могут быть переменные? Может его точнее называть С-подобным?
Я если можно вот так отвечу.

У меня там есть:
  Пользовательские функции.
  Пользовательские структуры(поддерживаются вложеные структуры и методы).
  Встроеные типы: string, int, double.
  Встроеный шаблонный vector{T}. // можно вместо T вставлять пользовательские структуры.
  Можно перегружать почти все операторы так же как в С++.
  Есть вывод типа auto.
  Области видимости переменных.

#6
18:14, 24 мар. 2016

Adler
Ну ок, чуть ушел от сиподобного. Но как минимум кроме вектора нужен ассоциативный массив. Ну и какая-нибудь фишка которой у конкурентов нет.

#7
18:41, 24 мар. 2016

kipar
> Но как минимум кроме вектора нужен ассоциативный массив.
Мне он не нужен, я им спецально не пользуюсь в С++. Все никак не могу побороть идею, что ассоциативные массивы - это преждевременная оптимизация, а забота о том, где должен быть hash_map, а где вектор из структур - проблемма компилятора, но не кодера.

#8
19:11, 24 мар. 2016

Adler
> а забота о том, где должен быть hash_map, а где вектор из структур - проблемма
> компилятора, но не кодера.

Это то есть как?

в С++ компилятор сам ставит хэшмап с поиском по хэшам вместо вектора? Да еще только "там где нужно"?

#9
19:33, 24 мар. 2016

Eanton
> Это то есть как?
>
> в С++ компилятор сам ставит хэшмап с поиском по хэшам вместо вектора? Да еще
> только "там где нужно"?
Существующие С++ компиляторы так не умеют и наверно даже не планируют делать такие оптимизации. Более того, такое возможно только для подмножества языка С++(на котором я и пишу практически весь свой код).

#10
20:21, 24 мар. 2016

Adler
это как это набор элементов можно суметь заменить на ассоциативный набор... да еще и автоматом?

#11
20:38, 24 мар. 2016

Adler
Ассоциативный массив это возможность поставить одному набору в соответствие другой. Т.е. писать used[filename] = 1 . Это как раз вектор структур или любая другая конструкция где надо будет вручную добавлять или искать будет преждевременной оптимизацией.

#12
21:07, 24 мар. 2016

Adler
> Встроеные типы: string
string в C++ не встроенный, или для интерпретатора решил захардкодить?
выложи код на гитхаб - интересно посмотреть)

#13
22:33, 24 мар. 2016

d.m.k
> это как это набор элементов можно суметь заменить на ассоциативный набор... да
> еще и автоматом?
hash_map в хорошем коде очень редко бывает нужен отдельно от набора элементов. Тоесть набор элементов первичен, а hash_map - это ускоряющая структура для быстрого поиска в нём.

Первая пробемма с которой я полностью расправился - это полная сериализация состаяния моих С++11 прог.  И решение этой пробеммы нигде не использует hash_map. И все мои программы не используют hash_map. И когда я это заметил, я решил вообще не делать поддержку hash_map`ов моим сериализатором и нигде никогда до последнего не использовать hash_map. Вроде полёт нормальный, так и не использую.

Хотя во время написания последней реализации интерпретатора С++11 подобного языка мне казалось, что сильно не хватает hash_map`а для быстро поиска тела функции по прототипу. Но потом я понял, что после трансляции в байткод он будет не нужен и я успокоился.

Поэтому появилась идея особенности компиляторов:
Runtime часть компилятора на "борту" программы может сама заметить что какой-то набор элементов внутри программы очень "горячий". Затем он может локализовать основные паттерны использования этого набора и попытаться "прицепить" к нему ускоряющая структуры типа hash_map, radix tree, linked list итд. Тоже самое можно сделать и на этапе компиляции если предоставить компилятору "целевой сценарий использования программы" после чего компилятор потратив кучу времени родит оптимизированную прогу заточенную под этот целевой сценарий использования программы, но уже без Runtime части компилятора(например для некоторых встраиваемых систем она неприемлема).

Но это всё фантастика ^_^ такого не бывает.


Added:

kipar
>used[filename] = 1
Если тут filename - это строка и код подразумевает поиск по строке, то я считаю, что этот код можно воспринимать как синтаксический сахар над функцией поиска в векторе структур. А ещё это совсем немножко, но уже говнокод :). Точнее каждый раз когда мне в проекте надо написать такой код я понимаю, что O(1) уже недостижим => или задача говно или архитектура говно => а есть ли смысл стараться? => можно подумать над тем, чтобы всем на зло влепить тормозной unique_vector{string} ибо нефиг затягивать мучительную смертельную агонию. xD

kipar
> Ассоциативный массив это возможность поставить одному набору в соответствие
> другой.
Только ассоциативный массив не умеет это делать за O(1), а вектор - да, но с оговорками.

kipar
>Это как раз вектор структур или любая другая конструкция где надо будет вручную добавлять или искать будет преждевременной оптимизацией.
Вектор структур преждевременная оптимизация? Ха-ха-ха.
Нет, обычно вектор структур это формат источника и приёмника и информации. И ещё в этом формате инфа передаётся по сети. А hash_map обычно просто ускоряющая структура, которая строится для некоторых полей структуры из этого вектора.

Try
> string в C++ не встроенный, или для интерпретатора решил захардкодить?
Да, долго думал что делать со строками, а потом не дождавшись хорошей идеи захардкодил.

Try
> выложи код на гитхаб - интересно посмотреть)
Я конечно помню твою 3д стратежку на конкурс где вроде можно было играть подключив две мышки к ПК, но нет. Так просто от своих слов не откажусь:
>цель разработки - развлечение, а не заработки или популизм

Но могу добавить желающих в список рассылки новости о публикации исходников/или релизе первого комерческого продукта на базе этой технологии, если вдруг что-то из этого произойдёт :)

а пока я код интерпретатора на воздух всё ещё менять не собираюсь.

#14
23:14, 24 мар. 2016

Adler
> или релизе первого комерческого продукта на базе этой технологии, если вдруг
> что-то из этого произойдёт :)
> а пока я код интерпретатора на воздух всё ещё менять не собираюсь.
И как ты себе это представляешь? Кому нужен ещё один тормозной интерпретатор? Вот если бы ты компилятор сделал, тогда другое дело.
Так можно было бы ради интереса глянуть исходнички, но и не настолько это нужно, чтобы следить за выходом твоего коммерческого продукта, а потом его ещё покупать.

Страницы: 1 2 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.