Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Зачем нужен отдельный клас LocalByRef[type] со всякми геттерами-сеттерами, почему бы не использовать вместо него массив из одного элемента?
Для чего в примерах нужен main(String[]) в дополнение к Main(string[]), что мешает генерировать его автоматически при трансляции?
Класс LocalByRef[type] является наследником абстрактного класс ByRef[type] который в свою очередь представляет единый интерфейс для всех типов ссылок (на локальную переменную, на поле объекта или элемент массива).А что нам даст единый интерфейс для случая ref-параметра метода, чего не может дать массив? Из приведённого примера кода это не ясно.
public class Program
{
public int field;
public void Foo(ref int value)
{
value = 10;
}
public void Main(string[] args)
{
int localVar = 10;
Program p = new Program();
Foo(ref localVar);
Foo(ref p.field);
}
}
public abstract class ByRefInt
{
public abstract int get_Value();
public abstract void set_Value(int newValue);
}
public sealed class LocalByRefInt
{
private int value;
public LocalByRefInt(int value) { this.value = value; }
public int get_Value() { return this.value; }
public void set_Value(int newValue) { this.value = newValue; }
}
public sealed class FieldByRefInt
{
private object target;
private java.lang.reflect.Field field;
private int value;
public FieldByRefInt(object target, Field targetField)
{
this.target = target;
this.field = targetField;
paramField.setAccessible(true);
this.value = targetField.getInt(target);
}
public int get_Value()
{
return this.value;
}
public void set_Value(int newValue)
{
this.field.set[type](this.target, newValue);
this.value = newValue;
}
}
public class Program
{
public int field;
public void Foo(ByRefInt value)
{
value.set_Value(value);
}
public static void Main(string[] args)
{
int localVar = 10;
Program p = new Program();
LocalByRefInt tempLocal = new LocalByRefInt(localVar);
Foo(tempLocal);
localVar = tempLocal.get_Value();
Foo(new FieldByRefInt(p, Program.class.getDeclaredField("field")));
}
}
на платформу Java, версии не выше 1.6
Ваш компилятор написан на C#. Можно ли его скомпилировать вашим компилятором в Java? Какой будет провал в производительности?
Генерируете ли вы StackMapTable? Говорят, без неё на новых JVM никак. Или вы именно поэтому остановились на Java 1.6?
Вообще, конечно, невероятный пласт работы.
Поставил плюсики, где мог.
Нет не генерирую. Если честно раньше думал что она не обязательна и не стал заморачиваться.
Нет реализации стандартных библиотек.
Quercus implements PHP 5 and a growing list of PHP extensions including APC, iconv, GD, gettext, JSON, MySQL, Oracle, PDF, and Postgres. Many popular PHP application will run as well as, if not better, than the standard PHP interpreter straight out of the box. The growing list of PHP software certified running on Quercus includes DokuWiki, Drupal, Gallery2, Joomla, Mambo, Mantis, MediaWiki, Phorum, phpBB, phpMyAdmin, PHP-Nuke, Wordpress and XOOPS.
В списке нереализованых фич у вас нет stackalloc/localloc — или это подпадает под раздел «указатели»?
В CLR намного более гибкая система с переопределением методов в классах-наследниках — newslot, явное указание переопределяемого метода etc — как именно вы это реализовываете? Генерацией имен при необходимости?
(кстати, вот на этом месте сразу возникает вопрос, как будет работать рефлекшн, если там много где нужно делать name mangling...)
Как вы обрабатываете (или планируете обрабатывать) виртуальные дженерик-методы?
Как насчет vararg-методов, ArgIterator и TypedReference?
При перегрузке методов, в сигнатуре помимо типов параметров учитываются также модификаторы modopt и modreq. Причем эти штуки могут быть еще и вложенными, что в принципе позволяет пихать в сигнатуры практически произвольную информацию. Вы это как-то транслируете, или код на C++/CLI, где, например, перегружен метод на int и long (они там различаются как раз через modopt), сломается?
Дотнет (в отличие от спеки CLI) позволяет в верифицируемом коде методам возвращать managed pointer. Правда, вернуть таким образом они могут только результат ld[s]flda — но это вам может потенциально усложнить жизнь…
.NET/Mono в Java? Легко!