Что учиться? Lisp или OCaml или …? [закрытый]

Я знаю, что это старый, но вы можете посмотреть на http://phpthreadlib.sourceforge.net/

Он поддерживает двунаправленную связь между потоками, а также имеет встроенный средства защиты от уничтожения дочерних потоков (предотвращения сирот).

30
задан Mark Rushakoff 28 June 2009 в 23:20
поделиться

16 ответов

Как и вы, у меня за плечами более десятка языков. В поисках чего-то, с чем можно поиграть для написания кросс-компилятора, я наткнулся на ML и семью. Там много очень хороших идей, и они научили меня писать код совсем по-другому; например, мой JavaScript теперь имеет явно функциональную направленность.

После того, как некоторое время поигрался с OCaml под Windows (и разочаровался в проблемах со стабильностью), я наткнулся на F #, потомок OCaml. Эти два очень похожи (может кросс-компилировать большой объем кода), но OCaml, по-видимому, имеет действительно хорошую макросистему (P4) и классы типов (для поддержки написания "строго типизированных" операторов для универсальных типов), в то время как F # имеет отличная поддержка асинхронных и параллельных операций, монад, единиц измерения для числовых типов, а также более чистый объектно-ориентированный синтаксис и отличная интеграция с IDE (VS2008 и будет выпущен в комплекте с VS2010). Сейчас я предпочитаю F #, так как у меня есть доступ ко всей среде выполнения .NET и множеству сторонних библиотек. Фактически, сейчас я пишу большую часть своего одноразового и служебного кода на F #; для меня он в целом намного продуктивнее, чем C ++, JavaScript, C #, PowerShell или что-нибудь еще.

F # довольно хорошо работает под Mono в Linux, и у него там много последователей. Компилятор и среда выполнения будут с открытым исходным кодом, когда они станут стабильными (выпущены с VS2010), и разработчики считают поддержку Mono достаточно приоритетной, чтобы ее можно было серьезно рассмотреть для использования сторонними организациями.

Сейчас я пишу большую часть своего одноразового и служебного кода на F #; для меня он в целом намного продуктивнее, чем C ++, JavaScript, C #, PowerShell или что-нибудь еще.

F # довольно хорошо работает под Mono в Linux, и у него там много последователей. Компилятор и среда выполнения будут с открытым исходным кодом, когда они станут стабильными (выпущены с VS2010), и разработчики считают поддержку Mono достаточно приоритетной, чтобы ее можно было серьезно рассмотреть для использования сторонними организациями.

Сейчас я пишу большую часть своего одноразового и служебного кода на F #; для меня он в целом намного продуктивнее, чем C ++, JavaScript, C #, PowerShell или что-нибудь еще.

F # довольно хорошо работает под Mono в Linux, и у него там много последователей. Компилятор и среда выполнения будут с открытым исходным кодом, когда они станут стабильными (выпущены с VS2010), и разработчики считают поддержку Mono достаточно приоритетной, чтобы ее можно было серьезно рассмотреть для использования сторонними организациями.

0
ответ дан 27 November 2019 в 23:08
поделиться

Scala has been very good for making me see programming in a new light. I haven't used it for anything worklike yet, but it's still affected how I write code in other languages - not just Java, but PHP. I recently wrote a simple parser for a WordPress plugin, and the code is vastly more functional and immutable than it would have been six months ago, and better for it, despite the lack of enforcement in PHP.

The only other language to have affected the way I work so dramatically is Perl, nearly a decade earlier. Perl has contributed a lot to the way I pseudo-code, even if I never touch the language itself.

Many people compare the functional aspects of Scala to Haskell. You may even imagine that knowing Haskell means you already know all Scala could teach you, but I don't believe that. The way Scala combines OO and function has a way of making it seem like that's actually the truest form of both of them.

0
ответ дан 27 November 2019 в 23:08
поделиться

Из предложений, которые я видел до сих пор, мне нравится Lisp (см. Secko) и Smalltalk (см. brett), поскольку оба дадут вам другое представление о языках. Prolog тем более.

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

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

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

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

1
ответ дан 27 November 2019 в 23:08
поделиться

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

Perl также является HLL, как и Lisp, он интересен и увлекателен одновременно. Он происходит от C, так что вы можете подбирать его по ходу дела. Иногда это может быть сложно, и некоторые люди склонны теряться во время обучения, но это стоит знать.

Оба языка бесплатны и поставляются с Linux.

Ссылки

Lisp: Если Lisp настолько хорош , Введение и руководство по Common Lisp

Perl: PERL - Практическое извлечение и язык отчетов

Книги

О Лиспе - Великая книга Пола Грэма о языке Лисп. Это бесплатно, и вы можете скачать его здесь .

0
ответ дан 27 November 2019 в 23:08
поделиться

Если вы хотите использовать свои знания Java и функционального программирования и хотите изучить Лисп, попробуйте Clojure .

Реализация является бесплатной и кроссплатформенной, включая Linux, поскольку она работает на JVM. Будучи Lisp, он достаточно отличается (в полезных и замечательных аспектах) от большинства других языков, чтобы делать вещи интересными. Некоторые функции, такие как неизменяемые структуры данных, мультиметоды, поддержка метаданных, ориентация на безопасный параллелизм и т. Д., Довольно новы по сравнению с перечисленными вами языками. Clojure в значительной степени ориентирован на то, чтобы быть практическим и полезным языком, а не академическим. Это функциональный язык, но не «чистый», что, возможно, хорошо. Вы также можете тривиально использовать любую библиотеку Java из Clojure.

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

Список рассылки и канал IRC - очень дружелюбные и гостеприимные места, где можно задать вопросы. Официальный сайт, конечно же, тоже хороший ресурс.

Список рассылки и канал IRC - очень дружелюбные и гостеприимные места, где можно задать вопросы. Официальный сайт, конечно же, тоже хороший ресурс.

5
ответ дан 27 November 2019 в 23:08
поделиться

Взгляните на Smalltalk! Либо Cincom VWST, либо Smalltalk / X - не беспокойтесь о Squeak, интерфейс ужасный). VAST тоже хорош, но на самом деле ориентирован только на Windows. И не беспокойтесь о скептиках, которые презирают Smalltalk - они не используют его и застряли в трясине языков цикла редактирования-запуска-отладки и множества связанных библиотек диспетчеризации. : -)

Почему эти Smalltalks - ну, они идут в комплекте с отличной IDE, встроенными инструментами графического интерфейса, лучшим отладчиком, который вы когда-либо видели, онлайн-справкой и полностью независимы от базовой ОС. Например, программирование ST / X, работающее под Linux, может быть перенесено (исходный код) в Windows ST / X, и оно должно выполняться.

ST / X бесплатен только с очень незначительными лицензионными ограничениями, Cincom предлагает бесплатный NC (не коммерческий ) версия, которая НЕ ограничена. Я использую ST / X, так как предпочитаю внешний вид по умолчанию это предлагает. Их интерфейсы IDE очень похожи.

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

Smalltalk нелегко освоить, и он не идеален (какой язык?), Но очень приятен для изучения и использования. И теперь, когда оборудование и операционные системы наконец-то соответствуют потребностям Smalltalks. очень эффективный.

5
ответ дан 27 November 2019 в 23:08
поделиться

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

В противном случае язык из семейства Lisp может сильно отличаться от того, что вы уже знаете. В этом отношении я бы рекомендовал Scheme , который, на мой взгляд, более элегантен, чем Common Lisp. Новая концепция, которая может вас заинтересовать в Scheme, - это продолжения .

Если вы выберете путь Scheme, найдите время, чтобы посмотреть эти видео из 1986 года. Они потрясающие.

5
ответ дан 27 November 2019 в 23:08
поделиться

Я вторая рекомендация Common Lisp Райнера.

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

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

4
ответ дан 27 November 2019 в 23:08
поделиться

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

Составители:
http://gcc.gnu.org/wiki/GFortranBinaries
http : //www.g95.org/
http://www.fortran.com/compilers.html
http://www.thefreecountry.com/compilers/fortran.shtml

IDE:
http://www.eclipse.org/photran/
http://force.lepsch.com/ (только FORTRAN 77)

Учебники:
Введение в современный FORTRAN: http://www-uxsup.csx.cam.ac.uk/courses/Fortran/[12128estiveFORTRAN 90 Tutorial: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES /fortran.html

Вы также можете изучить Visual Basic.NET, на случай, если вам когда-нибудь придется это поддерживать. Очевидно, у mono есть рабочая реализация для Linux: http://www.mono-project.com/Visual_Basic

1
ответ дан 27 November 2019 в 23:08
поделиться

Ни Lisp, ни OCaml не слишком далеки от того, что вы уже знаете. Вот четыре предложения, выбранных частично для внутреннего интереса, а частично для расширения вашего кругозора.

  • Язык логического программирования, возможно, Prolog. Я не нашел хороших материалов в Интернете, но книга Стерлинга и Шапиро The Art of Prolog превосходна. Более простой учебник Клоксина и Меллиша также хорош. Основной интерес представляет программирование с помощью отношений, а не функций .

  • чистый объектно-ориентированный язык либо Smalltalk или Самостоятельная . Если вы использовали только гибридные объектно-ориентированные языки, вы будете поражены, насколько красивой может быть чистая объектная ориентация. Я связался с реализацией Smalltalk Squeak . Я лично рекомендовал бы изучить Smalltalk перед тем, как заняться Self; есть очень большое и активное сообщество, и программное обеспечение хорошо разработано. Self стоит на плечах Smalltalk и представляет собой еще более вдохновляющий дизайн, но сообщество намного меньше. Тем, у кого есть доступ к цифровой библиотеке ACM, я рекомендую отличный доклад Дэйва Ангара на HOPL-III ; статья также довольно хороша.

  • В языке программирования Icon есть две замечательные вещи; мощная и необычная модель оценки с неявным возвратом, и расширяемая пользователем модель обработки строк, которая превосходит все регулярные выражения . С сожалением должен сказать, что Icon никогда не отставал от времени, и из всех моих рекомендаций это наименее практично. На самом деле я боюсь, что язык умирает. Но он растянет ваш разум почти так же, как Haskell, и в совершенно разных направлениях. Icon по-прежнему очень полезен для задач обработки строк небольшого размера.

    Вы можете прочитать об обработке строк Icon в статье Ральфа Грисволда из Computer Journal .

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

    Веб-сайт HOPL-III также содержит отличный доклад и о Lua.

27
ответ дан 27 November 2019 в 23:08
поделиться

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

3
ответ дан 27 November 2019 в 23:08
поделиться

C # имеет бесплатную реализацию в Linux в рамках проекта Mono , и, возможно, это очень востребованный навык, если вы не полностью настроены против Microsoft.

Мой любимый Книга C # - это Pro C # 2008 и платформа .NET 3.5, четвертое издание.

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

http://msdn.microsoft.com/en-us/fsharp/default.aspx

Книги по F #:
http://www.amazon.com/s/ ref = nb_ss_gw? url = search-alias% 3Daps & field-keywords = f% 23

2
ответ дан 27 November 2019 в 23:08
поделиться

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

8
ответ дан 27 November 2019 в 23:08
поделиться

И Common Lisp, и Ocaml, безусловно, полезны учиться. Если вы уже знакомы с Haskell, CL может быть более другим опытом.

SBCL и Clozure CL являются очень полезными реализациями Common Lisp в Linux. (Обзор различных реализаций: Обзор Common Lisp .)

В качестве отправной точки я бы рекомендовал использовать отличную книгу Питера Зейбела Practical Common Lisp , которая доступна в Интернете и в печатном виде. .

Указатели сообщества находятся здесь: CLIKI .

25
ответ дан 27 November 2019 в 23:08
поделиться

Пролог может быть тем, что вы ищете.

Править

Первый комментатор прав, мой ответ был довольно коротким и не очень полезным, поэтому:

Моя предпочтительная реализация это SWI-Prolog. Я лично научился программированию на Прологе для искусственного интеллекта. Его стиль довольно ясен, и он содержит множество примеров, но у меня нет другой книги по логическому программированию (правда, жаль :), поэтому у меня нет оснований для сравнения.

9
ответ дан 27 November 2019 в 23:08
поделиться

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

Ada очень практична - есть компилятор, основанный на gcc, - но он также сильно отличается от других императивных языков, которые вы знаете. Я нахожу систему типов немного удушающей, но о ней стоило кое-что узнать.

1
ответ дан 27 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: