LINUX.ORG.RU

Python или NodeJS

 , ,


0

2

Сейчас, как я вижу, NodeJS становится всё популярнее. В чём его плюсы? Что у него один и тот же язык с браузером? В npm много пакетов, наверно, применение JS сейчас очень широкое.

Или обработать генерируемую через JS веб-страницу. Наверно, лучше в таком случае использовать тот же самый язык? У безголового Firefox есть библиотеки для работы с питоном или NodeJS, но чтобы можно было работать с ним через bash, мне ничего не удалось найти.

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

Чушь какая-то. Node.js стал популярен потому, что стал популярен перед этим JavaScript. И ваще, он заборол уже все языки по популярности, недаром npm содержит большего всего пакетов открытого софта

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

Если ты про Go vs JS - Go же совсем не гибкий - тупо Си на стероидах, но для всяких сетевых микрослужб аля http rest он и создавался. А какой-нить UI на нём писать будет нереально

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

С развитием WebAssembly наконец Javascript отправится на пенсию.

Навряд ли.
Ниже ваше же довод.

NodeJS стал популярен потому, что есть большой избыток бездарных >кодеров на JS на рынке, при этом им нельзя поручить фронтенд, >потому что делать удобный фейс и хорошо верстать в современных >браузерах не так уж и просто.

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

Асинхронность уже давно есть и в питоне со времён Tornado, Twisted и других обвязок над libevent

Вот этот twisted по-моему старше ноды, а гемора с ним было всегда больше, чем пользы. Так оно и умерло в безвестности. Tornado тоже какое-то ненужное легаси. Там уже несколько поколений асинхронных библиотек, и всё как-то не приживается. Может уже пора признать, что питон не совместим с асинхронными паттернами, и перестать мучать жёпу?

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

Я вот хочу Vim освоить, кстати. Но я не дисциплинированный. Один день «позанимался», потом на месяц забиваю.

Таким школьным методом ничего не освоишь. Просто открываешь вим и пишешь код. Если что-то неудобно, ищешь рецепты как сделать удобно. Со временем всё само запоминается. Я даже viml специально не учил, но пишу достаточно свободно на нём (с подсказкой из хелпа). Но если модальность с самого начала не заходит, лучше отказаться.

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

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

Так на js не надо писать, в него надо компилировать. И главная фича js это как раз то, что в него можно оттранслировать всё что угодно. Даже окамл транслируют, шутка ли. Осталось только макак научить программировать по-взрослому, и этот процесс уже идёт (typescript). Лет через 10 строгать js ручками будут только поехавшие.

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

Можно и так. То есть либо питон, либо асинхрон. Выбрать что-то одно.

bread
()
Ответ на: комментарий от silver-bullet-bfg

Сделай мне приватный метод класса (не неиндексируемый линтером, а нормальный приватный метод)

Зачем? Зачем в интерпретируемом языке приватный метод?

реализуй на Python тернарку как новый элемент синтаксиса языка, не переписывая VM

И какой язык такое позволяет?

покажи как мне сделать из огрызка лямбд полноценную

В чем неполноценность питоньих лямбд?

python примитивный, огрызочный язык, который не поддерживает ни одной парадигмы нормально

Реализация тернарного оператора, «нормальные» лямбды, и приватные методы — это какая парадигма?

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

Зато Node это из коробки - нормальное асинхронное программирование

Callback hell, promise hell, там, что то было с генераторами еще, выглядящее не совсем хорош. Ок, если это по вашему нормально, то не спорю. Когда там появилась поддержка async/await нормальная в жс? Всюду, нативная, без всяких бабелей/полифилов/ключей запуска?

Пожалуйста- полифилы. Позволяют реализовать синтаксический элемент языка, без переписывания всей VM. Сделай то же самое не на PyPy…

А что вас такого в синтаксисе питона не устраивает? Кроме лямбд, они крайне убоги. Про тернарники - value = 2 if True else 1. Во вложенных тернарниках смысла не вижу вообще, ибо потом такой код читать не совсем просто.

В последнем стандарте ES уже есть настоящие приватные свойства и методы класса.

Хочешь и в питоне сделай если нужно. Как вариант ниже. Или аналогичный вариант, но с использованием метаклассов.

class TestPrivate:
    def __init__(self):
        self.a = 1

    def __setattr__(self, key, value):
        if key== 'a':
            raise Exception('нельзя')


b = TestPrivate()
b.a = 4

Но для начала стоит ответить на вопрос - а зачем мне нужны приватные методы? Могу ли я обойтись без них? Ответ «Ну я же это, ООП, тут обязательно должно быть private и public» не принимается.

Сделай мне приватный метод класса (не неиндексируемый линтером, а нормальный приватный метод) или реализуй на Python тернарку как новый элемент синтаксиса языка, не переписывая VM. Ну или покажи как мне сделать из огрызка лямбд полноценную… В общем - python примитивный, огрызочный язык, который не поддерживает ни одной парадигмы нормально.

Приватный метод - писал выше, он реализуем. Вариант неиндексируемый линтером - меня кстати тоже вполне устраивает. Без тернарок тоже обходился, замена им имеется. Лямбды - вот честно, в питоне про них вспонимаю только при необходимости отсортировать список, и все. List comprehensions хорошая штука. Сначала да, было больно.

Другой пример - в ООП языке нет интерфейсов нормальных. В ООП языке у меня нет нормальных инструментов, чтобы сделать «общение» объектов, а не дружное передёргивание методов….

Значит со мной, что то не так. Не использую в питоне ООП напрямую почти никогда, не знаю, что оказывается использую чисто ООП язык… Какой же я бедный, несчастный… Как вариант еще вот, если вам очень уж так нужно https://docs.python.org/3/library/abc.html. Не совсем то,

Если мы говорим о ESNext и NodeJS, то уже давно завезли. Добро пожаловать в мир, с разморозкой.

То есть в js уже из коробки, всюду я могу сделать что то вроде следующего

import datetime

d = datetime.datetime.now()

print('{:%d. %m. %Y}'.format(d))
d += datetime.timedelta(seconds=5, minutes=25, hours=14)

print('{:%d--- %m --- %Y %H %M %S}'.format(d))

f = 22/73

print('{:.2f}'.format(f))
print('{:.5f}'.format(f))
print('{:.7f}'.format(f))
print('{:*>15.7f}'.format(f))

вывод

15. 05. 2020
16--- 05 --- 2020 04 58 22
0.30
0.30137
0.3013699
******0.3013699

И не следует забывать одну вещь (я ее понял при написании части вещей на го) - если вам не нравится язык, в нем нет каких то вещей к которым вы привыкли в других языках, совершенно не обязательно, что он плохой.

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

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

Выкидываем из этого количества пакетов различный мусор, попытки компенсировать убогость стандартной библиотеки. Сколько останется?

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

NodeJS стал популярен потому, что есть большой избыток бездарных кодеров на JS на рынке, при этом им нельзя поручить фронтенд, потому что делать удобный фейс и хорошо верстать в современных браузерах не так уж и просто

Чушь какая-то. Node.js стал популярен потому, что стал популярен перед этим JavaScript. И ваще, он заборол уже все языки по популярности, недаром npm содержит большего всего пакетов открытого софта

И как это противоречит тому, что я написал? Логично, что «популярность языка» — это и есть «наличие большого числа кодеров».

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

С развитием WebAssembly наконец Javascript отправится на пенсию.

Навряд ли
Ниже ваше же довод

Ну само собой, не по щелчку пальцев же он мгновенно исчезнет. Еще лет 40 будут еще существовать кодеры, готовые писать на JS, потому я и писал про «пенсию» — писать на этом языке будут пенсионеры.

byko3y ★★★★
()

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

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

Так на js не надо писать, в него надо компилировать. И главная фича js это как раз то, что в него можно оттранслировать всё что угодно. Даже окамл транслируют, шутка ли. Осталось только макак научить программировать по-взрослому, и этот процесс уже идёт (typescript). Лет через 10 строгать js ручками будут только поехавшие

Уже сейчас зачастую транслируют JS->JS. Можно транслировать и в кресты, и в жаву, но все равно для использования браузерных инструментов и готовых решений нужно что-то очень близкое, а трансляция в NodeJS и вовсе не имеет смысла.

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

И какой язык такое позволяет?

Лисп же

Ну в лиспе что угодно является тернарным оператором, и четвернарным, и пятернарным.

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

Callback hell, promise hell...
Когда там появилась поддержка async/await нормальная в жс?

Ты поехавщий? Давно уже появилась, все забыли про цепочки промисов и колбеки.

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

Но для начала стоит ответить на вопрос - а зачем мне нужны приватные методы?

Зачем-то вам нужно, иначе питонокод не был бы забит _мусором. Наверно отделять внешний интерфейс от внутреннего устройства имеет смысл (даже для питонщиков). Почему бы и не объявить об этом более изящным способом, чем козявка в имени?

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

Callback hell, promise hell...
Когда там появилась поддержка async/await нормальная в жс?

Ты поехавщий? Давно уже появилась, все забыли про цепочки промисов и колбеки

Это ES2017 (ES8), даже в ES2015 (ES6) его нету, а это самый актуальный нынче стандарт. Что ты будешь делать, если у секретурки стоит пятидесятый фурифокс? У меня вон бабель транспилит асинхронные функции и ряд пакетов в npm до сих пор использует костыли-библиотеки, созданные во времена ES5/6.

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

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

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

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

Ясно/понятно. Открываем документацию nodejs и пытаемся там, что либо найти про async / await и не найти многочисленные фрагменты кода с callback. Чет как то не получается. Странно это.

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

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

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

ок. Вам может быть этот способ кажется некрасивым, но если выбирать вариант между «показывать приватные методы и поля в нижним подчеркиванием» и «не показывать их вообще» я без раздумий выберу первый вариант.

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

Открываем документацию nodejs и пытаемся там, что либо найти про async / await и не найти многочисленные фрагменты кода с callback. Чет как то не получается.

https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_or...

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

Ну в лиспе что угодно является тернарным оператором, и четвернарным, и пятернарным.

Собственно да, там этот костыль не нужен, можно использовать обычный if. Но если тебе вдруг захочется еще чего-нибудь странного, то уговаривать разработчиков и ждать релиза совсем не обязательно %)

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

Большая часть фичей, которые добавили в ES6+ вообще ни разу не для того, чтобы в жопоскрипт стало проще компилировать. Наоборот, теперь на нём стало приятней писать. А писать на нормальном статически типизированном языке (нет, я не про TS, он — днище бессмысленное) обкладываясь коллбеками, а потом компилировать код в ссаную динамику, — это какая-то запущенная стадия шизы.

Лет через 10 строгать js ручками будут только поехавшие

Поехавшие как сейчас, так и потом, будут компилировать в JS. А для нормальных людей, надеюсь, как следует допилят wasm.

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

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

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

потом компилировать код в ссаную динамику

А не важно во что. Браузер умеет только js, компилируем в js. Появится что-то получше, будут в получше компилировать. А был бы в браузере питон, и ничего оттранслировать не удалось бы.

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

писать на нормальном статически типизированном языке (нет, я не про TS, он — днище бессмысленное) обкладываясь коллбеками, а потом компилировать код в ссаную динамику, — это какая-то запущенная стадия шизы

Статически проверяешь корректность алгоритма, а потом компилируешь в единственный язык, который выполняют браузеры — что не так?

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

да, спасибо. Одно место с async/await есть)

Нет, ты не понял. Это функция, которая превращает колбэки в promise/async/await.

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

ES6+ это костыли. Это хорошо, что их можно нативно не поддерживать, а тоже транслировать. А то получилось бы как с 3-м питоном: ваш браузер не поддерживает ES6, установите хром последней версии.

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

Так на чём ты предлагаешь писать фронт, учитывая асинхронную природу всего, что там происходит? Для этого годятся только языки с async/await, при любом ином раскладе получается collback hell.

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

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

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

В реальном проекте сложнее «hello world» без доступа к чужим внутренностям можно обойтись только если автор по твоей просьбе изменит свой модуль.

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

Так я тебя ни о чём не спрашивал. А ты спросил. Чтобы получить ответ, придётся перечитать ещё раз.

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

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

Как ты, например, меняешь внутренности чужих модулей на компилируемых статических языках? В общем случае - ты никак не меняешь, а если вдруг меняешь - то ССЗБ.

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

Так на чём ты предлагаешь писать фронт, учитывая асинхронную природу всего, что там происходит? Для этого годятся только языки с async/await

Т.е. жаваскрипт первые 23 года существования не годился? Писать можно на любом ЯП, позволяющем реализовать промисы. Да и сахар async/await не монопольная привилегия js.

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

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

Возможно. Но иногда другого выбора кроме как написать говнокод нету. Я думаю, что у многих было - «это адское говно/треш/костыль/велосипед, и по другому ну вообще никак / непозволительно долго.»

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

Т.е. жаваскрипт первые 23 года существования не годился?

Иначе откуда к нему столько «любви»? Ковыряние в коллбечной лапше — сомнительное удовольствие.

А сейчас там, собственно, async/await есть, но ты восторженно предлагаешь шаг назад, это даже не смешно обсуждать.

промисы

Даром не нужны без эвейта.

сахар async/await не монопольная привилегия

Только в JS это нормально реализовано.

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

promise hell

– вымышленная проблема, а

поддержка async/await нормальная в жс

вместе с ними и появилась.

Чуть более по сабжу: а разве на замыканиях в питоне не сделать приватные поля и методы?

Princesska ★★★★
()

Python или NodeJS

А почему не 1С 8.xxx?
К ней также как к python можно прикрутить любую библиотеку.

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

Я в недра интерпретаторов/компиляторов не лез. Все, что я про знаю про async/await - await позволяет дождаться окончания асинхронного запроса и получить результат в этом месте грубо говоря. В жс при транспиляции для использования в неподдерживаемых async/await средах генерируется страшная престрашная портянка кода. Как сейчас реализовано async/await в движке жс / интерпретаторе питона я не знаю.

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