LINUX.ORG.RU

[Тред-совет] ЯП с динамической типизацией


0

6

Присматриваю для себя - чего бы нового изучить. Железная, непоколебимая статика - хорошо конечно, но начинает надоедать. Аккуратности кода уже вроде набрался, можно попробовать динамику. Вот и стою перед выбором - куда податься - Python, Ruby, JS или что там еще?

Итак, императивный, лаконичный, кроссплатформенный ЯП, с динамической типизацией, с развитой инфраструктурой, продукты которого жрут минимум памяти, адекватные по скорости, можно с вкраплениями функционального программирования, и совсем хорошо, если компилируемый - что посоветует многоуважаемый All?? (желательно с обоснованием)

Цель - создание серверных, десктопных и веб-приложений. Будет Ъ, если можно использовать один код для веб и десктопа (по типу Eclipse RAP/RCP)

Спасибо

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

> про относительно легковесный ECL, но он, по утверждению самих лисперов же, сильно кастрирован и вообще проблемен.

Ну скажем так все слова переврал.

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

> Заинтересовался, прочитал, оказалось неинтересно. Ну, и кто тут виноват?

Я не говорил, что «неинтересно». Я высказал своё мнение об «обильности комментариев» и едко-саркастическом тоне высказываний о лиспах и ФП. Хотя бы на это я имею право, как по-твоему?

И при чём тут абстрактный вопрос «кто виноват»?

Да, но можно поделиться опытом и помочь ему сэкономить время. Из чистого альтруизма.

Вот чем-чем, а «альтруизмом» в твоих комментах не пахнет. :)

Наблюдаю (кстати, не в первый раз) иронический и даже где-то ёрнический тон высказываний в отношении «всяких лиспов и ФП». Я сам пользую guile при необходимости, но избегаю обобщённых безапелляционных сентенций как за, так и против. «Помогать и делиться опытом» лучше всё-таки по-другому, без ёрничества. Это имхо, так что предлагаю не цепляться к этой фразе.

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

> Опять же надуваешь муху размером с слона. Он давно говорил об отсутсвии webdev библиотеки. И имел несколько претензий к синтаксису в районе let-а и доступа к слотам.

Ой, я вас умоляю. У него были трактаты-простыни с перечислениями претензий, сейчас лень искать. И вышеописанным он явно не ограничивался.

А вот компилируемую динамиу найти довольно сложно. Ну это так к слову.


Ну, а разве кто спорит? Редкий, можно сказать, экзотический фрукт со странноватым привкусом :)

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

> Ну скажем так все слова переврал.

Ну так поправьте же, не стесняйтесь!

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

> И при чём тут абстрактный вопрос «кто виноват»?

При том, что не надо обвинять писателя в напрасно потраченном читательском времени.

Наблюдаю (кстати, не в первый раз) иронический и даже где-то ёрнический тон высказываний в отношении «всяких лиспов и ФП». (...) «Помогать и делиться опытом» лучше всё-таки по-другому, без ёрничества.


Горькую пилюлю иногда можно приправить. Лучше усваивается.

Я сам пользую guile при необходимости, но избегаю обобщённых безапелляционных сентенций как за, так и против.


Я тоже. Вы не заметили?

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

А вариант clojure не рассматривается? Lisp'ы не знаю, спрашиваю из интереса. Там как бы есть и IDE различные(IDEA, Eclipse, про NetBeans не в курсе), и системы сборки(maven, leiningen основанный на maven), да и Java либы доступны.

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

> А вариант clojure не рассматривается?

Я не призываю ограничиваться Groovy - есть много других хороших JVM-based динамических языков. Основные бонусы Clojure, кстати, вовсе не в том, что оно - лисп, а в concurrency и STM. Если это действительно нужно ТСу, и он готов ради этого изучать новый для него (и, признаем честно, не самый дружественный к программисту) язык, то почему бы и нет.

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

> богатым рантаймом

Странный аргумент. Это как java цеплющася к процессу образ VM в n-адцать мегабайт. У SBCL в этом образе хотя бы компилятор.

Переносимостью

Между чем и чем? Вот когда у меня шаритсякод меджду C-шным встроенным ECL и сервером приложения на SBCL - это переносимость.

Если его устроит оверхед в 60 метров непонятно на что - то почему бы и нет. Тут лисперами на ура используется риторика о дешевизне памяти, обычно используемая апологетами Java.

И опять не в тему 60 мб (кстати это для 64-бит, для 32 - 28)это сохраненый образ на диске, в памяти за счет счет MMAP будет загружено меньше для маленькой програмки например всего несколько. Опять же память для тяжелых серверов будет расти медленее за счет номального компилятора вместо жручего JIT. А явисты по-моему свою свердешевую память вешают на гигибайты.

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

> сейчас лень искать.

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

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

Как известно, не надо быть поваром, чтобы понять, что мясцо слегка подтухло ;)

Кое-какое мяско таки немного тухлявеньким готовят.

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

> При том, что не надо обвинять писателя в напрасно потраченном читательском времени.

Мсье обладает искусством чтения между строк и мастерством обнаружения тайного смысла? Завидую.

Даже не смею просить о приведении примера моих «обвинений»...

Горькую пилюлю иногда можно приправить. Лучше усваивается.

М-да... Похоже мы не понимаем друг друга и говорим о разном. Ну да ладно, эту тему я не продолжаю.

> Я сам пользую guile при необходимости, но избегаю обобщённых безапелляционных сентенций как за, так и против.

Я тоже. Вы не заметили?

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

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

>> Мой, как ты говоришь, «бэкграунд» - системный программист.

Ну, вот с этого и надо было начинать.

Я этого никогда и не скрывал.

web- и enterprise-задачи имеют свою, сильно отличающуюся специфику

Где именно сказано, что ТС решает enterprise-задачи? Где именно сказано, что он имеет дело именно с теми web-задачами, которые не-I/O-bound?

Hint: transaction processing,

I/O-bound.

Да что ви гойворите. Системный погромист детектед. :)

Это какой-то другой transaction processing, который не OLTP?

Ага, значит, уже всплыл Jython ;)

Было бы странно, если бы в разговоре о Java и динамических языках не вплыл Jython.

Не знаю, что это, но предполагаю

Не читал, но осуждаю :) А предположение верное.

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

А как работает связка Jython+NumPy?

Никак, насколько я знаю. Мой комментарий был к тому, что «тормознутость» Python никак не мешает математическим расчетам.

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

Посему ТСу будет предложены Emacs+SLIME вместо IDE ... нормальными IDE

Вопрос нормальности субъективен. Я, например, считаю всякие eclipse'ы ненормальными и только мешающими продуктивной разработке.

В том же Питоне гораздо более приличное FFI,

В чем это заключается?

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

Ты всё приводишь в качестве примера питон. Это нормальный язык или нет? В нем, кстати, нет полноценных лямбда выражений.

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

>> богатым рантаймом

Странный аргумент. Это как java цеплющася к процессу образ VM в n-адцать мегабайт.


Я имел в виду стандартные runtime-библиотеки. Извиняюсь, если выразился не очень четко.

У SBCL в этом образе хотя бы компилятор.


А у JVM - JIT-компилятор.

Переносимостью

Между чем и чем?


Между операционными системами, а также имплементациями Common Lisp.

И опять не в тему 60 мб (кстати это для 64-бит, для 32 - 28)это сохраненый образ на диске, в памяти за счет счет MMAP будет загружено меньше для маленькой програмки например всего несколько.


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

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

Попытки запихнуть лисп в числодробильню наталкивались на непреодолимые архитектурные ограничения, связанные с tagged values, и так далее.

Какому идиоту, интересно, пришла в голову такая идея ? В вообще да, универсальных языков нет и везде есть недостатки. Но лисп не так страшен и плох как ты тут рассказываешь.

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

> про относительно легковесный ECL, но он, по утверждению самих лисперов же, сильно кастрирован и вообще проблемен.

Ну скажем так все слова переврал.

ты это, давай не трындеть, давай опровергни, если практик

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

mv в одном треде утверждал что ПЛИС + CL рвут CPU-GPU в числодробильных задачах. Но ему с цифрами объяснили что он не прав;-)

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

> Найди уж раз заочно цитируешь.

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

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

> Для обеспечения динамизма в статически компилированном коде приходится прибегать к ухищрениям в виде 60-мегабайтного рантайма

Компилятор в рантайме там исключительно для инкриментности и в какой-то мере для сочетания динамики и сочетания. Для просто компиляции динамики оно как ни странно не нужно. 60 мб. это опять же самый объемный из СL - SBCL. Который заточен под серверы, и сравнивать тогда уж жабофицированным энтерппайзом в гигабайты.

Более адекватный путь ... - JIT-компиляция.

Тут понимаешь или ругать CL и его встроенный компилятор или молчать про JIT, который из-за ограниченноти времени на разогрев начнет брать скорость как раз сжирая память. И дай боже что бы он вместе с уже наличным рантаймом уложился в эти нечастные 60 мб.

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

> Я, например, считаю всякие eclipse'ы ненормальными и только мешающими продуктивной разработке.

Может, потому, что вы не овладели этими инструментами в должной степени? Намекаю, эти инструменты будут посложнее молотка или лопаты.

В чем это заключается?


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

Ты всё приводишь в качестве примера питон.


Неправда. К «современным нормальным» языкам я также отношу, например, Scala. Читайте внимательнее.

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

> mv в одном треде утверждал что ПЛИС + CL рвут CPU-GPU в числодробильных задачах. Но ему с цифрами объяснили что он не прав;-)

Он просто не смог объяснить, как именно LRnL должен быть реализован на ПЛИС. Что, в общем, и понятно.

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

Нет, LRnLA по словам mv и не нужно реализовывать на ПЛИС - ПЛИС можно настроить так, что бы не было затыков в подсистеме памяти. И если бы не LRnLA, то наверное mv был бы и прав. Но благодаря LRnLA в таких задачах ПЛИСам просто нечего делать - оба решения работают со 100% эффективностью, поскольку CPU-GPU рвут ПЛИС по флопсам при равной стоимости, то с-но фсе...

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

Может, потому, что вы не овладели этими инструментами в должной степени? Намекаю, эти инструменты будут посложнее молотка или лопаты.

Овладел достаточно, чтобы не использовать это говно. В 21 веке у eclipse проблемы с многомониторностью, многооконностью и тем более с удаленной разработкой. Да, некоторые конечно ради мифических удобств встроенной автодополнялки и прочих свистело-перделок пускают это через X11-over-ssh, а на одновременное редактирование нескольких файлов забивают, но я так работать не могу.

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

Примеры?

К «современным нормальным» языкам я также отношу, например, Scala

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

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

>но если это так, то почему в нем до сих пор нет нормальных лямбд, которые якобы есть во всех нормальных языках ?

для общего развития - что является *нормальной* лямбдой?

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

> Я имел в виду стандартные runtime-библиотеки.

Еще не лучше. Ты таким хитрым словообразом называешь стандартную библиотеку.?

А у JVM - JIT-компилятор.

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

Надо аккуратно померить резидентную память типичного разогревшегося процесса.

И что ты хочешь намерить? Очевидно что если мы процессе неприрывной разработки то образ поднимется в память весь. Но после того как мы например сбросим очищеный purify образ и запустим socket-сервер например то большая часть образа опять останется на диске, поскольку все необходимое уже скомпилировано в машкод.

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

>анонимная функция, умеющая все то же самое, что и обычная функция, но только анонимная.

ну не все так плохо :) я знаю что такое лямбды.
меня интересует именно _нормальность_ лямбд в лиспе и их ненормальность в питоне...

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

> меня интересует именно _нормальность_ лямбд в лиспе и их ненормальность в питоне...

В Питоне лямбда - это выражение и не может содержать в себе несколько операторов (== занимать несколько строк).

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

Присоединяюсь к вопросу.

Я питонист слабый, но успел немного распробовать питонские лямбды, и он показались мне нормальными. Может быть, я чего-то не увидел?

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

> я знаю что такое лямбды.

Серьезно? anonymous кстати тоже не знает. Тем более то что в СL называется лямбдой можно обсужать только в сравнении с другими формами вводящими объекты класса function. Точнее обсуждать стратегию их компиляции.

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

У меня получалось делать лямбды из неск операторов (со строками то ограничения нет), правда оно не оч читабельно.

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

лямбды только однострочные стейтменты в них нельзя

даже в C# лямбды нормальные, ёмаё! Этот ваш царь Гвидон идиот.

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

> У меня получалось делать лямбды из неск операторов (со строками то ограничения нет)

Ээ... пример?

правда оно не оч читабельно.

"...но такая фигня получается" (c)

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

> В Питоне лямбда - это выражение и не может содержать в себе несколько операторов (== занимать несколько строк).

«Вот оно чё!» :)

Не натыкался на это. Впрочем, и задачки у меня были несерьёзные - ну, не питонист я.

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

>А просветите дилетанта, в чем ненормальность питоновских лямбд?

да собственно мне тоже это интересно. тов. Reset хотел пояснить...

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

> У меня получалось делать лямбды из неск операторов (со строками то ограничения нет), правда оно не оч читабельно.

Не, ну это не дело. Или твой код, кроме тебя, никто не читает? :)

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

>В Питоне лямбда - это выражение и не может содержать в себе несколько операторов (== занимать несколько строк).

хм. неожиданно.

dib2 ★★★★★
() автор топика
Ответ на: комментарий от tailgunner
    thread.start_new_thread( lambda : ( result.append(wrapper._convolve( funcname, lambda connect : recv_logs( connect, out ), *args, **kw_args )) or 
                                        ( result[0][1] and not alarm() ) or ( close and W.destroy() ) ), () )

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

>Серьезно? anonymous кстати тоже не знает

хорошо, я знаю что такое лямбды настолько, насколько мне надо было знать.

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

> Не натыкался на это.

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

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

> В питоне нельзя в лямбду запихнуть любой код.

Можно запихнуть любой в функц стиле.

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

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

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

ну в питоне операторы присваивания в lambda типа запрещены синтаксисом, но и это обходится прямым вызовом спец. методов. Тоже читается фигово, но иногда оправдано. С циклами конечно хуже...

Но лямбда это ж функциональщина, мне казалось что такие вещи как раз противоречат ФП?

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