Re[41]: Python vs C#
От: Cyberax Марс  
Дата: 13.05.05 14:37
Оценка: +1
AndrewVK wrote:

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

> использования закрывается.
> Т.е. GC запускается на каждую строчку кода?

Просто считаются ссылки. Кольцевые структуры потом подбираются настоящим GC.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[38]: Python vs C#
От: Gaperton http://gaperton.livejournal.com
Дата: 13.05.05 16:07
Оценка: -1
Здравствуйте, FR, Вы писали:

Не самый удачный пример. В шарпах нет лямбда-функций, встроенных списков и (соответственно) list comprehensions (for in, использующиеся для преобразований/формирований списков). Если ты построишь пример на этих свойствах языка, C# будет порван. Возьми какой-нибудь алгоритм, выполняющий преобразования деревьев. Не бинарных, а произвольных. Деревья моделируй списками списков. Используй for-in и лямбду (как параметр generic-функциям). Если текст выражения лямбды в питоне допускает ссылки на локальный контекст (я насчет этого не в курсе), будет еще лучше.
Re[41]: Python vs C#
От: FR  
Дата: 13.05.05 18:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>FR wrote:


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

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

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

C>далеко не всегда правда.

Просто разработчики Jython ленивые


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


где ты здесь увидел утечки ресурсов? Файлы по любому закроются на выходе.

C>--

C>С уважением,
C> Alex Besogonov (alexy@izh.com)
Re[41]: Создание игр на managed-языках
От: FR  
Дата: 13.05.05 18:27
Оценка: 2 (2) +1 :)
Здравствуйте, WolfHound, Вы писали:

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


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

WH>И что с того если все это за меня автокомплит набил?

А читать потом этот код тоже автокомплит будет?

FR>>А отсутствие типизпции может быть и преимуществом.

WH>Да правда чтоли? Интересно почему тогда весь мейнстрем типизированый по самое нехочу?

Конечно правда, вот в питоне шаблонами и не пахнет а обобщеный код пишется без проблем.
А для решения проблем с нетипизированностью есть специальные утилиты проверяющие корректность кода, например тот же PyChecker.

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

WH>Те в язык встроели работу с файлами?

Скорее с потоками, а файлы так на закуску.

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

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

Угу чтобы пару строк кода написать будешь переключатся на другой язык.

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

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

Так библиотеки еще и написать надо.

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

WH>Тема была про скрипты в играх. А для чего в играх используются скрипты? Правильно чтобы объекты в игре что-то делали.
WH>
WH>class World
WH>{
WH>    public IEnumerable<GameObject> GetObjects(Position pos, float range)
WH>    {
WH>        foreach (GameObject obj in objects)
WH>            if (obj.Pos.DistanceTo(pos) < range)
WH>                yield return obj;
WH>    }
WH>}
WH>class Bomb : GameObject
WH>{
WH>    public void Detonation()
WH>    {
WH>        foreach (GameObject obj in world.GetObjects(Pos, detonationRange))
WH>            obj.Damage(detonationDamage);
WH>    }
WH>}
WH>


Ну это же не компилируемый кусок, как я понял есть список игровых объектов надо пройтись по нему и взорвать те которые на нужном расстоянии от бомбы, так этот код слово в слово можно переписать на питоне (yeld там тоже есть). Ты лучше опиши задачу и дай реализацию на шарпе, а так не знай откуда вырваные куски не интересно.
Re[42]: Python vs C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.05.05 18:42
Оценка:
Здравствуйте, FR, Вы писали:

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


А если сразу же после записи в файл попытаться его открыть на запись по новой?
... << RSDN@Home 1.1.4 beta 7 rev. 454>>
AVK Blog
Re[41]: Создание игр на managed-языках
От: Gaperton http://gaperton.livejournal.com
Дата: 13.05.05 19:20
Оценка: +2
Здравствуйте, WolfHound, Вы писали:

FR>>А отсутствие типизпции может быть и преимуществом.

WH>Да правда чтоли? Интересно почему тогда весь мейнстрем типизированый по самое нехочу?
Да правда чтоли? VB со своим IDispatch, JScript, PHP, Perl и ваш любимый C# c контейнерами Object-ов — типизированны по самое нехочу?
Re[42]: Создание игр на managed-языках
От: FR  
Дата: 13.05.05 19:22
Оценка: :)
FR>Здравствуйте, WolfHound, Вы писали:

Да еще пример про калькулятор если не нужен jit и замеры, тоже сильно упрощается:
# -*- coding: cp1251 -*-
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"

print "f(1, 1,) =", eval(compile("lambda asd, qwe : " + formula, "<string>", "eval"))(1, 1)


библиотек кроме math нет, да и кода реально одна строка.
Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 19:22
Оценка: :)
Здравствуйте, eugals, Вы писали:

E>А теперь то же самое с использованием возможностей питона 2.4:

E>
E>file("out.txt", "w").writelines(sorted(file("test.txt")))
E>


Я пока на 2.3 сижу, просто не увидел в 2.4 каких то больших преимуществ из-за которых стоило бы переходить. Да про writelines я забыл, с ним проще

arr = open("test.txt").readlines()
arr.sort()
open("out.txt", "w").writelines(arr)


Еще можно так:
arr = open("test.txt").readlines()
arr.sort()
print >> open("out.txt", "w"), "".join(arr)


Но такой вариант подтормаживает на больших файлах, тогда как первый работает со скоростью сишных программ.
Re[43]: Python vs C#
От: FR  
Дата: 13.05.05 19:31
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


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


AVK>А если сразу же после записи в файл попытаться его открыть на запись по новой?


Если ссылок на файл нет то CPython (основная реализация питона) закроет файл сразу после выхода из строки например тут

arr = open("test.txt").readlines()

после выполнения строки файл уже будет закрыт. Тут есть небольшой UB, так как документация не гарантирует такое поведение для всех реализаций. Но уже очень много кода написано полагаясь на такое поведение так что менять его вряд ли будут.
Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 19:41
Оценка: -1 :)
Здравствуйте, Gaperton, Вы писали:

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


G>Не самый удачный пример. В шарпах нет лямбда-функций, встроенных списков и (соответственно) list comprehensions (for in, использующиеся для преобразований/формирований списков). Если ты построишь пример на этих свойствах языка, C# будет порван. Возьми какой-нибудь алгоритм, выполняющий преобразования деревьев. Не бинарных, а произвольных. Деревья моделируй списками списков. Используй for-in и лямбду (как параметр generic-функциям). Если текст выражения лямбды в питоне допускает ссылки на локальный контекст (я насчет этого не в курсе), будет еще лучше.


Не надо по деревьям лазить, достаточно брать любую небольшую утилитку активно работающую с текстовыми файлами, объем кода будет сильно меньше чем на плюсах или шарпе, близко к объему на перле, но в отличии от перла не write-only а вполне читабельный код.
Re[41]: Создание игр на managed-языках
От: _doctor Финляндия http://agilesoftwaredevelopment.com
Дата: 13.05.05 20:43
Оценка:
Здравствуйте, WolfHound, Вы писали:

FR>>А отсутствие типизпции может быть и преимуществом.

WH>Да правда чтоли? Интересно почему тогда весь мейнстрем типизированый по самое нехочу?
Потому что в мейнстриме важно случайно не сложить число со строкой.
Думаю, именно поэтому Питон и является языком со строгой типизацией. Просто она динамическая
Вот в VB, скажем, строку с числом сложить не проблема, "компилятор" даже не пискнет
Chief Software Engineer,
Scrum Master, Symbian
Re[39]: Python vs C#
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.05.05 05:03
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


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

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>

Здесь можно было чуть сэкономить. Функция преобразования стрима в строковый енумератор уже есть. Насколько я помню, есть также генерик делегат Transform.
Соответственно, можно написать простейший метод
public static IEnumerable<R> Transform<T, R>(IEnumerable<T> source, Transform<T, R> transform)
{
    foreach(T t in source) yield return transform(t);
}

и воспользоваться им вот так:
    using (Stream file = File.OpenRead("text.txt"))
        Console.WriteLine(Sum(Transform<string, int>(Lines(file))));

WH>Это тоже решается библиотекой.
WH>А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Python vs C#
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.05.05 05:03
Оценка: :))) :)
Здравствуйте, FR, Вы писали:
FR>Не надо по деревьям лазить, достаточно брать любую небольшую утилитку активно работающую с текстовыми файлами, объем кода будет сильно меньше чем на плюсах или шарпе, близко к объему на перле, но в отличии от перла не write-only а вполне читабельный код.
Угу. А вот при рисовании линий на экране лого порвет этот ваш питон как тузик грелку.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[39]: Python vs C#
От: Трурль  
Дата: 14.05.05 05:25
Оценка:
Здравствуйте, eugals, Вы писали:

E>А теперь то же самое с использованием возможностей питона 2.4:

E>
E>file("out.txt", "w").writelines(sorted(file("test.txt")))
E>


Чисто для прикола:
"out.txt" 0: t[<t: 0: "text.txt"]
Re: Python vs C#
От: Andir Россия
Дата: 14.05.05 05:49
Оценка:
Здравствуйте, WolfHound, Вы писали:

Просто в тему: Python с типизацией под Mono http://boo.codehaus.org/

С Уважением, Andir!
Re[42]: Python vs C#
От: Cyberax Марс  
Дата: 14.05.05 05:58
Оценка:
FR wrote:

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

> где ты здесь увидел утечки ресурсов? Файлы по любому закроются на выходе.

Да, а если этот кусок кода выполняется в цикле 10000 раз? Что _тогда_
будет? А если вместо открытых файлов — соединения с БД (количество
которых, кстати, весьма ограничено)?

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[44]: Python vs C#
От: Cyberax Марс  
Дата: 14.05.05 06:00
Оценка:
FR wrote

> Тут есть небольшой UB, так как документация не гарантирует такое

> поведение для всех реализаций. Но уже очень много кода написано
> полагаясь на такое поведение так что менять его вряд ли будут.

_Уже_ поменяли в Jython и IronPython (или как его там зовут). Когда
выйдет Parrot, то поменяют и в обычном Питоне.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[40]: Python vs C#
От: eugals Россия  
Дата: 14.05.05 06:09
Оценка: :))) :)
Здравствуйте, Трурль, Вы писали:

Т>Чисто для прикола:

Т>
Т>"out.txt" 0: t[<t: 0: "text.txt"]
Т>


bash$ sort text.txt > out.txt


... << RSDN@Home 1.1.4 beta 5 rev. 395>> {WinAmp: silent}
Re[43]: Python vs C#
От: FR  
Дата: 14.05.05 06:31
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>FR wrote:


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

>> где ты здесь увидел утечки ресурсов? Файлы по любому закроются на выходе.

C>Да, а если этот кусок кода выполняется в цикле 10000 раз? Что _тогда_

C>будет? А если вместо открытых файлов — соединения с БД (количество
C>которых, кстати, весьма ограничено)?

Если у бабушки будет ... то это уже будет дедушка.
Я конечно понимаю твой праведный гнев, но реально в примере утечки нет, при выходе из модуля (который происходит при нормальном выходе из программы) деструктроы вызываются(документация это гарантирует). И вот этот пример тоже всегда срабатывает:

import win32api, os

class Test:
    def __del__(self):
        win32api.MessageBox(0, "test", "test")
        
tst = Test()
Re[45]: Python vs C#
От: FR  
Дата: 14.05.05 06:32
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

C>FR wrote


>> Тут есть небольшой UB, так как документация не гарантирует такое

>> поведение для всех реализаций. Но уже очень много кода написано
>> полагаясь на такое поведение так что менять его вряд ли будут.

C>_Уже_ поменяли в Jython и IronPython (или как его там зовут). Когда

C>выйдет Parrot, то поменяют и в обычном Питоне.

Как я уже писал разработчики Jython лентяи уже с 2001 года не могут новую версию сделать. А IronPython еще глубокая альфа.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.