Здравствуйте, Sinclair, Вы писали:
F>>Конечно приятно считать это фичей, но по существу для калькулятора это дыра.
S>Для этого есть Code Access Security. И можно коду этих выражений так яйца в тиски закрутить, что он даже взгляд кинуть куда не надо не посмеет. Это вам не С++
Может ли это повлиять на производительность вызова?
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, folk, Вы писали:
F>>Близкий пример. Когда-то я слабал калькулятор на jscript, который использовал интерпретатор jscript для вычисления введенного мат. выражения, не производя самостоятельный разбор выражения. Так вот, если вместо "1+2" написать например "window.close()", то окно закрывалось.
F>>Конечно приятно считать это фичей, но по существу для калькулятора это дыра.
ВВ>Как ты умудрился это сделать? window — это часть DOM, а не javascript как языка. Или приложение работало в браузере?
Да, это hta, я его когда-то выкладывал в исходники.
Кстати до сих пор пользуюсь, надо сохранить текст как файл с расширением .hta и запустить. Чтобы увидет хелп надо развернуть окно.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<META NAME="Author" CONTENT="Konstantin A. Echenko, 2002">
<HTML>
<SCRIPT>window.resizeTo(400, 150)</SCRIPT>
<HEAD>
<TITLE>Calc PRO</TITLE>
<HTA:APPLICATION ICON="calc.exe">
</HEAD>
<BODY BGCOLOR="buttonface" SCROLL="no">
<FORM ID="form" onsubmit="calc(); return false">
<INPUT TYPE="text" ID="expr" STYLE="width:100%">
<INPUT TYPE="text" ID="result" STYLE="width:100%" READONLY="true">
<INPUT TYPE="submit" VALUE="=" STYLE="width:100%;color:red">
</FORM>
<SCRIPT>
form.expr.select();
function calc()
{
try { with(Math) form.result.value = eval(form.expr.value); }
catch(error) { form.result.value = error.description; }
form.expr.select();
}
</SCRIPT>
<TABLE BORDER="0" STYLE="width:100%;font-size:X-Small"><TBODY VALIGN="top">
<TR>
<TH COLSPAN="2">Функции</TH><TH COLSPAN="2">Константы</TH>
</TR><TR>
<TD><B>abs</B>(<I>x</I>)</TD><TD>Отбрасывает знак</TD>
<TD><B>E</B></TD><TD>Число <I>e</I>, константа Эйлера</TD>
</TR><TR>
<TD><B>acos</B>(<I>x</I>)</TD><TD>Арккосинус</TD>
<TD><B>LN2</B></TD><TD>Натуральный логарифм 2</TD>
</TR><TR>
<TD><B>asin</B>(<I>x</I>)</TD><TD>Арксинус</TD>
<TD><B>LN10</B></TD><TD>Натуральный логарифм 10</TD>
</TR><TR>
<TD><B>atan</B>(<I>x</I>)</TD><TD>Арктангенс</TD>
<TD><B>LOG2E</B></TD><TD>Логарифм <I>e</I> по основанию 2</TD>
</TR><TR>
<TD><B>ceil</B>(<I>x</I>)</TD><TD>Округление вверх</TD>
<TD><B>LOG10E</B></TD><TD>Логарифм <I>e</I> по основанию 10</TD>
</TR><TR>
<TD><B>cos</B>(<I>x</I>)</TD><TD>Косинус</TD>
<TD><B>PI</B></TD><TD>Число <I>пи</I></TD>
</TR><TR>
<TD><B>exp</B>(<I>x</I>)</TD><TD><I>e</I> в степени <I>x</I></TD>
<TD><B>SQRT1_2</B></TD><TD>Квадратный корень из 0.5</TD>
</TR><TR>
<TD><B>floor</B>(<I>x</I>)</TD><TD>Округление вниз</TD>
<TD><B>SQRT2</B></TD><TD>Квадратный корень из 2</TD>
</TR><TR>
<TD><B>log</B>(<I>x</I>)</TD><TD>Натуральный логарифм</TD>
</TR><TR>
<TD><B>max</B>(<I>x</I>,<I>y</I>)</TD><TD>Большее из двух чисел</TD>
</TR><TR>
<TD><B>min</B>(<I>x</I>,<I>y</I>)</TD><TD>Меньшее из двух чисел</TD>
</TR><TR>
<TD><B>pow</B>(<I>x</I>,<I>y</I>)</TD><TD><I>x</I> в степени <I>y</I></TD>
</TR><TR>
<TD><B>random</B>()</TD><TD>Случайное число между 0 и 1</TD>
</TR><TR>
<TD><B>round</B>(<I>x</I>)</TD><TD>Округление к ближайшему</TD>
</TR><TR>
<TD><B>sin</B>(<I>x</I>)</TD><TD>Синус</TD>
</TR><TR>
<TD><B>sqrt</B>(<I>x</I>)</TD><TD>Квадратный корень</TD>
</TR><TR>
<TD><B>tan</B>(<I>x</I>)</TD><TD>Тангенс</TD>
</TR>
</TBODY></TABLE>
</BODY>
</HTML>
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
а может у кого-то есть время добавить в С++ вариант компиляцию выражений с помощью гнушного
libjit'a
оч интересно посмотреть что получится
(правда лиценция там gpl)