Могу ли я начать веб-разработку с функционального языка? - PullRequest
6 голосов
/ 03 декабря 2009

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

Итак, учитывая мой небольшой опыт веб-разработки, есть ли какой-нибудь функциональный язык / фреймворк, с которого стоит начать, для изучения веб-разработки ?

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

У меня довольно хороший опыт работы с C ++, Objective-C / Cocoa, знаком с Python.

EDIT: Многие люди предлагают F #. Но я бы с радостью (без обид за других) держался подальше от платформы .NET и других экосистем MS.

Ответы [ 10 ]

10 голосов
/ 03 декабря 2009

Вас может заинтересовать Ocsigen , веб-фреймворк для OCaml . OCaml - довольно хороший язык для изучения функционального программирования IMO. Он действительно сильно функционален, в отличие от Ruby или Python или любого другого императивного языка OO, люди будут пытаться продать вас как «способного выполнять функциональное программирование» (под этим они просто подразумевают, что он имеет первоклассные функции).

(Отказ от ответственности: я сам не очень много использовал Ocsigen, но я слышал хорошие вещи об этом. Это в моем списке дел.)

7 голосов
/ 03 декабря 2009

Вы можете выучить F # как ваш функциональный язык и ASP.NET MVC как ваш веб-фреймворк. Это дает вам доступ к инструментам и библиотекам в .NET Framework.

Я сделал первые шаги в веб-разработке с ASP.NET MVC, и мне было довольно просто начать с него.

И вы также можете взглянуть на F # Web Tools , как предположил Итовлсон.

4 голосов
/ 03 декабря 2009

Мне неизвестна веб-инфраструктура, которая на 100% функциональна с той же мощью, что и ASP MVC / DotNetNuke / Ruby Rails.

Scala (смешанный ОО и функциональный язык) имеет фреймворк под названием Lift, похожий на Rails.

3 голосов
/ 03 декабря 2009

Это немного нестандартно и не является строго функциональным языком, но вы можете рассмотреть erlang .

Erlang имеет довольно хороший фреймворк с именем Erlyweb и собственный веб-сервер с именем Yaws .

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

3 голосов
/ 03 декабря 2009

С Haskell, безусловно, можно использовать CGI для написания веб-приложений. См:

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

Я недавно поиграл с этим ... в общем, я чувствовал, что это не намного сложнее, чем использование нормального (статистически говоря) языка. Вот пример того, как может выглядеть код (следуя своего рода подходу MVC):

CGI.hs:

module CGITest.CGI where

import Network.CGI
import qualified CGITest.Views as V
import qualified CGITest.Data as D

cgiMain = runCGI (handleErrors (do
    rows <- liftIO D.getAllData
    output $ V.drawPage $ V.drawTable rows
    ))

Data.hs:

module CGITest.Data where

import qualified Data.Map as Map
import Database.HDBC
import Database.HDBC.Sqlite3

getAllData :: IO [Map.Map String SqlValue]
getAllData = do
    conn <- connectSqlite3 "C:\\Personal\\code\\Code\\Haskell\\CGITest\\test.db"
    statement <- prepare conn "SELECT * FROM Test"
    execute statement []
    rows <- fetchAllRowsMap statement
    return rows

Views.hs:

module CGITest.Views where

import qualified Data.Map as Map
import Data.Map ((!))
import Prelude hiding (div, id)
import Text.HTML.Light hiding (head)
import qualified Text.HTML.Light as H
import Text.XML.Light.Types (Content)
import Text.XML.Light

import Text.JSON
import Text.JSON.String

import Database.HDBC

tbody z e = Elem (Element (unqual "tbody") z e Nothing)
thead z e = Elem (Element (unqual "thead") z e Nothing)

drawPage x = renderXHTML xhtml_1_0_transitional $
    html [] [
        H.head [] [
            title [] [cdata "Testing Haskell CGI"]
        ],
        body [] [
            div [id "outer-container"] [
                div [id "inner-container"] x,
                cdata $ show testJ
            ]
        ]
    ]

drawRow columns =
    tr [class' "row"] [
        td [] [cdata $ fromSql $ columns ! "id"],
        td [] [cdata $ fromSql $ columns ! "name"]
    ]
    where
        tId = "row-" ++ (fromSql $ columns ! "id")

drawTable rows =
    [
        table [border "1"] [
            thead [] [
                tr [] [
                    th [] [cdata "ID"],
                    th [] [cdata "Name"]
                ]
            ],
            tbody [] $ map drawRow rows
        ]
    ]
2 голосов
/ 19 мая 2015

Йесод в Хаскеле прошёл 1.0.


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

2 голосов
/ 03 декабря 2009

SML-сервер - это плагин для Apache, который позволяет писать на стандартном ML, универсальном функциональном языке .

http://www.smlserver.org/

2 голосов
/ 03 декабря 2009
  • Ruby несколько функционален, поэтому вы можете использовать высоко оцененную платформу Rails (хотя сама она не особенно функциональна)
  • Я не уверен, как Seaside внутренне структурирован, но это может стоить посмотреть. (Ruby и Smalltalk - это ОО-языки, на которых можно выполнять функциональное программирование, а не функциональные языки.)
  • Вот обсуждение веб-фреймворков на Haskell .
0 голосов
/ 03 декабря 2009

Вероятно, вам стоит потратить некоторое время на освоение Приморья. Взгляните на учебники, которые написал Джеймс Фостер. Кажется, это веб-фреймворк самого высокого уровня с сообществом

0 голосов
/ 03 декабря 2009

И в течение долгого времени мне было очень любопытно на предмет функционального программирования, и где-то в моем сердце тайно верило, что чем выше вы поднимаетесь на уровень абстракции, тем больше у вас сил (скрытое предположение: функциональное программирование более абстрактно, чем процедурный).

Эта "более высокая степень абстракции", вероятно, будет применяться только к коду, который вы сами пишете. Многие фреймворки / инструменты имеют вспомогательные средства, такие как генерация кода для привязки данных пользовательского интерфейса или сопоставления базы данных. Этот сгенерированный код не будет работать.

Мне не известно о веб-фреймворке, который на 100% функционален с теми же функциями, что и ASP MVC / DotNetNuke / Ruby Rails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...