Wpis z mikrobloga

@KubaSnk: Fajna strona - klik i dodane do zakładek ( ͡° ͜ʖ ͡°)
Zawsze zastanawiałem się jak takie strony wykonują proces kompilacji kodu... Czy tekst z przeglądarki jest po prostu zapisywany do pliku i uruchamiany kompilator javac? Czy może istnieją jakieś biblioteki, które kompilują kod Javy?
Czy możesz powiedzieć jak to zrobiliście?
@pinac: Tak się składa, że akurat sam pisałem całą platformę więc co nieco mogę powiedzieć:) Istnieje w Javie możliwość zrobienia nowego classpatha i kompilowanie klas bezpośrednio ze Stringa i ładowanie ich na ten nowy classpath. To tak w skrócie, bo pod spodem jest trochę magii - kilka serwerów samorestartujących się, po kompilacji jest test czy użytkownik nie popsuł serwera etc. Istniejące biblioteki są bardzo ograniczone więc to w sumie całkowicie customowe
@KubaSnk: Poszukałem trochę i wygląda na to że w Javie można pobrać kompilator: ToolProvider.getSystemJavaCompiler(). I widzę też że można wykonać kompilację kodu z tekstu zapisanego w zmiennej String (z użyciem obiektu SimpleJavaFileObject)... Hmm... wygląda całkiem prosto... To po co są te samorestartujące się serwery o których piszesz?
@pinac: Umożliwienie kompilacji użytkownikowi prawie dowolnego kodu powoduje, że może zwyczajnie wykonać złośliwy kod, który w jakiś sposób będzie zakłócał działanie serwera kompilującego. U nas co kilka minut każdy serwer jest czyszczony więc nawet jeśli ktoś coś popsuje to system się sam "regeneruje" a użytkownik dostaje tymczasowego bana na kompilację.
Generalnie cały mechanizm kompilatora powstał na potrzeby interaktywnego kursu Javy, więc po kompilacji zadania taki kod jest jeszcze dodatkowo mielony refleksją i analizowany statycznie żeby sprawdzić, czy użytkownik zrobił to czego od niego wymagałem:)
@KubaSnk: Fajne! Zawsze korzystałem z ideone, żeby na szybko czymś się z kimś podzielić, to też fajna alternatywa. I super, że napisałeś wyżej, jak to +/- działa - też byłem ciekawy :)
Widzę, że kompilator wspiera Javę <= 8?