Python vs C#
От: WolfHound  
Дата: 13.05.05 08:25
Оценка:
Здравствуйте, FR, Вы писали:

FR>когда демка загрузится она обычно работает немного медленее чем аналогичная плюсовая, но вот грузится намного дольше.

Значит надо смотреть что они там делают.

FR>так ты сам должен лучше меня знать

А я вот не знаю просвети не разумного.

FR>Насчет скоростных скриптов да это плюс. Но я не вижу удешевления например по сравнению со связкой C++ — Python, не забывая учитывать что на питоне все таки проще писать чем на C#.

Это в каком это месте на питоне писать проще чем на C#? Просвети пожалуйста. И еще не забывай что для C# есть такие мегарулезы как ReSharper у меня по началу создавалось впечатление что эта штука мои мысли читает.
А если Влад доведет до рабочего состояния R# то это вобще будет супер.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>

13.05.05 16:35: Ветка выделена из темы Создание игр на managed-языках
Автор: WolfHound
Дата: 11.05.05
— AndrewVK
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: Python vs C#
От: FR  
Дата: 13.05.05 08:52
Оценка: -1
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>когда демка загрузится она обычно работает немного медленее чем аналогичная плюсовая, но вот грузится намного дольше.

WH>Значит надо смотреть что они там делают.

FR>>так ты сам должен лучше меня знать

WH>А я вот не знаю просвети не разумного.

знаешь

FR>>Насчет скоростных скриптов да это плюс. Но я не вижу удешевления например по сравнению со связкой C++ — Python, не забывая учитывать что на питоне все таки проще писать чем на C#.

WH>Это в каком это месте на питоне писать проще чем на C#? Просвети пожалуйста. И еще не забывай что для C# есть такие мегарулезы как ReSharper у меня по началу создавалось впечатление что эта штука мои мысли читает.

Питон как язык выше уровнем и шарпа и плюсов, объем кода сильно уменьшается, кроме того питон сам подталкивает к обобщенному программированию поэтому очень легко писать повторно используемый код.

WH>А если Влад доведет до рабочего состояния R# то это вобще будет супер.
Re[36]: Python vs C#
От: WolfHound  
Дата: 13.05.05 09:02
Оценка:
Здравствуйте, FR, Вы писали:

WH>>А я вот не знаю просвети не разумного.

FR>знаешь
Нет. Не знаю.

FR>Питон как язык выше уровнем и шарпа и плюсов, объем кода сильно уменьшается, кроме того питон сам подталкивает к обобщенному программированию поэтому очень легко писать повторно используемый код.

Примеры в студию. Только мериться будем с C#2
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[37]: Python vs C#
От: FR  
Дата: 13.05.05 09:35
Оценка: 3 (1) :)
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


WH>>>А я вот не знаю просвети не разумного.

FR>>знаешь
WH>Нет. Не знаю.

FR>>Питон как язык выше уровнем и шарпа и плюсов, объем кода сильно уменьшается, кроме того питон сам подталкивает к обобщенному программированию поэтому очень легко писать повторно используемый код.

WH>Примеры в студию. Только мериться будем с C#2

По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:
arr = open("test.txt").readlines()
arr.sort()

out = open("out.txt", "w")
for line in arr:
    print >> out, line,


Суммирование чисел из файла(в каждой строке файла одно число):
import sys, itertools
print sum(itertools.imap(int, open("in.txt")))


Другой пример я уже приводил Владу, простейший калькулятор(он из темы где вы с Владом спорили и ты делал этот же калькулятор на плюсах ссылки к сожалению не помню)
# -*- coding: cp1251 -*-
import psyco, time

from math import sin
from math import cos

formula =r"-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234"

ParseCount = 1
CalcCount  = 10000

#компилируем
t1 = time.clock()
for i in xrange(ParseCount):
    f = eval(compile("lambda asd, qwe : " + formula, "<string>", "eval"))
    psyco.bind(f)
t2 = time.clock()
print "Парсинг %d проходов. Выполнено за %f сек." % (ParseCount, t2 - t1)

#используем
def run():
    t1 = time.clock()
    for i in xrange(1, CalcCount + 1):
        f(i, i)
    t2 = time.clock()
    print "Подсчет %d проходов. Выполнено за %f сек."  % (CalcCount, t2 - t1)

psyco.bind(run)

run()
run()

print "f(1, 1,) =", f(1, 1)
print "f(-1, 333) =", f(-1, 333)
Re[38]: Python vs C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 10:28
Оценка:
Здравствуйте, FR, Вы писали:

FR>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

FR>
FR>arr = open("test.txt").readlines()
FR>arr.sort()

FR>out = open("out.txt", "w")
FR>for line in arr:
FR>    print >> out, line,
FR>


А закрывать файлы кто будет?
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[38]: Python vs C#
От: WolfHound  
Дата: 13.05.05 11:15
Оценка: 4 (2) :))
Здравствуйте, FR, Вы писали:

FR>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

Функции readlines в библиотеке .НЕТ нет по этому мы ее напишем.
        static IEnumerable<string> Lines(Stream stream)
        {
            using (StreamReader reader = new StreamReader(stream))
                for (string line; (line = reader.ReadLine()) != null; )
                    yield return line;
        }

FR>arr = open("test.txt").readlines()
FR>arr.sort()
            List<string> lines;
            using (Stream file = File.OpenRead("text.txt"))
                lines = new List<string>(Lines(file));
            lines.Sort();

FR>out = open("out.txt", "w")
FR>for line in arr:
FR>    print >> out, line,
            using (TextWriter file = File.CreateText("out.txt"))
                foreach (string line in lines)
                    file.WriteLine(file);

Отсутствие типизации и необходимости объявлять переменные в питоне я считаю большим недостатком.

FR>Суммирование чисел из файла(в каждой строке файла одно число):

Опять библиотека...
Да будут операторы
        delegate T Operator<T>(T l, T r);
        interface IMathOperators<T>
        {
            Operator<T> Add { get; }
            Operator<T> Sub { get; }
            Operator<T> Mul { get; }
            Operator<T> Div { get; }
        }
        class MathOperatorsInt : IMathOperators<int>
        {
            public Operator<int> Add { get { return delegate(int l, int r) { return l + r; }; } }
            public Operator<int> Sub { get { return delegate(int l, int r) { return l - r; }; } }
            public Operator<int> Mul { get { return delegate(int l, int r) { return l * r; }; } }
            public Operator<int> Div { get { return delegate(int l, int r) { return l / r; }; } }
        }
        static Dictionary<Type, object> MathOperatorsMap = new Dictionary<Type, object>();
        static IMathOperators<T> MathOperators<T>()
        {
            return (IMathOperators<T>)MathOperatorsMap[typeof(T)];
        }
        static Program()
        {
            MathOperatorsMap.Add(typeof(int), new MathOperatorsInt());
        }

Теперь сделаем недостающие функции
        delegate T Parse<T>(string s);
        static IEnumerable<T> Map<T>(Stream stream)
        {
            Parse<T> parse = (Parse<T>)Delegate.CreateDelegate(typeof(Parse<T>),
                typeof(T), "Parse");
            foreach (string line in Lines(stream))
                yield return parse(line);
        }
        static T Sum<T>(IEnumerable<T> numbers)
        {
            Operator<T> add = MathOperators<T>().Add;
            T val = default(T);
            foreach (T number in numbers)
                val = add(val, number);
            return val;
        }

FR>
FR>import sys, itertools
FR>print sum(itertools.imap(int, open("in.txt")))
FR>

    using (Stream file = File.OpenRead("text.txt"))
        Console.WriteLine(Sum(Map<int>(file)));


FR>Другой пример я уже приводил Владу, простейший калькулятор(он из темы где вы с Владом спорили и ты делал этот же калькулятор на плюсах ссылки к сожалению не помню)

Это тоже решается библиотекой.


А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[38]: Python vs C#
От: GlebZ Россия  
Дата: 13.05.05 11:49
Оценка:
Здравствуйте, FR, Вы писали:

FR>
FR>formula =r"-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234"
FR>

Внушает. Только не понял, что ты тут имел ввиду. А точнее что должен делать калькулятор?

С уважением, Gleb.
PS: простота названий переменный qwe и asd бесподобна.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 12:14
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, FR, Вы писали:


FR>>
FR>>formula =r"-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234\
FR>>-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234-(asd-qwe)*3*3*asd/(asd-sin(qwe)+5/asd)-123.234"
FR>>

GZ>Внушает. Только не понял, что ты тут имел ввиду. А точнее что должен делать калькулятор?

Это выражение которое нужно вычислить

GZ>С уважением, Gleb.

GZ>PS: простота названий переменный qwe и asd бесподобна.

ну это не я придумал, выражение взято из другой ветки.
Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 12:14
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, FR, Вы писали:


FR>>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

FR>>
FR>>arr = open("test.txt").readlines()
FR>>arr.sort()

FR>>out = open("out.txt", "w")
FR>>for line in arr:
FR>>    print >> out, line,
FR>>


AVK>А закрывать файлы кто будет?


GC
Вообще на питоне если на файл ссылок нет он сразу после использования закрывается.
Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 12:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, FR, Вы писали:


FR>>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

WH>Функции readlines в библиотеке .НЕТ нет по этому мы ее напишем.
WH>
WH>        static IEnumerable<string> Lines(Stream stream)
WH>        {
WH>            using (StreamReader reader = new StreamReader(stream))
WH>                for (string line; (line = reader.ReadLine()) != null; )
WH>                    yield return line;
WH>        }
WH>

WH>
FR>>arr = open("test.txt").readlines()
FR>>arr.sort()
WH>
WH>            List<string> lines;
WH>            using (Stream file = File.OpenRead("text.txt"))
WH>                lines = new List<string>(Lines(file));
WH>            lines.Sort();
WH>

WH>
FR>>out = open("out.txt", "w")
FR>>for line in arr:
FR>>    print >> out, line,
WH>
WH>            using (TextWriter file = File.CreateText("out.txt"))
WH>                foreach (string line in lines)
WH>                    file.WriteLine(file);
WH>

WH>Отсутствие типизации и необходимости объявлять переменные в питоне я считаю большим недостатком.

Код все равно больше по объему.
А отсутствие типизпции может быть и преимуществом.


FR>>Суммирование чисел из файла(в каждой строке файла одно число):

WH>Опять библиотека...

В первом примере никаких библиотек не использовалось только встроенные возможности языка.
В этом же примере показана возможность программировать в функциональном стиле и шарпу тоже не мешало бы такое ввести в стандартные библиотеки

WH>Да будут операторы

WH>
WH>        delegate T Operator<T>(T l, T r);
WH>        interface IMathOperators<T>
WH>        {
WH>            Operator<T> Add { get; }
WH>            Operator<T> Sub { get; }
WH>            Operator<T> Mul { get; }
WH>            Operator<T> Div { get; }
WH>        }
WH>        class MathOperatorsInt : IMathOperators<int>
WH>        {
WH>            public Operator<int> Add { get { return delegate(int l, int r) { return l + r; }; } }
WH>            public Operator<int> Sub { get { return delegate(int l, int r) { return l - r; }; } }
WH>            public Operator<int> Mul { get { return delegate(int l, int r) { return l * r; }; } }
WH>            public Operator<int> Div { get { return delegate(int l, int r) { return l / r; }; } }
WH>        }
WH>        static Dictionary<Type, object> MathOperatorsMap = new Dictionary<Type, object>();
WH>        static IMathOperators<T> MathOperators<T>()
WH>        {
WH>            return (IMathOperators<T>)MathOperatorsMap[typeof(T)];
WH>        }
WH>        static Program()
WH>        {
WH>            MathOperatorsMap.Add(typeof(int), new MathOperatorsInt());
WH>        }
WH>

WH>Теперь сделаем недостающие функции
WH>
WH>        delegate T Parse<T>(string s);
WH>        static IEnumerable<T> Map<T>(Stream stream)
WH>        {
WH>            Parse<T> parse = (Parse<T>)Delegate.CreateDelegate(typeof(Parse<T>),
WH>                typeof(T), "Parse");
WH>            foreach (string line in Lines(stream))
WH>                yield return parse(line);
WH>        }
WH>        static T Sum<T>(IEnumerable<T> numbers)
WH>        {
WH>            Operator<T> add = MathOperators<T>().Add;
WH>            T val = default(T);
WH>            foreach (T number in numbers)
WH>                val = add(val, number);
WH>            return val;
WH>        }
WH>

FR>>
FR>>import sys, itertools
FR>>print sum(itertools.imap(int, open("in.txt")))
FR>>

WH>
WH>    using (Stream file = File.OpenRead("text.txt"))
WH>        Console.WriteLine(Sum(Map<int>(file)));
WH>


FR>>Другой пример я уже приводил Владу, простейший калькулятор(он из темы где вы с Владом спорили и ты делал этот же калькулятор на плюсах ссылки к сожалению не помню)

WH>Это тоже решается библиотекой.

В примере на питоне все решается без библиотек.

WH>А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.


Так давай реальные примеры, лучше в виде постоновки небольших задач.
Re[38]: Python vs C#
От: eugals Россия  
Дата: 13.05.05 12:23
Оценка: 6 (2)
Здравствуйте, FR, Вы писали:

FR>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

FR>
FR>arr = open("test.txt").readlines()
FR>arr.sort()

FR>out = open("out.txt", "w")
FR>for line in arr:
FR>    print >> out, line,
FR>


А теперь то же самое с использованием возможностей питона 2.4:
file("out.txt", "w").writelines(sorted(file("test.txt")))
... << RSDN@Home 1.1.4 beta 5 rev. 395>> {WinAmp: Whitney Houston — I Wanna Dance With Somebody (Who Loves Me)}
Re[40]: Python vs C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 12:34
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Вообще на питоне если на файл ссылок нет он сразу после использования закрывается.


Т.е. GC запускается на каждую строчку кода?
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[40]: Python vs C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 12:34
Оценка:
Здравствуйте, FR, Вы писали:

FR>В этом же примере показана возможность программировать в функциональном стиле и шарпу тоже не мешало бы такое ввести в стандартные библиотеки


http://msdn2.microsoft.com/library/bwabdf9z(en-us,vs.80).aspx
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[40]: Создание игр на managed-языках
От: WolfHound  
Дата: 13.05.05 12:46
Оценка:
Здравствуйте, FR, Вы писали:

FR>Код все равно больше по объему.

И что с того если все это за меня автокомплит набил?
FR>А отсутствие типизпции может быть и преимуществом.
Да правда чтоли? Интересно почему тогда весь мейнстрем типизированый по самое нехочу?

FR>В первом примере никаких библиотек не использовалось только встроенные возможности языка.

Те в язык встроели работу с файлами?
FR>В этом же примере показана возможность программировать в функциональном стиле и шарпу тоже не мешало бы такое ввести в стандартные библиотеки
Зачем?
Елси мне очень сильно приспичет пописать на функциональном языке то я возьму функциональный язык. Благо их на .НЕТ портировано до чертиков.

FR>В примере на питоне все решается без библиотек.

Ну не встроели в C# вызов соответствующих функций фреймворка... беда то какая.

FR>Так давай реальные примеры, лучше в виде постоновки небольших задач.

Тема была про скрипты в играх. А для чего в играх используются скрипты? Правильно чтобы объекты в игре что-то делали.
class World
{
    public IEnumerable<GameObject> GetObjects(Position pos, float range)
    {
        foreach (GameObject obj in objects)
            if (obj.Pos.DistanceTo(pos) < range)
                yield return obj;
    }
}
class Bomb : GameObject
{
    public void Detonation()
    {
        foreach (GameObject obj in world.GetObjects(Pos, detonationRange))
            obj.Damage(detonationDamage);
    }
}
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[40]: Python vs C#
От: GlebZ Россия  
Дата: 13.05.05 12:57
Оценка:
Здравствуйте, FR, Вы писали:

FR>Это выражение которое нужно вычислить

Thanks. Уже понял. Нашел исходное сообщение.здесь
Автор: FR
Дата: 14.10.04


FR>ну это не я придумал, выражение взято из другой ветки.

И это нашел.здесь
Автор: WolfHound
Дата: 24.04.04


С уважением, Gleb.
... << RSDN@Home 1.1.4 beta 4 rev. 358>>
Re[41]: Python vs C#
От: eugals Россия  
Дата: 13.05.05 13:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, FR, Вы писали:


FR>>Вообще на питоне если на файл ссылок нет он сразу после использования закрывается.


AVK>Т.е. GC запускается на каждую строчку кода?


такого GC как в CLR — нет.
Банальный счетчик ссылок. Как только ob_refcnt становится равным нулю — объект дестроится.
Правда слегка оптимизирован: если у объекта нет деструктора, то он не free-ится а помещается в специальный список, который чистится пакетно — при переполнении.
... << RSDN@Home 1.1.4 beta 5 rev. 395>> {WinAmp: Whitney Houston — I Wanna Dance With Somebody (Who Loves Me)}
Re[42]: Python vs C#
От: eugals Россия  
Дата: 13.05.05 13:31
Оценка:
Здравствуйте, eugals, Вы писали:

E>Здравствуйте, AndrewVK, Вы писали:


AVK>>Здравствуйте, FR, Вы писали:


FR>>>Вообще на питоне если на файл ссылок нет он сразу после использования закрывается.


AVK>>Т.е. GC запускается на каждую строчку кода?


E>такого GC как в CLR — нет.

E>Банальный счетчик ссылок. Как только ob_refcnt становится равным нулю — объект дестроится.
E>Правда слегка оптимизирован: если у объекта нет деструктора, то он не free-ится а помещается в специальный список, который чистится пакетно — при переполнении.

Плюс к этому есть опциональный cycle detector
... << RSDN@Home 1.1.4 beta 5 rev. 395>> {WinAmp: Alan Jackson — Let It Be Christmas}
Re[42]: Python vs C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 13:33
Оценка:
Здравствуйте, eugals, Вы писали:

AVK>>Т.е. GC запускается на каждую строчку кода?


E>такого GC как в CLR — нет.

E>Банальный счетчик ссылок.

Как в VB6?
... << RSDN@Home 1.1.4 beta 7 rev. 453>>
AVK Blog
Re[43]: Python vs C#
От: eugals Россия  
Дата: 13.05.05 13:52
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, eugals, Вы писали:


AVK>>>Т.е. GC запускается на каждую строчку кода?


E>>такого GC как в CLR — нет.

E>>Банальный счетчик ссылок.

AVK>Как в VB6?

Похоже, но не совсем. Отличия:
1. В VB6 есть разделение на value-типы и на объектные, а в питоне всё есть объект, соответственно и счетчик тоже висит на всём подряд.
2. Есть детектор циклов (запускается время от времени и убивает зависшие объекты).

Правда, этот детектор хорош только если вся программа написана на чистом питоне — безо всяких сиплюсплюсных библиотек
... << RSDN@Home 1.1.4 beta 5 rev. 395>> {WinAmp: Faith No More — We Care a Lot [Original Version]}
Re[40]: Python vs C#
От: Cyberax Марс  
Дата: 13.05.05 14:36
Оценка: +1 -1
FR wrote:

> AVK>А закрывать файлы кто будет?

> GC
> Вообще на питоне если на файл ссылок нет он сразу после использования
> закрывается.

Это если в Питоне используется подсчет ссылок вместо настоящего GC, что
далеко не всегда правда.

Вообще, за такой код (с утечками ресурсов) я бы отрывал головы...

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.