The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз компилятора Python - Nuitka 0.4.2, opennews (??), 31-Мрт-13, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


34. "Релиз компилятора Python - Nuitka 0.4.2"  –1 +/
Сообщение от Аноним (-), 31-Мрт-13, 13:27 
>[оверквотинг удален]
> } dynamic_type;
> int main(){
>     dynamic_type variable1 = {.tag = INTEGER, .integer_value =
> 42};
>     dynamic_type variable2 = {.tag = REAL, .real_value =
> 3.14159265358979};
>     printf("SUMM: %f\n", variable1.integer_value + variable2.real_value);
> }
>
> Это что, правда так сложно?

Не сложно, но при чём тут компиляция питона в си? Возмём код z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.

Ответить | Правка | Наверх | Cообщить модератору

44. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от CPP (??), 31-Мрт-13, 13:50 
>[оверквотинг удален]
>> 42};
>>     dynamic_type variable2 = {.tag = REAL, .real_value =
>> 3.14159265358979};
>>     printf("SUMM: %f\n", variable1.integer_value + variable2.real_value);
>> }
>>
>> Это что, правда так сложно?
> Не сложно, но при чём тут компиляция питона в си? Возмём код
> z = x + y. Теперь покажите, как сделать из этого
> си, если тип x и y не известен.

В С++ думаю, что это будут объекты (абстрактные типы), а не базовые типы данных, так же как в C#. Возникает ощущение, что человек изобретает велосипед -)

Ответить | Правка | Наверх | Cообщить модератору

46. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 31-Мрт-13, 13:52 
> Возмём код z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.


python_type z;
if (x.__add__.type == PYTHON__FUNC){
    x.__add__(x, y, &z);
}

//тем временем где-то внутри функции python_float.__add__(const python_type x, const python_type y, python_type &z):
double x_temp, y_temp;
bool result = cast_to_double(x,&x_temp);
bool result = result && cast_to_double(y,&y_temp);
if (result){
  z.type = PYTHON_FLOAT;
  z.float_value = x_temp + y_temp;
  return SUCCESS;
} else {
  fputs("Type conversion error", stderr);
  return FAILURE;
}


Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

55. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 31-Мрт-13, 14:22 
Читаю: если x позволяет складывать, вызвать функцию add в предположении что x,y,z это double. Ну да ладно, по крайней мере есть код. Фишка в том, что это идёт в сторону cpython. Что нужно получить на выходе:

double z = x + y;

А ещё лучше сразу машинный код. В случае когда есть хотя бы минимальная возможность, сделать:

int z = x + y;

Ибо целые числа работают значительно быстрее. Посему без перекомпиляции никак.

Ответить | Правка | Наверх | Cообщить модератору

60. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 31-Мрт-13, 14:48 
> Что нужно получить на выходе:
> double z = x + y;
> А ещё лучше сразу машинный код. В случае когда есть хотя бы минимальная возможность, сделать:
> int z = x + y;
> Ибо целые числа работают значительно быстрее. Посему без перекомпиляции никак.

Нет.
Если типы x и y известны заранее, то и тип z будет известен заранее (или будет заранее известный Error), и никакая перекомпиляция не потребуется.
Если тип x или y не известен заранее, то и тип z будет неизвестен заранее, и никакая перекомпиляция не поможет.
Что непонятно?

Ответить | Правка | Наверх | Cообщить модератору

79. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 01-Апр-13, 12:27 
> Не сложно, но при чём тут компиляция питона в си? Возмём код
> z = x + y. Теперь покажите, как сделать из этого
> си, если тип x и y не известен.

Во-первых Вы когда примеры приводите, постарайтесь чтобы они были корректны.
Ваш код не корректен если типы x и y не известны, python вернет ошибку.

Во-вторых изучите мат.часть. На лицо полное не понимание вопроса. Есть много материалов по типизации, например вот хорошая статья: http://habrahabr.ru/post/161205/

Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

122. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 02-Апр-13, 05:18 
> z = x + y. Теперь покажите, как сделать из этого си, если тип x и y не известен.

Для си вообще до балды на самом деле какие там типы. Значения в памяти и нии...т. Как именно вы желаете суммировать гайки с бананами - ваше дело. Технически доступиться до гаек и бананов - можно.

А вот то что некто может нисколько не сомневаясь засуммировать одно и другое и даже что-то на выход вернуть - вот это уже баг, а не фича. Т.к. програмер накосячит и не заметит нифига. Ну а что, чего-то же посчиталось!

Ответить | Правка | К родителю #34 | Наверх | Cообщить модератору

136. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от 123 (??), 02-Апр-13, 10:25 
"...Для си вообще до балды на самом деле какие там типы..."

Задача не транслировать python в С, а транслировать в корректно работающую программу на C.


if <условие 1>:
  x, y = "123", "456"
elif <условие 2>:
  x, y = 123, 456
else:
  x, y = [1, 2, 3], [4, 5, 6]

z = x + y

Пример синтетический, но как это транслировать в C, которому "типы до балды"?

Ответить | Правка | Наверх | Cообщить модератору

141. "Релиз компилятора Python - Nuitka 0.4.2"  +/
Сообщение от Аноним (-), 02-Апр-13, 18:28 

python_type *x, *y, *z;
if (<условие 1>){
  x = new_python_string("123");
  y = new_python_string("456");
} else if (<условие 2>) {
  x = new_python_int(123);
  y = new_python_int(456);
} else {
  x = new_python_dict(new_python_int(1),new_python_int(2),new_python_int(3));
  y = new_python_dict(new_python_int(4),new_python_int(5),new_python_int(6));
}
z = get_python_method(x,"__add__")(y);

Синтетическому примеру — синтетическое решение. Описания типа python_type и реализации функций не привожу, ибо принцип уже описан в примерах выше.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру