Парсер HTML в Firefox получен при помощи автоматической трансляции парсера написанного на Java для Validator.nu:
The parser core compiles on Google Web Toolkit and can be automatically translated into C++. (The C++ translation capability is currently used for porting the parser for use in Gecko.)
Почитал кое-что еще по поводу используемого в Gecko парсера; похоже, что транслятор был написан после Java-парсера, и нигде не сказано, что парсер изначально писался на Java, с целью его последующей автоматической трансляции на C++.
Интересно, насколько автоматическая трансляция возможна в общем случае? Скажем, сколько процентов программ на Java можно автоматически транслировать на C++? Лет 10 тому назад даже люди транслировали с Java на C++ делая уйму ошибок, в первую очередь конечно memory leaks.
Здравствуйте, igna, Вы писали:
I>Интересно, насколько автоматическая трансляция возможна в общем случае? Скажем, сколько процентов программ на Java можно автоматически транслировать на C++? Лет 10 тому назад даже люди транслировали с Java на C++ делая уйму ошибок, в первую очередь конечно memory leaks.
D 99 году у меня один пацан писал диплом как раз по этой теме.
Сделать вполне можно. Только проблема не в самом языке. И даже не в сборке мусора.
Проблема в библиотеке Явы.
Много дописывать вручную на С++.
Хотя для нового стандарта должно быть полегче. Но Swing — по любому либо переводить в Qt, например, либо писать самому.
И подобных моментов — много.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, igna, Вы писали:
I>Почитал кое-что еще по поводу используемого в Gecko парсера; похоже, что транслятор был написан после Java-парсера, и нигде не сказано, что парсер изначально писался на Java, с целью его последующей автоматической трансляции на C++.
I>Интересно, насколько автоматическая трансляция возможна в общем случае? Скажем, сколько процентов программ на Java можно автоматически транслировать на C++? Лет 10 тому назад даже люди транслировали с Java на C++ делая уйму ошибок, в первую очередь конечно memory leaks.
Здравствуйте, igna, Вы писали:
I>Интересно, насколько автоматическая трансляция возможна в общем случае? Скажем, сколько процентов программ на Java можно автоматически транслировать на C++? Лет 10 тому назад даже люди транслировали с Java на C++ делая уйму ошибок, в первую очередь конечно memory leaks.
Трансляция языка Java в C++ дело не хитрое. Проблема только в том, что без GC и библиотек смысла в этом не много. Для парсера ХТМЛ это прокатит, так как парсер на входе имеет текстовую строку, а на выходе некую структуру данных. Тут можно обойтись и без GC и без библиотек. GC можно заменить пулом памяти, а библиотек там и так не надо особой.
Для сложной программы это практически невозможно. Можно конечно написать свой GC и транслировать все библиотеки, но в результате получим код работающий хуже чем в исходной Яве и при этом еще имеющий кучу проблем (от копирайта, до совместимости).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Для сложной программы это практически невозможно. Можно конечно написать свой GC и транслировать все библиотеки, но в результате получим код работающий хуже чем в исходной Яве и при этом еще имеющий кучу проблем (от копирайта, до совместимости).
Для GC обычно используется консервативный Boehm GC, который на практике работает удовлетворительно (Mono его использовал до начала этого года).
I>Интересно, насколько автоматическая трансляция возможна в общем случае? Скажем, сколько процентов программ на Java можно автоматически транслировать на C++?
В нашей компании лет 5-6 назад тоже игрались с трансляцией. С C# на Java и обратно. Автоматическая трансляция возможна только для конструкций языка. А когда начинаются библиотеки (в том числе стандартные), то, называется, тушите свет. Взять банальный String.Substring(int, int). Если при трансляции оставить все как есть, то работать будет неправильно. Потому что в С№ параметры — первый индекс и сколько символов. А в Java — start and end index. И это надо учитывать. И это самый простой случай.