LINUX.ORG.RU

Вышел Python 3.1

 ,


0

0

Новое в этой версии:

  • Класс для хранения упорядоченных словарных данных.
  • Разные оптимизации в целочисленном типе (int).
  • Новые возможности тестирования модулей, включая поддержку отключения определенных текстов и новые assert-методы.
  • Более быстрый модуль ввода/вывода (io). Быстрее в 2-20 раз, в зависимости от задачи.
  • Добавлена эталонная реализация оператора importlib, написанная целиком на Python.
  • Декодирование UTF-8, UTF-16 и LATIN-1 теперь в 2-4 раза быстрее.
  • Включение опции "--with-computed-gotos" позволяет добиться 20%го прироста в исполнении циклов.
  • Функция string.maketrans() больше не рекомендуется к использрованию, и она была заменена на статические методы bytes.maketrans() и bytearray.maketrans().

Что нового?

>>> Подробности

★★★★★

Проверено: boombick ()
Ответ на: комментарий от anonymous4

>Ты, видать, из тех, кто уверен, что кроме жабы ничего в этом мире нет :)

.NET не нужен.

r ★★★★★
()
Ответ на: комментарий от KRoN73

>> Занеси еще Boo в чеклист.

> Это уже не JVM.

Ч0рт, я вечно путаю все эти модные VM. Конечно, он для .NET, не для JVM.

> Хотя скорость его поражает...

Он же наполовину статический.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>> Хотя скорость его поражает...

>Он же наполовину статический.

Как это наполовину? Разве не полностью? Он же тот же си-шарп, только с пайтоноподобным синтаксисом. Мелкософтовский CLI же.

anonymous4
()
Ответ на: комментарий от tailgunner

>Он же наполовину статический.

Полностью (в рамках .NET, конечно). Всё равно поражает. В некоторых тестах работает быстрее, чем C# (и быстрее heap-кода в Си++).

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>> Он же наполовину статический.

> Полностью

Я бы не назвал язык, в котором есть "as duck", полностью статическим.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Я бы не назвал язык, в котором есть "as duck", полностью статическим.

Утиная типизация - частный случай статической. Просто типы не программист расставляет, а компилятор.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Утиная типизация - частный случай статической.

ыыыы... Ну от тебя я такого не ожидал %)

"if you declare an object as type duck or cast to type duck (or turn on the implicit duck typing option, see below), then boo will not try to resolve any methods or operations you call on that object at compile time. Instead it will convert those operations into methods that do not resolve until runtime" - если это статическая типизация, то что такое динамическая типизация?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Цитирую первую строчку: "Boo is a statically typed language, like Java or C#."

Однако, согласен, там есть нечто вроде void-типа (не знал).

anonymous4
()
Ответ на: комментарий от anonymous4

> Цитирую первую строчку: "Boo is a statically typed language, like Java or C#."

Спасибо, я читал. Только вот к концу главы выясняется, что язык при желании можно сделать полностью динамически типизированным.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

Всегда пожалуйста :) Сделать-то можно, только быстродействие упадет в разы, если не на порядки кмк.

anonymous4
()
Ответ на: комментарий от tailgunner

>если это статическая типизация, то что такое динамическая типизация?

Утиная типизация может быть динамической, может быть статической. В boo - она статическая :)

...

При статической типизации все типы выводятся на этапе компиляции и связывание методов осуществляется прямое.

При динамической - типы выводятся в рантайме и связывание идёт косвенное.

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous4

>Сделать-то можно, только быстродействие упадет в разы, если не на порядки кмк.

В обычных языках падает на порядок.

На Форте как-то делал реализацию динамики с потерей около 30% производительности. Но там динамика была не совсем честная :) Т.е. в работе - динамика чистая. Но на практике каждый класс тащил с собой виртуальную таблицу с ячейками для _всех_ динамических методов всех классов. На среднем проекте это могло выливаться в килобайты данных на каждый класс, на большом - в десятки килобайт. По тем временам расход был приличный :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Утиная типизация может быть динамической, может быть статической.

Это новое слово в языкознании.

> При динамической - типы выводятся в рантайме и связывание идёт косвенное.

Повторю цитату: "boo will not try to resolve any methods or operations you call on that object at compile time. Instead it will convert those operations into methods that do not resolve until runtime".

tailgunner ★★★★★
()
Ответ на: комментарий от KRoN73

> Утиная типизация может быть динамической, может быть статической.

Грязная, наглая ложь :]

Типизация бывает статическая, выводимая (inference) и динамическая (она же утиная). Последние две не стоит путать.

"var" в C#, "auto" в D - это выводимая

"duck" в Boo - это динамическая

yk4ever
()
Ответ на: комментарий от KRoN73

Гы. И вот, наверное, откуда корни моей ошибки лезут - в Вики сказано, что в Boo юзается как раз Хиндли-Милнер.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> в Вики сказано, что в Boo юзается как раз Хиндли-Милнер.

Там юзается всё - и явное объявление, и вывод типов, и динамическая типизация.

tailgunner ★★★★★
()
Ответ на: комментарий от yk4ever

> Тем не менее, C# лучше жабы.

Что значит "лучше"? Java - консервантивный язык, туда новых фич неподумав не добавляют. C# же делают по принципу "добавим в язык всяких модных штук, чтобы быдлокодеры радовались". И в любом случае, "Java-платформа vs .NET" - это не "язык Java vs C#". Не хватает почему-то возможностей языка Java - пишите на Scala, например.

Fice ★★
()
Ответ на: комментарий от Fice

> Java - консервантивный язык, туда новых фич неподумав не добавляют.

Может, это связано с тем, что Sun - бакланы, которые просрали свой бизнес?

> C# же делают по принципу "добавим в язык всяких модных штук, чтобы быдлокодеры радовались".

Вы вроде как пытаетесь намутить противопоставление, но сказать что фичи в шарп добавляют "не подумав" - у вас ведь язык не повернётся, м?

> Не хватает почему-то возможностей языка Java - пишите на Scala, например.

Есть некоторая разница между флагманским продуктом крупной корпорации и пионэрскими поделками - в стабильности, инструментарии, документированности.

yk4ever
()
Ответ на: комментарий от yk4ever

> Может, это связано с тем, что Sun - бакланы, которые просрали свой бизнес?

Это связано с тем, что над Java работают серьезные люди, такие как Гослинг. А финансово успешными часто становятся наименее этичные компании.

> Вы вроде как пытаетесь намутить противопоставление, но сказать что фичи в шарп добавляют "не подумав" - у вас ведь язык не повернётся, м?

Я бы сказал "мало подумав".

> Есть некоторая разница между флагманским продуктом крупной корпорации и пионэрскими поделками - в стабильности, инструментарии, документированности.

Есть конкретные претензии к Scala?

Fice ★★
()
Ответ на: комментарий от KRoN73

>В boo - она статическая :)

Динамическая. Статическая "утиная типизация" например в окамле или скале - где инферер генерирует или есть возможность задать структурный тип.

> При статической типизации все типы выводятся на этапе компиляции и связывание методов осуществляется прямое.


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

r ★★★★★
()
Ответ на: комментарий от yk4ever

>Типизация бывает статическая, выводимая (inference) и динамическая (она же утиная).

Вообщето не так. Дактайпинг обозначает только что валидная семантика использования определяется фактическим набором методов.

# class x = object method x = "x"; end;;
class x : object method x : string end
# class y = object method x = "y"; end;;
class y : object method x : string end
# let f x = x#x;;
val f : < x : 'a; .. > -> 'a = <fun>
# f new x;;
- : string = "x"
# f new y;;
- : string = "y"

Фактически дактайпинг. Статический.

r ★★★★★
()
Ответ на: комментарий от tailgunner

>Ну да, давайте вводить собственные термины - за умных сойдем.

А что такое дактайпинг по твоему?

c2.wiki: In a language that supports DuckTyping an object of a particular type is compatible with a method or function, if it supplies all the methods/method signatures asked of it by the method/function at run time.

Example1: If a method1 calls object.draw() then any object with a draw method is compatable with it.

OCamlLanguage: OCaml infers and enforces DuckTyping at compile time, with parametric polymorphism to boot.

r ★★★★★
()
Ответ на: комментарий от Fice

> Я бы сказал "мало подумав".

А может просто "быстрее чем маразматики из Sun"? Вы ведь не можете привести мне обоснованного примера "недостаточной продуманности", м?

> Есть конкретные претензии к Scala?

К ней уже есть IDE уровня Idea/ReSharper?

yk4ever
()
Ответ на: комментарий от r

Вот дактайпинг скалы.

scala> class X {
| def m = "x"
| }
defined class X

scala> class Y {
| def m = "y"
| }
defined class T

scala> def f[A<:{def m:String}](x:A) = x.m
f: [A <: AnyRef{def m: String}](A)String

scala> f(new X())
res0: String = x

scala> f(new Y())
res1: String = y

фактически то что сделал инферер окамла в скале пришлось объявить руками. Но X и Y не имеют никаких отношений между собой и с функцией f - то есть это эффективно то же самое что дает дактайпинг динамическим языкам.

r ★★★★★
()
Ответ на: комментарий от r

>> Ну да, давайте вводить собственные термины - за умных сойдем.

> А что такое дактайпинг по твоему?

А по-моему, duck typing - это реализация динамической типизации. А для "статического ducktyping" уж лет 30 есть название - вывод типов.

tailgunner ★★★★★
()
Ответ на: комментарий от r

> X и Y не имеют никаких отношений между собой и с функцией f - то есть это эффективно то же самое что дает дактайпинг динамическим языкам.

Ну да, назови еще шаблоны Си++ дактайпингом, чего стесняться :D

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>А по-моему, duck typing - это реализация динамической типизации.

Но в чем это выражается?

>А для "статического ducktyping" уж лет 30 есть название - вывод типов.


Статический дактайпинг возможен только ести есть структурный параметрический полиморфизм.

В примере на скале вывод не задействован, задействована статическая проверка структурному соответствию.

r ★★★★★
()
Ответ на: комментарий от tailgunner

>Ну да, назови еще шаблоны Си++ дактайпингом, чего стесняться :D

Есть и такое мнение с с2.wiki.

Откуда такое название дактайпинг - зачем вообще понадобилось его придумывать в дополнение к динамической типизации?

r ★★★★★
()
Ответ на: комментарий от r

>> Ну да, назови еще шаблоны Си++ дактайпингом, чего стесняться :D

> Есть и такое мнение с с2.wiki.

А мнения, что вообще вся типизация - это дактайпинг, там нет? Я не удивлюсь.

> Откуда такое название дактайпинг - зачем вообще понадобилось его придумывать в дополнение к динамической типизации?

Да ХЗ. Я его встречал в обсуждении Питона с жабакодерами - видно, они технических терминов не понимают, для них изобрели лайт-терминологию.

tailgunner ★★★★★
()
Ответ на: комментарий от r

в идее всё неплохо с Groovy, со Scala сильно хуже. Но yole достаточно активно занимается этим...

thevery ★★★★
()
Ответ на: комментарий от tailgunner

>Да ХЗ. Я его встречал в обсуждении Питона с жабакодерами - видно, они технических терминов не понимают, для них изобрели лайт-терминологию.

The name derives from the colloquial saying, "If it Walks Like a Duck and talks like a duck, it must be a duck".

Поэтому.....?:)

r ★★★★★
()
Ответ на: комментарий от r

> The name derives from the colloquial saying, "If it Walks Like a Duck and talks like a duck, it must be a duck".

Ну фразу я знаю, но почему ее применили к динамической типизации, и почему только в последние годы - ХЗ.

tailgunner ★★★★★
()
Ответ на: комментарий от r

> Эта фраза применима по смыслу и к сктруктурным типам скалы и окамла.

Только вот применяют ее к позднему связыванию динамических языков. А так да, применима. А "вывод типов" можно при желании применить к позднему связыванию.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

"Не согласен. Погулять мог..." (C).

Как раз позднее связывание - а правильнее будет поиск символа в рантайме - это как раз _механизм_ обоеспечения дактайпинга в динамических языках. В статических он другой. Но и там и там - утка.

Поведение противоположное дактайпингу - реализация объявленного интерфеса.

r ★★★★★
()
Ответ на: комментарий от r

> Как раз позднее связывание - а правильнее будет поиск символа в рантайме - это как раз _механизм_ обоеспечения дактайпинга

Не-а. Это такая проверка дактайпинга, перенсенная на рантайм :D

> Поведение противоположное дактайпингу - реализация объявленного интерфеса.

Вывод о реализации интерфейса может делаться в рантайме - вот тебе и вывод типов.

Но всё это игра в слова. Есть термины, они общеприняты, и нечего делать умное лицо и выдумывать свои.

</thread>

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

<thread>

>Есть термины, они общеприняты, и нечего делать умное лицо и выдумывать свои.


Я кагбэ их не выдумаю - я тебе С2 процитировал (там Ocaml отнесен к системам с зактайпингом). Тамошним гикам вполне можно более менее доверять - у них там по типизации целый зоопарк статей.

r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.