Результаты поиска
Добавление функциональности сценариев в приложения .NET
У меня есть небольшая игра, написанная в C#., она использует базу данных в качестве бэк-энда. Это это была торговая карточная игра, и я хотел реализовать функцию карт в виде скрипта.
Я имею в виду, что у меня по существу есть интерфейс , ICard, который реализует класс карт ( public class Card056: ICard ) и который содержит функцию, вызываемую игрой.
Теперь, чтобы сделать вещь maintainable/moddable,, я хотел бы иметь класс для каждой карты в качестве исходного кода в базе данных и по существу скомпилировать его при первом использовании. Поэтому, когда мне нужно добавить/изменить карту, я просто добавлю ее в базу данных и скажу своему приложению обновить, не требуя никаких assembly deployment (тем более, что мы будем говорить о 1 assembly на карту, что означает сотни сборок).
Разве это возможно? Зарегистрируйте класс из исходного файла, а затем создайте его экземпляр и т. д.
ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);
Язык C#, но дополнительный бонус, если есть возможность написать сценарий на любом языке .NET.
Учимся писать компилятор
Предпочтительные языки: C/C++, Java и Ruby.
Я ищу несколько полезных книг/учебных пособий о том, как написать свой собственный компилятор просто для образовательных целей. Я лучше всего знаком с C/C++, Java и Ruby, поэтому предпочитаю ресурсы, которые включают один из этих трех, но любой хороший ресурс приемлем.
Производительность Компиляции CSharpCodeProvider
Разве CompileAssemblyFromDom быстрее, чем CompileAssemblyFromSource ?
Он должен быть таким, как он предположительно обходит внешний интерфейс компилятора.
C# логический порядок и поведение компилятора
В C#, (и не стесняйтесь отвечать за другие языки), в каком порядке среда выполнения оценивает логический оператор?
Пример:
DataTable myDt = new DataTable();
if (myDt != null && myDt.Rows.Count > 0)
{
//do some stuff with myDt
}
Какое утверждение делает во время выполнения оценки первого -
myDt != null
или:
myDt.Rows.Count > 0
?
Есть ли время, когда компилятор будет когда-либо оценивать оператор назад? Возможно, когда задействован оператор "OR"?
& известен как логический побитовый оператор и всегда вычисляет все вложенные выражения
Каков хороший пример использования побитового оператора вместо "короткого замыкания логического"?
Проверка содержимого строки? длина строки Против пустой строки
Что более эффективно для компилятора и как лучше всего проверить, является ли строка пустой?
- Проверка, соответствует ли длина строки = = 0
- Проверка пустоты строки (strVar == "")
Кроме того, зависит ли ответ от языка?
530   13   21:06, 1st October, 2020
Bootstrapping все еще требует внешней поддержки
Я слышал об идее bootstrapping языка, то есть написания компилятора/интерпретатора для самого языка. Мне было интересно, как это можно сделать, и я немного огляделся, и увидел, что кто-то сказал, что это может быть сделано только одним из них
- написание исходного компилятора на другом языке.
- ручное кодирование исходного компилятора в Assembly, что выглядит как частный случай первого
Мне кажется, что ни то, ни другое на самом деле не является языком в том смысле, что они оба нуждаются в поддержке извне. Есть ли способ на самом деле написать компилятор на своем собственном языке?
Mixed C++ / CLI TypeLoadException внутреннее ограничение: слишком много полей
Стремясь перенести некоторые новые UI в Managed/C# земли, я недавно включил поддержку Common Language Runtime Support (/clr) в большом устаревшем проекте, который использует MFC в общем DLL и опирается на около десятка других проектов в рамках нашего общего решения. Этот проект является ядром нашего приложения и будет управлять любым управляемым кодом UI, который создается (следовательно, необходимо включить поддержку clr для interop).
После исправления тонны мелких мелких ошибок и предупреждений мне наконец удалось заставить приложение компилироваться.. Однако запуск приложения вызывает EETypeLoadException и оставляет меня неспособным выполнить отладку...
Немного покопавшись, я обнаружил, что причина была "System.TypeLoadException: внутреннее ограничение: слишком много полей.- что происходит прямо в конце компиляции. Затем я нашел эту ссылку , которая предлагает разбить assembly на две или более библиотек DLL. Однако в моем случае это невозможно, поскольку ограничение, которое я имею, заключается в том, что унаследованный код в основном остается нетронутым.
Может ли кто-нибудь предложить другие возможные решения? Я действительно в тупике здесь.
Можно ли использовать новое размещение для массивов переносным способом?
Можно ли на самом деле использовать размещение нового в переносимом коде при использовании его для массивов?
Похоже, что указатель, который вы получаете от new[], не всегда совпадает с адресом, который вы передаете (5.3.4, Примечание 12 в стандарте, кажется, подтверждает, что это правильно), но я не вижу, как вы можете выделить буфер для массива, чтобы войти в него, если это так.
В следующем примере показана проблема. Скомпилированный с помощью Visual Studio, этот пример приводит к повреждению памяти:
#include <new>
#include <stdio.h>
class A
{
public:
A() : data(0) {}
virtual ~A() {}
int data;
};
int main()
{
const int NUMELEMENTS=20;
char *pBuffer = new char[NUMELEMENTS*sizeof(A)];
A *pA = new(pBuffer) A[NUMELEMENTS];
// With VC++, pA will be four bytes higher than pBuffer
printf("Buffer address: %x, Array address: %x\n", pBuffer, pA);
// Debug runtime will assert here due to heap corruption
delete[] pBuffer;
return 0;
}
Глядя на память, компилятор, похоже, использует первые четыре байта буфера для хранения подсчета количества элементов в нем. Это означает, что поскольку буфер имеет только sizeof(A)*NUMELEMENTS размер, последний элемент массива записывается в нераспределенную кучу.
Итак, вопрос в том, Можете ли вы узнать, сколько дополнительных накладных расходов требуется вашей реализации для безопасного использования placement new[]? В идеале мне нужна техника, переносимая между разными компиляторами. Обратите внимание, что, по крайней мере, в случае VC, накладные расходы, похоже, отличаются для разных классов. Например, если я удаляю виртуальный деструктор в Примере, то адрес, возвращаемый из new[], совпадает с адресом, который я передаю.
Какие инструменты (бесплатные или другие) вы находите полезными для разработки и отладки C#/C++?
Вот некоторые из них, которые я использую (все они находятся в свободном доступе):
Hex Редактор: Hexplorer
Отладчик: WinDbg
Компилятор Документации: SandCastle
Автоматическая Сборка: Круиз Control.Net
C в Visual Studio
Я пытаюсь выучить C. Как разработчик C#, мой IDE-это Visual Studio. Я слышал, что это хорошая среда для развития C/C++. Однако, кажется, независимо от того, что я пытаюсь сделать, интуиция меня подводит. Может ли кто-то дать хорошие ресурсы для того, чтобы либо:
- изучите входы и выходы из C в Visual Studio
- рекомендую лучший компилятор C IDE +
Правка: Смотрите также: https://stackoverflow.com/questions/951516/a-good-c-ide
Компилятор .NET -- DEBUG против RELEASE
В течение многих лет я использую константу компилятора DEBUG в VB.NET для записи сообщений в консоль. Я также использовал System.Diagnostics.Debug.Write подобным образом. Я всегда понимал, что когда RELEASE использовался в качестве опции сборки, все эти операторы были опущены компилятором, освобождая ваш производственный код от накладных расходов отладочных операторов. Недавно, работая с Silverlight 2 Beta 2, я заметил, что Visual Studio на самом деле подключается к сборке RELEASE, которую я запускал с общедоступного веб-сайта, и отображает DEBUG инструкции, которые, как я предполагал, даже не были скомпилированы! Итак, моя первая склонность заключается в предположении, что с моим окружением что-то не так, но я также хочу спросить любого, кто обладает глубокими знаниями о System.Diagnostics.Debug и DEBUG build option в целом, что я могу здесь неправильно понять.