LINUX.ORG.RU

В питон завозят паттерн-матчинг

 


2

4

Кто бы мог подумать, ещё лет 5 назад, что питон получит типизацию и функциональщину. Но нет:

def is_tuple(node: Node) -> bool:
    match node:
        case Node(children=[LParen(), RParen()]):
            return True
        case Node(children=[Leaf(value="("), Node(), Leaf(value=")")]):
            return True
        case _:
            return False

История показывает, что участь любого популярного ЯП - С++ ужас.

https://www.python.org/dev/peps/pep-0622/

★★★★★

Ответ на: комментарий от DonkeyHot

Получается, GIL – проблема не питона, а Си(: -библиотек его, но всё же:)

CPython изначально сделан так, что на нем невозможно написать быструю программу в общем случае. Из-за этого CPython превратился в дергалку сишных функций. На заре создания сишных библиотек еще был выбор, оставлять ли возможность многопоточности у библиотек или нет. Этот вопрос решило наличие отладочных функций в фундаменте языка. Можно вспомнить, как работает типовой отладчик многопоточного приложения при пошаговом выполнении: сначала потоки остановлены, работа потоков возобновляется, выполняется короткий кусок кода. потоки снова останавливаются — это примерно то, как работает CPython.

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

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

питон ващет и был изначально шелл-языком амоёбы али ещё какой эксперементальной оськи - чисто клей дергающий уже имеющиеся апи - и клей с более удобными структурами данных чем имеющиеся на тот момент шелы - если не нырять в слишком «инопланетные» lisp-машины али смолтоки с улетевшими воздушными шарами за 80тые.

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

Покажите хорошо спроектированный язык. Любой крупный проект с историей именно таков.

Кстати вы кэп, не меньше чем я, по вашей логике. Можно мне тоже предположить что вы «препод»?

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

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

Покажите хорошо спроектированный язык. Любой крупный проект с историей именно таков

Из твоего ответа можно сделать вывод, что ты считаешь, что все крупные проекты с историей — хорошо спроектированы. Хотя, интуитивно я понимаю, что твоя точка зрения ровно противоположна. И это, к слову, причина лично для меня считать тебя не преподом.

Если говорить про языки с хорошим проектированием, то это лисп и паскаль, по крайней мере в их более-менее современных диалектах.

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

посети там доктора а?

На самом деле смешно такое слышать от человека с расстройством речи. Но да ладно, как скажешь.

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

Покажите хорошо спроектированный язык

Я уже показывал его.

Любой крупный проект с историей именно таков

Нет, очевидно.

Кстати вы кэп, не меньше чем я, по вашей логике

Нет, именно по твоей логике.

Можно мне тоже предположить что вы «препод»?

Ты можешь считать всё, что тебе захочется, всё равно твоё мнение о личностях никого не интересует.

давайте просто подождем и посмотрим как язык будет развиваться дальше

Зачем? Уже на данный момент видно, чем оно является и сделать нормальный язык можно только почти полностью переделав его(это уже новый язык, а не развитие).

cppsektant
()

В чем проблема? Делаем метод для сравнения с объектом, инициализированным по умолчанию (или «перегружаем» .eq( в методах класса (при помощи hasattr( или другим образом, не рекомендуется)), получаем на выходе сахар для кода наподобие:

[code=python]

patterns = (

(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)

<…>.match(src = patterns)

class Asdf: def match(self, src):

    ...

    return patterns[
        tuple(p[0] == self for p in src).index(True)]

[/code]

парсер сломался

но суть в том что не нужно писать бойлерплейт, костыльные функции сравнения и уж тем более ломать встроенные методы

mazdai ★★★
()
Последнее исправление: mazdai (всего исправлений: 1)
Ответ на: комментарий от mazdai

patterns = (

(Node(children=[...]), callback_1),
(Node(children=[...]), callback_2),
...)

<…>.match(src = patterns)

class Asdf: def match(self, src):

    ...

    return patterns[
        tuple(p[0] == self for p in src).index(True)]

парсер сломался

Что я делаю не так?

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

я просто не выбрал LORCODE вместо Markdown, пофиксить уже нельзя

mazdai ★★★
()
Последнее исправление: mazdai (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.