Реальна реалізація функціонального програмування? [зачинено]


9

Я намагаюся ознайомити себе з різними типами мов, щоб зрозуміти сфери, в яких кожна з них надзвичайно хороша. Поки що я взяв участь у мові C - процедурна мова, C ++ & java - статично накладені об'єктно-орієнтовані мови та groovy - динамічна типізована об'єктно-орієнтована мова.

Кожна мова програмування, ймовірно, почала відповідати потребі. І я припускаю, що кожна мова є надзвичайно хорошою принаймні однією справою, завдяки якій вона стає стандартом у певній галузі чи галузі. Як і C, C ++ стали стандартними в таких областях, як браузер або розробка ігор. Python у світі Linux за легку сценарійність, Java у корпоративному світі тощо.

Тепер мені цікаво вивчити функціональну мову програмування на кшталт Clojure чи Lisp. Отже, де функціональні мови програмування використовуються в реальних сценаріях? Я не думаю, що можна було б використовувати Clojure або Lisp для розробки програм або інтерфейсів. Тож про які проекти я повинен займатися, пройшовши основні навчальні посібники та навчальні ресурси, щоб отримати коротке розуміння щодо функціонального програмування? А ви настійно не рекомендуєте на одній мові конкретно, як, наприклад, clojure?


5
"І я припускаю, що кожна мова є надзвичайно хорошою принаймні однією справою, через яку вона стає стандартом у певній області чи галузі" Це взагалі не відповідає дійсності. Небезпечне припущення думати, що мови якимось чином "спеціалізовані". У кількох мовах є ніші, але це взагалі неправда.
S.Lott

6
"Я не з того, як і з чого почати". Що заважає вам почати з навчальних посібників? Чи можете ви пояснити, чому підручники з цих мов не корисні чи корисні?
С.Лотт

"C ++ & java" мають дуже-дуже мало спільного між собою.
DeadMG

Чи можу я сказати вам, що насправді заінтригувало вас навчитися Clojure чи Lisp, окрім причини, що вони слідують парадигмі функціонального програмування?
Maxood

3
Коли ви говорите "реальний час", ви маєте на увазі "реальний світ" випадково? Це могло б мати трохи більше сенсу в контексті цього питання.
sepp2k

Відповіді:


13

Ви кажете, що функціональне програмування в реальному світі, я думаю, Ерланг.

Erlang - мова програмування, яка використовується для створення масово масштабованих програмних програм у режимі реального часу з вимогами щодо високої доступності. Деякі його напрямки використання в телекомунікаціях, банківській справі, електронній комерції, комп'ютерній телефонії та обміну миттєвими повідомленнями.

http://www.erlang.org/


3
+1 Корректо! Крім того, я хотів би додати, що для початківців у функціональній землі "найчистішою" функціональною мовою навколо буде Haskell :)
yati sagade

5

Існує чудова серія лекцій про функціональне програмування університету Стенфорда. Ви можете перевірити їх на YouTube.

Я б радив вам розглянути схему, а не LISP. Схема - це модифікована версія Lisp з подальшими вдосконаленнями. Схему здебільшого використовують для навчальних та навчальних курсів. Це чудова мова, якщо ви любите займатися дослідженнями теоретичних обчислювальних технологій.

Заявки :

Google Inventor for Android використовує схему, де Kawa використовується для компіляції коду схеми до байт-кодів для віртуальної машини Java, що працює на пристроях Android. Elk Scheme використовується Synopsys як мова сценаріїв для своїх технологій CAD (TCAD).

FYI: Використання схеми


Цікаво, чи допоможе вам це питання: programmers.stackexchange.com/questions/25056/…
Maxood

1
І ось ця (безкоштовна та онлайн!) Книга LISP: gigamonkeys.com/book Вона охоплює "практичні" проекти, такі як аналізатор тегів ID3, веб-програмування та фільтрація спаму.
FrustratedWithFormsDesigner

5

Брайан О'Салліван, засновник mailrank.com (який був придбаний Facebook), створив всю серверну частину цього програмного забезпечення в Haskell. Він представив про це на Strange Loop 2011, відео та слайди доступні в Інтернеті.

Той же хлопець написав книгу під назвою Real World Haskell . Кілька людей згадували навчальні програми з програмування. Це може бути цілком відповідним вашим інтересам (мені також подобається пропозиція Ерланга).


4

Я знаю з друзів з фінансів, що кількісна торгова фірма Джейн Стріт використовує OCaml для реалізації своїх торгових стратегій. У них є сторінка, де вони розповідають про те, чому поряд із посиланнями на розмови з цього приводу.


2

Ось список поширених історій успіху Lisp:

http://wiki.alu.org/Industry%20Application

http://www.franz.com/success/

http://www.lispworks.com/success-stories/index.html

Хоча Common Lisp є лише частково функціональним (він також підтримує OOP і процедурні процедури, а також все, що ви хочете реалізувати, або з бібліотекою), це дуже прагматична мова і надзвичайно потужна в руках компетентного програміста. Я фактично використовую його для написання веб-додатків із чудовою рамкою RESTAS .

І комерційний проект пітона, над яким я зараз працюю, врешті-решт буде доповнений сервісами, написаними на lisp (RESTAS, як пропонує його ім'я, відмінно підходить для RESTful послуг).


1

Я б запропонував зануритися в компілятори (або для мов загального призначення, або для DSL) - саме тут функціональне програмування найкраще. Буде багато цікавого та корисного для вивчення, від ADT та узгодження зразків з одного боку спектра до макросів Lisp з іншого.


0

Ви можете поглянути на Юма .

З мови програмування Юм сторінки:

Юм (Unified Meta-Environment) вищого порядку - це сильно типізована, в основному функціональна мова, з інтегрованим набором інструментів для розробки, доведення та оцінки одночасних критично важливих для безпеки систем. Юм прагне розширити межі мовного дизайну для обмежених ресурсів систем, включаючи вбудовані в реальному часі та системи, що мають критичне значення для безпеки, шляхом впровадження нових рівнів абстрагування та доступності.

З сторінки Вікіпедії Юма :

Юм - функціональна мова програмування, розроблена в Університеті Сент-Ендрюс і Університету Еріот-Ватта в Шотландії, і названа на честь філософа 18 століття Девіда Хьюма. Він орієнтований на вбудовані системи в реальному часі, спрямовані на створення вкрай абстрактного дизайну, але все одно дозволять точно витягти витрати та час виконання простору, таким чином дозволяючи писати програми, які виконуватимуться при гарантованих обмежених часових і просторових обмеженнях.

Юм незвично поєднує ідеї функціонального програмування з ідеями з кінцевих державних автоматів . Автомати використовуються для структуризації програм, що передають інформацію, у ряд "коробок", де кожен ящик відображає входи до виходів чисто функціональним способом, використовуючи відповідність шаблонів на високому рівні. Це також незвично, будуючи структуру як низку рівнів, кожен з яких виявляє різні властивості машини, що є надзвичайно незвичним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.