Найдено результатов: 11

Добавление функциональности сценариев в приложения .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#   .net   scripting   compiler-construction    

592   9   16:03, 1st July, 2020


Учимся писать компилятор

Предпочтительные языки: C/C++, Java и Ruby.

Я ищу несколько полезных книг/учебных пособий о том, как написать свой собственный компилятор просто для образовательных целей. Я лучше всего знаком с C/C++, Java и Ruby, поэтому предпочитаю ресурсы, которые включают один из этих трех, но любой хороший ресурс приемлем.

compiler-construction   language-agnostic    

824   22   16:03, 1st July, 2020


Производительность Компиляции CSharpCodeProvider

Разве CompileAssemblyFromDom быстрее, чем CompileAssemblyFromSource ?

Он должен быть таким, как он предположительно обходит внешний интерфейс компилятора.

c#   performance   compiler-construction    

539   2   16:03, 1st July, 2020


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"?


& известен как логический побитовый оператор и всегда вычисляет все вложенные выражения

Каков хороший пример использования побитового оператора вместо "короткого замыкания логического"?

c#   language-agnostic   compiler-construction   logic    

550   18   16:03, 1st July, 2020


Проверка содержимого строки? длина строки Против пустой строки

Что более эффективно для компилятора и как лучше всего проверить, является ли строка пустой?

  1. Проверка, соответствует ли длина строки = = 0
  2. Проверка пустоты строки (strVar == "")

Кроме того, зависит ли ответ от языка?

string   optimization   language-agnostic   compiler-construction    

530   13   21:06, 1st October, 2020


Bootstrapping все еще требует внешней поддержки

Я слышал об идее bootstrapping языка, то есть написания компилятора/интерпретатора для самого языка. Мне было интересно, как это можно сделать, и я немного огляделся, и увидел, что кто-то сказал, что это может быть сделано только одним из них

  • написание исходного компилятора на другом языке.
  • ручное кодирование исходного компилятора в Assembly, что выглядит как частный случай первого

Мне кажется, что ни то, ни другое на самом деле не является языком в том смысле, что они оба нуждаются в поддержке извне. Есть ли способ на самом деле написать компилятор на своем собственном языке?

compiler-construction   bootstrapping    

726   11   14:14, 29th August, 2020


Mixed C++ / CLI TypeLoadException внутреннее ограничение: слишком много полей

Стремясь перенести некоторые новые UI в Managed/C# земли, я недавно включил поддержку Common Language Runtime Support (/clr) в большом устаревшем проекте, который использует MFC в общем DLL и опирается на около десятка других проектов в рамках нашего общего решения. Этот проект является ядром нашего приложения и будет управлять любым управляемым кодом UI, который создается (следовательно, необходимо включить поддержку clr для interop).

После исправления тонны мелких мелких ошибок и предупреждений мне наконец удалось заставить приложение компилироваться.. Однако запуск приложения вызывает EETypeLoadException и оставляет меня неспособным выполнить отладку...

Немного покопавшись, я обнаружил, что причина была "System.TypeLoadException: внутреннее ограничение: слишком много полей.- что происходит прямо в конце компиляции. Затем я нашел эту ссылку , которая предлагает разбить assembly на две или более библиотек DLL. Однако в моем случае это невозможно, поскольку ограничение, которое я имею, заключается в том, что унаследованный код в основном остается нетронутым.

Может ли кто-нибудь предложить другие возможные решения? Я действительно в тупике здесь.

compiler-construction   c++-cli   clr    

635   3   01:22, 20th August, 2020


Можно ли использовать новое размещение для массивов переносным способом?

Можно ли на самом деле использовать размещение нового в переносимом коде при использовании его для массивов?

Похоже, что указатель, который вы получаете от 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++   arrays   compiler-construction   portability   overhead    

388   7   18:10, 18th August, 2020


Какие инструменты (бесплатные или другие) вы находите полезными для разработки и отладки C#/C++?

Вот некоторые из них, которые я использую (все они находятся в свободном доступе):

Hex Редактор: Hexplorer
Отладчик: WinDbg
Компилятор Документации: SandCastle
Автоматическая Сборка: Круиз Control.Net

c#   c++   debugging   compiler-construction   hex-editors    

491   8   12:39, 11th August, 2020


C в Visual Studio

Я пытаюсь выучить C. Как разработчик C#, мой IDE-это Visual Studio. Я слышал, что это хорошая среда для развития C/C++. Однако, кажется, независимо от того, что я пытаюсь сделать, интуиция меня подводит. Может ли кто-то дать хорошие ресурсы для того, чтобы либо:

  • изучите входы и выходы из C в Visual Studio
  • рекомендую лучший компилятор C IDE +

Правка: Смотрите также: https://stackoverflow.com/questions/951516/a-good-c-ide

c++   c   ide   compiler-construction    

448   15   16:16, 21st August, 2020


Компилятор .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 в целом, что я могу здесь неправильно понять.

.net   compiler-construction   debugging    

480   7   03:12, 24th August, 2020