The OpenNET Project / Index page

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



"Гвидо ван Россум намерен достигнуть двукратного увеличения производительности в CPython 3.11"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Заметили полезную информацию ? Пожалуйста добавьте в FAQ на WIKI.
. "Гвидо ван Россум намерен достигнуть двукратного увеличения п..." +/
Сообщение от Аноним (196), 14-Май-21, 16:53 
> других языков с такими приятными конструкциями и столь не перегруженным синтакисом я не знаю

Ох... Вот что я навспоминал только навскидку:


"Приятные" конструкции:

* Тернарный оператор, непохожий на свои аналоги в других языках:
  x = a if True else b
  вместо обычного порядка типа
  x = True ? a : b
  или
  x = if True then a else b

* Оператор if не возвращает значение, в отличие от Ruby и Scala. Собственно, если бы возвращал - не пришлось бы городить вышеоупомянутый экзотический тернарный оператор.

* Вообще нету оператора switch, тем более возвращающего значение.

* Оператор while может иметь ветвь else. Ну, чтоб читающие код не расслаблялись, а пошевелили немного извилиной на предмет "что за фигня?"

* Упор в языке на list/dict comprehension. Для простых выражений - замечательная вещь, но когда нужна вложенность, лучше не использовать, ФП-подход в других языках выглядит гораздо читабельнее.

* Очень слабая поддержка ФП. Cлабые lambda, map, filter и reduce (и назван не fold). Отсутствуют flatMap, Option/Optional/Maybe, Either, pattern matching with deconstruction.


"Неперегруженный" синтаксис:

* Регулярные выражения в стандартной библиотеке, а не в синтаксисе языка, как в Perl и Ruby. В результате надо писать re.search("\\d", s) вместо s =~ /\d/. А если надо сматчить сабгруппы - синтаксис становится ещё тяжелее, никаких тебе $1 после выражения. re.sub() по умолчанию работает как gsub() в других языках. re.gsub() вообще нету. Ну, надо же быть максимально непохожим на другие языки, чтобы программист всё время путался, переходя между языками.

* В куче мест нужно писать self. Особенно напрягает обязательность его как первого аргумента метода класса. Надо писать либо self, либо @staticmethod/@classmethod. Вот уж где "explicit is better than implicit", доведённый до маразма. Ни в одном языке такого нет. И не забудьте этот же self добавлять при вызове методов! Особенно "удобно" коллекцию свободных функций собирать в класс и добавлять "self." в начало их вызова, да ещё без проверки в compile time.

* После условий в if и while, после for, после описания класса или функции, перед переводом строки - надо ставить двоеточие в конце строки, перед телом цикла, функции или класса. Зачем??? Синтаксис языка и так зависит от whitespace и переводов строки! Убрали же необходимость точки с запятой в конце строк!

* Нету неявного return в конце функции, как, например в Ruby, Scala, Lisp, Haskell, etc. Соответственно надо писать

def sum(a, b):
  return a + b

вместо

def sum(a, b)
  a + b

или

def sum(a, b) = a + b

А если эта функция ещё и член класса - придётся добавить self/@staticmethod/@classmethod.

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

Оглавление
Гвидо ван Россум намерен достигнуть двукратного увеличения производительности в CPython 3.11, opennews, 13-Май-21, 23:20  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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