LINUX.ORG.RU

Erlanfg VS Common Lisp VS Haskell

 , ,


1

7

Доброго утра! Хотелось бы услышать «+» и "-" данных языков. Прошу при этом сравнительные качества писать в отношении Эрланга. Основная задача при изучении - взять язык на котором будет потом легко найти работу с достойной оплатой.


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

По крайней мере месяца-полтора не хватит на то, чтобы освоить язык в степени, которая позволит писать на нем приложения.

Опять-таки, смотрим в «Haskell vs. Ada vs. C++ vs. Awk vs. ... » - студент, ранее хаскеля не знавший, учившийся ему самостоятельно, через восемь дней после начала обучения стал писать production-ready код.

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

«Haskell vs. Ada vs. C++ vs. Awk vs. ... »

Он бы еще с вижуал бейсиком сравнил...

alienclaster ★★★
()

Очень хочется писать Basic-код на эрланге или лиспе?

malbolge ★★
()

С Haskell больше шансов найти работу на C++.

KblCb ★★★★★
()

Не знаю упомянули уже или нет, но как-то так:
у ёрланга у одного горячая замена кода работает из коробки и без бубнов, это большой плюс, т.к. в областях где без неё никак он там вне конкуренции
у лиспа огромный бэкграйнд в качестве всяких там lispworks и alegro cl так что продакшен одобряет
хаскель конечно годный инструмент, но вышеперечисленное у него страдает. Под виндой кстати страдает намного больше. Работодатель скорее всего выберет только для задач где монадические технологие ядро системы и к ним нужна нотация из коробки

но по хорошему представление надо иметь о всех трёх, попробуй, а там самый близкий по духу себе сам подберёшь.

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

горячая замена кода работает из коробки и без бубнов

Этого в CL нету что-ли? Или конфликты в пространствах имён считаются за бубны?

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

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

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

А, ну если есть возможность выбросить фичу за ненадобностью есть бубны (чёрт возьми! Какие бубны?), тогда пожалуйста...

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

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

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

А подобное есть где-нибудь кроме clisp? Я походу в жизни чё-то упустил

Везде есть вроде. AFAIK единственная задача SWANK — обеспечение клиентского (в т.ч. удаленного) доступа к работающему образу. А собственно сам образ работает так же, как и SmallTalk'овский например, т.е. позволяет обновлять код в уже работающей программе. Собственно из лиспа эту фичу в ST и взяли.

korvin_ ★★★★★
()
Последнее исправление: korvin_ (всего исправлений: 1)

Двадцатилетняя стандартизация есть особенность CL и на данный момент существуют и развиваются несколько известных его имплементаций:

clisp - чуваки пишут свою VM с БИШ. Достаточно старый проект (вроде именно на нём реализовано первое в мире веб-приложение) и уже воняет. Самая непроизводительная (поднимается очень быстро) и нетребовательная к памяти реализация. Экспериментальная поддержка многопоточности.

ecl - транслятор в C. Создают его для встраивания (К.О. читает аббревиатуру).

sbcl - спортсмены хотят порвать продукцию gcc в производительности. Естественно компилятор и довольно быстрый.

lispworks allegrocl - энтырпрайз за бабло (да ещё какое!). Гнут свою палку и живут очень изолированно от свободного мира CL. Говорят, у них там всё в шоколаде.

abcl - чуваки портировали стандарт на CL. Совсем недавно версия перемахнула через единицу и говорят уже не падает.

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

ccl - ещё один компилятор. В отличии от sbcl делается упор (ИМХО) на кроссплатформенность. Весьма живой проект.

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

abcl - чуваки портировали стандарт на JVM

фикс

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

ни развитую инфраструктуру, ни библиотеки, ни удобство разработки, ни высокую
продуктивность

/0\ Да ты хоть раз на нем писал вообще?

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

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

составы соста

А это что?

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

Так никто не «вбрасывал», с удовольствием узнаю ответ на поставленный вопрос, просто 80% комментов сводятся к флуду.

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

При том, что выбираю «в каком направлении копать».

Smalltalk уже освоил? :)

alienclaster ★★★
()

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

java/c#/php

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

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

просто 80% комментов сводятся к флуду.

В сравнимой с твоим постовым набросом степени :) По сабжу - чем тебе похапэ не понравился?

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

LISP и Haskell - местные мемы, которыми троллят нубов (а ты повелся, поздравляю). К real-world software engineering эти маргинальные языки отношения не имеют.

ЛОР со своими «специалистами» и «аналитиками» к real-world software engineering имеет ещё меньшее отношение.

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

К real-world software engineering эти маргинальные языки отношения не имеют.

дада, а real world haskell — это:

aptitude purge haskell
aptitude install openjdk-6.0
ymn ★★★★★
()
Ответ на: комментарий от yyk

ЛОР со своими «специалистами» и «аналитиками» к real-world software engineering имеет ещё меньшее отношение.

Хотел тоже написать что-то плохое про ЛОР, но зашел на Хабр и прочитал:

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

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

Вот же быдлятище.

anonymous
()

Хаскель - это матан. Коомон лисп - это быстрая разработка, и мало (относительно)батареек. Эрланг это многопоточные приложения.

А тебе нужно выбирать руби или clojure. Вообще чем ты хочешь заниматься? В какой нише программировать?

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

ados, Вы всё знаете. Скажите, мне нужно поставить брекпойнт на глобальную переменную (присваивание и связывание) В каких реализациях это можно сделать напрямую, и как это сделать средствами язык? Думал - не придумал. Тот же вопрос к хаскелистам и эрлангистам.

Вот мы и сравним эти языки на практике.

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

ados, Вы всё знаете.

Ага, ща. Это всего лишь эрудиция накопленная в скитаниях по миру CL. Я могу ошибаться и жду критики.

поставить брекпойнт

Э-э-э (error)?

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

Кстати, мне понравилось, что в Эрланге есть горячая замена. Кто в курсе, она там делается так же легко, как в Лиспе, или нет? Производительность тоже понравилась. Я только не понял, что значит «нет присваиваний». И ещё - есть ли там структуры или объекты?

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

В лиспворксе можно поставить брейкпоинт на некоторые точки кода кликом мыши, при достижении этих точек попадаем в дебаггер. В SLIME вроде тоже что-то подобное было, не помню. В языках типа С++ можно поставить «Data breakpoint», к-рый срабатывает при обращении к тому или иному адресу (в т.ч., к переменной, благо она не ползает по памяти). Недавно понадобилась аналогичная возможность в CL - и в лиспворксе не нашёл, как это сделать. Поскольку здесь тред о сравнении разных языков, хочу узнать о том, можно ли это сделать для Haskell и Erlang.

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

Был бы setf методом, к которому можно :after присобачить...

ados ★★★★★
()

Erlanfg VS Common Lisp VS Haskell

OCaml же.

легко найти работу с достойной оплатой

Если обладаешь PhD по Computer Science, твои шансы попасть пост-доком в INRIA повышаются на полпроцента. А если серьезно, то людей, владеющих какими-то из этих языков, скорее всего берут на работу не за знание языка.

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

есть ли там структуры

структуры данных или структуры а-ля си-стайл? если первое, то man «Purely Functional Data Structures» некоего Okasaki.

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

man Функциональное программирование.

Тогда уж «чисто функциональное», каковое для языка общего назначения является формой лицемерия. Языков без присваиваний не может быть, потому что если пользователь один раз ввёл информацию в stdin, эту информацию программа должна быть способна запомнить на длительное время. Вопрос лишь в том, в какую лицемерную форму они обертывают эти присваивания. В Хаскеле я знаю, что это называется «io» и ещё слово «монады» звучит.

структуры а-ля си-стайл?

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

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

Тогда уж «чисто функциональное», каковое для языка общего назначения является формой лицемерия. Языков без присваиваний не может быть, потому что если пользователь один раз ввёл информацию в stdin, эту информацию программа должна быть способна запомнить на длительное время. Вопрос лишь в том, в какую лицемерную форму они обертывают эти присваивания. В Хаскеле я знаю, что это называется «io» и ещё слово «монады» звучит.

Это лисп так деструктивно влияет на мозг?

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

мне нужно поставить брекпойнт на глобальную переменную (присваивание и связывание)

Ну какое, к чёрту, присваивание в хаскеле?

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

Языков без присваиваний не может быть

Брехня.

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

Сектанта в игнор на месяцок. Другие мнения будут? Например, я слыхал, что в хаскеле есть (мутабельные) хеш-таблицы. Можно ли поставить брекпойнт на доступ на запись в конкретную хеш-таблицу или при конкретном значении ключа в любую хеш-таблицу?

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

Сектанта в игнор на месяцок.

Хорошая мысль, так и сделаю.

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

если пользователь один раз ввёл информацию в stdin, эту информацию программа должна быть способна запомнить на длительное время

(let ((stdin (read-stdin))) (main stdin)) ссылка stdin далее может свободно передаваться как аргумент между функциями, зачем тут присваивание?

Вопрос лишь в том, в какую лицемерную форму они обертывают эти присваивания.

В форму TLS. В каждом процессе можно делать put(some_atom, SomeData) и get(some_atom).

Да, они

Там есть records:

Expr#Name{Field1=Expr1,...,FieldK=ExprK}

Expr should evaluate to a Name record. Returns a copy of this record, with the value of each specified field FieldI changed to the value of evaluating the corresponding expression ExprI. All other fields retain their old values.

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

Не обязательно всё извлекать из оригинала. Можно создать новую структуру из одного («изменяемого») поля и ссылки на старую (разделяемую) структуру. Или, например, чтобы в односвязном списке xs изменить n-ый элемент нужно скопировать n элементов в новый список ys, но хвост оставить общим (shared) между xs и ys. Функциональные/персистентные данные примерно так и работают.

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

Ну какое, к чёрту, присваивание в хаскеле?

Все функции вида (Monad m, Ref m r) => r a -> a -> m (), где m и r это IO/IORef, STM/TVar, ST s/STRef s и т.п.

Правда если написать

var :: IORef Int
var = unsafePerformIO $ newIORef 0
{-# NOINLINE var #-}

get :: IORef a -> IO a
get = readIORef

put :: IORef a -> a -> IO ()
put = writeIORef

main :: IO ()
main = forever $ (get var >>= print) >> (getLine >>= put var . read)

:b на var, put и get почему-то не работает как следует.

quasimoto ★★★★
()

Это разные языки, предназначенные для совершенно разных целей. Их надо знать все, даже если на работе применять потом в основном C++ и Java.

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

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