ТОМ2 - платформа для парсерных игр

Объявление

Открыт сайт tom2-game.ru.


Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Новый ТОМ

Сообщений 61 страница 65 из 65

61

Хотя вопрос куда глубже, чем кажется на первый взгляд. Ведь не всё живое, с чем можно взаимодействовать разным способом. Например, говорить можно и с роботом и с зеркалом, хотя очевидно, что для последнего не могут быть применены понятия Живое/Мёртвое. Т.е. нужен целый спектр признаков, определяющих действия, которые можно совершать с НПС. Если объект может говорит, значит "говорящий", не может - "немой". Может драться - "боеспособный". Может двигаться - "ходячий". Дальше возникают сложности: при убийстве НПС нужно поменять все атрибуты активности на противоположные. При других воздействиях, например при наложении заклинания "молчанка", менять только некоторые атрибуты ("говорящий" на "немой"), а остальные оставить как есть. Общего понятия "мёртвости" НПС как такового не существует.

62

Саша, 2 твоих поста противоречат друг-другу  :rofl:
1й мне больше понравился - действительно, не нужно понимать мёртвое/живое буквально; ведь мы же говорим "проект умер или еще жив?"

63

Давненько я не брал в руки шашку шашек.
Прошедший 2018 год с одной стороны для платформы ТОМ прошел впустую (на что есть множество причин), а с другой стороны был годом раздумий и различных экспериментов.

Перечислю проблемы, которые не дают мне жить:
1. Инструментарий, на котором пишется платформа - borland builder 6 C++ - устарел еще в конце прошлого столетия. Устарел настолько, что исходники ТОМа стыдно показывать. Попытки пересесть на какой-нибудь современный компилятор я делал в разное время, но что-то как-то не пошло.
2. Новые стандарты С++11, С++14, С++17 содержат много вкусного, в частности там решены проблемы, которые я обходил в коде ТОМа грязными трюками.
3. Развитые "новые" библиотеки (типа Boost и д.р.) позволили бы отказаться от собственных велосипедных шаблонов. В частности динамические массивы, сортированные списки, хэши, можно было бы взять оттуда. Это было бы правильно и красиво.
4. Я не чувствую в себе запала, требуемого для штурма первых 3-х пунктов. Мне не интересен C++ сам по себе, я никогда не буду работать на нём профессионально. Меня интересует прежде всего решение моей конкретной задачи.
5. Быстродействие современных компьютеров свело на нет преимущество компилируемых языков перед интерпретируемыми. Писать в 21 веке на компилируемом языке - это блажь (если только вы не пишите драйвер к какому-нибудь железу).
6. Моя работа стопорится из-за возникающих ошибок в коде C++ на фоне возрастающей сложности системы и увеличения объемов исходников. В какой-то момент я понял что больше времени уделяю системе отлова и обработки ошибок, нежели развитию полезных функций платформы.

Что я пытался предпринять:
Естественно, первая мысль, это пересесть на какой либо интерпретируемый язык. Например Java. Сложность изучения нового языка примерно сопоставима со сложностью освоения нового IDE C++.
Java отпал довольно быстро, в основном из-за жесткой типизации.
Groovy продержался гораздо дольше. Также с большим или меньшим пристрастием я рассматривал Ruby, PHP, Python и еще что-то подобное.
Я искал возможность создания собственного сложного DSL на основе одного из этих языков.
В первую очередь мне нужны сложные структуры данных, живущие по моим правилам,  возможность внедрения собственной классовой системы наследования, управление контекстом при вызове методов. Ну и там еще всякие мелочи.
Продвинутые языки содержат массу системных методов/перехватов позволяющих реализовать нужные мне вещи. Но...
Но нельзя сказать что всё это делается просто и интуитивно прозрачно.
Но всегда находилось что-то, что реализовать существующими способами невозможно.
Но надежность работы системы, реализованной на уровне хаков, оставляет желать лучшего; всегда есть вероятность что в какой-то момент что-то отвалится, и восстановить это окажется невозможным.
Еще один минус - синтаксис языка ТОМ неизбежно изменился бы в сторону выбранного языка с необходимостью переписывания всей стандартной библиотеки. Плюс этого минуса в бесплатном расширении возможностей языка за счет выбранной платформы, но я не уверен что мне нужны все эти функции, хотя кто-нибудь наверное пользовался бы.
В итоге я зашёл в очередной тупик.
В сухом остатке знания по реализации DSL на современных языках, что тоже не плохо.

В итоге:
1. Остаёмся на builder 6 C++.
2. Платформа переписывается еще раз.
3. Ядро, написанное на С++, максимально ужимается, вся функциональность, которую можно реализовать вне ядра, переносится в системную библиотеку. Ядро реализует только урезанную "ядерную" версию языка.
4. Стиль кода ядра максимально приближается чистому C. Использование классов, объектов, наследования, сводится к минимуму. К сожалению, я не готов отказаться от исключений, конструкторов и деструкторов. В результате мы должны получить весьма консервативное ядро, которое будет изменяться редко и не существенно.
5. В стандартной библиотеке появятся системные модули расширения языка. Сам парсер, и система классового наследования будут реализованы именно там. Большей частью платформа ТОМ будет написана на языке ТОМ.
6. Синтаксис языка изменится не существенно. Это не будет ТОМ3, а всего лишь следующая версия ТОМ2.
Всё это имеет массу следствий, которые возможно, распишу потом ниже.

64

У меня тоже не раз появлялось желание изучить какой-нибудь современный язык, чтоб пересесть на него. И вот теперь я знаю синтаксис C++, Python, Lua и даже немножко Java и Go. Но так и не пересел ни на что другое. Понял, что знать можно (и полезно) много языков программирования, но делать серьёзные проекты лучше, проще и быстрее на своём основном языке (если он конечно позволяет выполнить конкретную задачу). Работая с каким-то языком на протяжении десятка лет и больше, начинаешь владеть им на таком уровне, что мысли просто сами перетекают в оформленный код. Не приходится задумываться о возможностях и ограничениях языка.

Желаю удачи по переписыванию платформы.

65

Alexandr написал(а):

Желаю удачи по переписыванию платформы.

Спасибо! не в первый раз...

На текущий момент:
- модуль токенизации написан с нуля, и нравится мне гораздо больше старого; в частности, в нём реализован блочный комментарий /* */;
- модуль шаблонов динамических массивов и сортированных списков взят старый (в дальнейшем нужно выкинуть из него лишнее);
- модуль UNICODE строк взят полностью без изменений.
- модуль стандартной библиотеки взят и адаптирован с небольшими изменениями;
- Написана программа для unit-тестирования; модули можно тестировать как по отдельности, так и совместно. Очень удобная штука.