Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221

Можно ли так "издеваться" над map?

24.09.2021, 20:05. Показов 1800. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я пишу свой язык программирования и хочу добавить туда нормальные переменные, а не адреса оперативной памяти. Написал такой вот небольшой код, который определяет ключ как пару целочисленное - строка а значение как у той переменной которая объявляется:
C++
1
map<pair<int, string>, int> int32;
У меня там будет проверка на область видимости и если переменная уже вне области видимости, то она автоматически удаляется.
первый int - это ключ области видимости (в глобальной области видимости он равен 0, но если будет объявлен в одних фигурных скобках, то уже ключ будет равен 1, если внутри скобок будут тоже скобки то ключ уже будет 2 и так далее... ну как в обычном ЯП с C-подобием)
строка - имя переменной, к которой идет обращение.
второй int - само значение переменной (просто это объявление для целочисленных переменных, он может быть каким угодно)

Так вот, подскажите, эта конструкция будет идеальной для переменной или нет. Вроде компилируется, но такое чувство что эта штуковина будет очень криво работать т. к. придется еще и указывать область видимости, в которой создана переменная, а параметр области будет у меня меняться от скобок, то будет 0, то 2, может вообще 100. как не указывая ключ обращаться к переменной?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.09.2021, 20:05
Ответы с готовыми решениями:

Рекурсия: можно ли разместить предметы в контейнерах так, чтобы груз не выступал над контейнером?
Имеется N контейнеров высоты H. Задано множество предметов, каждый из которых имеет свою высоту. Можно ли разместить предметы в этих...

При переносе кнопки над элементами, можно ли узнать над каким элементом переносишь?
А точнее, у меня на страничке куча кнопок, одну я беру и переношу в произвольное место, при этом мне нужно знать над каким элементам я...

Что не так со статическими map-ами
есть простейший код: #include &lt;iostream&gt; #include &lt;map&gt; #include &lt;string&gt; class someClass { public: static...

5
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
25.09.2021, 13:28
Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
в глобальной области видимости он равен 0, но если будет объявлен в одних фигурных скобках, то уже ключ будет равен 1, если внутри скобок будут тоже скобки то ключ уже будет 2
Вроде б ты уже обнаружил один недостаток такого хранения только глубины.

В плюсах - насколько я это понимаю(не буду утверждать что всё именно так, могу ошибаться) - немножко всё не так. Все эти безымянные блоки на самом деле не очень-то безымянные. Через это каждая переменная имеет уникальное (полное) имя:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//псевдокод
int  x{0}, y{0}, z{0}; // ::x ::y ::z
 
int main()
int_main : {
 
    int  x{1}, y{1}; // ::int_main::x, ::int_main::y
 
    std::cout << x;  // 1 ::int_main::x
    std::cout << ::x; // 0 ::x !!
    std::cout << y;  // 1 ::int_main::y
    std::cout << z;  // 0 ::z
 
 
    unnamed_A : {
        
        int y{2};       // ::int_main::unnamed_A::y
 
        
        std::cout << x; // 1 ::int_main::x
        std::cout << y; // 2 ::int_main::unnamed_A::y
        std::cout << z; // 0 ::z
 
        unnamed_B : {
            int v{4}; // ::int_main::unnamed_A::unnamed_B::v
            std::cout << v; // 4 ::int_main::unnamed_A::unnamed_B::v
            std::cout << z; // 0 ::z
        }
        std::cout << v; // ERR: Who is that??
    }
 
    retu
Тут можно заметить что, условно говоря, переменные живут на ветке дерева из областей видимости и поиск переменной в области идёт изнутри наружу по этой ветке к корню.

Попробуй отсюда отталкиваться.

Ну и XLAT уже ж предлагал Как создать область видимости в самодельном языке программирования?

По сути и получается некий стек объектов типа namespace; вход в новую область - на верху стека создаётся объект, в котором создаются переменные этой области и определяются ссылки на нужные внешние переменные. Выход из области - верхушка удаляется нафиг вместе с содержимым и нет нужды хранить глубину или ещё что-то.
0
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221
25.09.2021, 15:08  [ТС]
Folian, я уже сделал один прототип решения данной задачи:
C++
1
2
map<string, int> AVint32;
    map<pair<string, int>, int> int32;
Code
1
2
3
4
5
6
7
8
{ //инкремент ключа
$ int abcd = 0; //Объявление переменной с ключом области 1
} //декремент ключа. С этого момента все объявленные и инициализированные переменные в блоке стираются со всеми потрохами
 
$ string a123 = "Объявление глобальной переменной";
{
$ bool b456 = 0; //Тут создается новая переменная с тем же ключом 1, но старая переменная уже никак не будет здесь объявлена
} //Переменная снова уничтожена
А ещё я уже понял что буду делать язык C-подобным, потому что так легче. Также добавлю подключение собственных заголовков.

Добавлено через 11 минут
О том как будет объявляться переменная:
1. Идет обращение к команде взаимодействия с переменными (то есть $)
2. Выбирается тип переменной (int)
3. Вводится значение самой переменной (допустим 1024)
4. создается переменная с помощью этих двух команд:
C++
1
2
int32[{name, area}] = value;
AVint32[name] = area;
5. присваивание значения переменной работает так:
C++
1
int32[{name, AVint32[name]}] = value;
6. Когда интерпретатор встречает очередную фигурную скобку, то он при помощи if проверяет меньше ли ключ области, и если меньше, то переменные стираются.

Добавлено через 3 минуты
...Хотя я тут подумал, а зачем мне делать свой язык? За всё это время можно выучить C# и уйти в геймдев чтобы не морочить голову...
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
25.09.2021, 19:22
Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
...Хотя я тут подумал, а зачем мне делать свой язык?
Ну это же по меньшей мере небезынтересно и познавательно.
А коль получится что-то более или менее законченное - уже будут свои красивые исходники и (а чем чёрт не шутит) возможно окажется что оно, при лёгкой обработке напильником, сможет быть полезным для решения чего-либо в три строки.
В любом случае исходники и опыт не пропьёшь
0
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221
25.09.2021, 21:20  [ТС]
Folian, хм, а если попытаться сделять ЯП, который будет предназначен только для создания игр? По идее в нем максимум должно быть что-то похожее на ООП, но чуть полегче, типа создал объект внутриигровой и когда с этим объектом что то происходит, то он будет легко изменяться... В принципе можно попробовать сделать небольшой движок на c++, интегрировать туда сам язык и на нем уже делать игру. Или же можно написать фреймворк для плюсов, где будет упрощена работа с памятью, указателями и объектами. Хотя я и не умею писать в стиле ООП, но можно попробовать написать максимально аккуратный фреймворк и уже при помощи него создавать хорошие программы...
Да и тем более как кажется фреймворк создать проще чем отдельный язык, ведь то, чтобы язык правильно работал ему нужно дополнительно написать логику выполнения действий, объявления, инициализацию и прочее. А в плюсах этого делать не нужно и можно сконцетрировать весь процесс на добавление новых функций для языка. Можно написать альтернативу ООП, графику, да что угодно!
Только вот вопрос, с чего начинать?
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
25.09.2021, 22:10
Лучший ответ Сообщение было отмечено Aleksey_1024 как решение

Решение

Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
хм, а если попытаться сделять ЯП, который будет предназначен только для создания игр?
Посмотри в сторону Lua, это как раз что-то между, скриптовая тема; большие игры на ней не делаются, но её используют. Сам её не использовал, но во многих игрушках замечал применение.
Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
По идее в нем максимум должно быть что-то похожее на ООП, но чуть полегче, типа создал объект внутриигровой и когда с этим объектом что то происходит, то он будет легко изменяться...
В игрушках много ООП.
Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
Только вот вопрос, с чего начинать?
Подводишь к геймдеву - сделай игровой движок-платформер, например, для начала; возьми какой SFML (этот просто мне по нраву, простой как семь копеек) чтоб не заморачиваться особо и наклепай удобное.
Когда-то таким занимался - это тоже очень интересное.
А если потом обернёшь в формочки и прикрутишь свой lua скриптоязык - ты победил, у тебя теперь свой(!) целый кошерный конструктор маленьких игОр!

Цитата Сообщение от Aleksey_1024 Посмотреть сообщение
В принципе можно попробовать сделать небольшой движок на c++, интегрировать туда сам язык и на нем уже делать игру.
А! Ну, в принципе-то как-то так; только сама "игра" уже заранее написана на плюсах, а язык лишь задаёт параметры. Как станок с ЧПУ.
Ну эт всё чисто моё видение, я не настаиваю ни на чём.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.09.2021, 22:10
Помогаю со студенческими работами здесь

Что не так, из-за чего не работает метод map?
Здравствуйте. descriptionObj является массивом с 1 элементом в виде объекта. Проблема в коде внутри descriptionValue , он показывает...

Map с поиском как по ключу, так и по значению
Реализовано ли подобное в stl? (или в boost, например) И как в теории выглядит эта реализация? Предполагаю, что это два сбалансированных...

Можно ли приготовить Map/Dictionary?
Доброго времени суток. Втыкая в документацию к монге, так и не понял, есть ли возможность сохранить в ней данные в виде...

Можно ли реализовать Map от своего класса?
Надо сделать что-то подобное, подскажите возможно ли такое и как? public class Main { public static void main(String args) { ...

сегодня так можно сказать праздник так что...
простите меня за все пожалуйста!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru