ikvm представляет классы Java в.NET. Не преобразователь, но на основе моего опыта я рекомендовал бы его любому делающему переход от Java до.NET
Хотя это правда, что компиляторы могут улучшить код без вмешательства человека, однако утверждение о том, что «компиляторы самоулучшаются», довольно сомнительно. Эти "
Я не уверен, подходит ли он, но компилятор Java HotSpot улучшает код во время выполнения, используя статистику.
Но во время компиляции? Как этот компилятор узнает, что несовершенно, а что нет? Какая мера добра?
Существует множество примеров людей, использующих генетические методы, чтобы противопоставить алгоритмы друг другу, чтобы найти «лучшие» решения. Но обычно это хорошо изученные проблемы, у которых есть метрика.
Итак, какие показатели мы можем применить во время компиляции? Минимальный размер скомпилированного кода, циклометрическая сложность или что-то еще? Что из этого имеет значение во время выполнения?
25 лет программирования, и я никогда не слышал о таком (если вы не говорите о компиляторах, которые автоматически загружают обновления программного обеспечения!).
Насколько мне известно, еще не реализовано на практике, но да, теория есть:
Самосовершенствующийся компилятор по определению должен иметь самомодифицирующийся код. Если вы посмотрите вокруг, вы можете найти примеры людей, делающих это (самомодифицирующийся код). Однако это очень редко можно увидеть, особенно в таких больших и сложных проектах, как компилятор. И это необычно по той очень веской причине, что до смешного сложно (то есть почти невозможно) гарантировать правильную работу. Многие программисты, которые считают себя умными (особенно кодировщики на ассемблере), в тот или иной момент экспериментируют с этим. Те, кто на самом деле умны, в большинстве своем выходят из этой фазы. ;)
MilepostGCC - это компилятор MachineLearning, который со временем улучшается в том смысле, что он может измениться, чтобы стать «лучше» с течением времени. Более простой подход итеративной компиляции может улучшить практически любой компилятор.
Ну, есть JIT (just in time) методы. Можно утверждать, что компилятор с некоторыми JIT-оптимизациями может перенастроить себя для более эффективной работы с программой, которую он компилирует ???