Я могу запустить веб-разработку с функционального языка?

Если Вы действительно не хотите, чтобы Ваше перечисление появилось в Вашем заголовочном файле И гарантировало, что только используется закрытыми методами, то одно решение может состоять в том, чтобы пойти с pimpl принципом.

Это - техника, которые удостоверяются для сокрытия внутренностей класса в заголовках, просто объявив:

class A 
{
public:
    ...
private:
    void* pImpl;
};

Тогда в Вашем файле реализации (cpp), Вы объявляете класс, который будет представлением внутренностей.

class AImpl
{
public:
    AImpl(A* pThis): m_pThis(pThis) {}

    ... all private methods here ...
private:
    A* m_pThis;
};

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

((AImpl*)pImpl)->PrivateMethod();

существуют профессионалы для использования pimpl, каждый - то, что оно разъединяет Ваш заголовок класса от своей реализации, никакая потребность перекомпилировать другие классы при изменении одной реализации класса. Другой, это, ускоряет Ваше время компиляции, потому что Ваши заголовки так просты.

, Но это - боль для использования, таким образом, необходимо действительно спросить себя, просто объявление Вашего перечисления как частное в заголовке является так очень проблемой.

6
задан ivanTheTerrible 2 December 2009 в 21:24
поделиться

9 ответов

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

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

10
ответ дан 8 December 2019 в 02:52
поделиться

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

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

7
ответ дан 8 December 2019 в 02:52
поделиться

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

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

4
ответ дан 8 December 2019 в 02:52
поделиться

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

Erlang имеет довольно хорошую структуру под названием Erlyweb и его собственный веб-сервер под названием Yaws .

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

3
ответ дан 8 December 2019 в 02:52
поделиться

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

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

I недавно поигрался с этим ... в целом я почувствовал, что это не намного сложнее, чем использовать нормальный (статистически говоря) язык. Вот пример того, как может выглядеть код (в соответствии с своего рода подходом 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
        ]
    ]
3
ответ дан 8 December 2019 в 02:52
поделиться
  • Ruby в некоторой степени функциональный, поэтому вы можете использовать высоко оцененный фреймворк Rails (хотя он сам по себе не особо функциональный)
  • Я не уверен, как Seaside имеет внутреннюю структуру, но, возможно, стоит посмотреть. (Ruby и Smalltalk - это объектно-ориентированные языки, на которых можно выполнять функциональное программирование, а не в основном функциональные языки.)
  • Вот обсуждение веб-фреймворков Haskell .
2
ответ дан 8 December 2019 в 02:52
поделиться

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

http://www.smlserver.org /

2
ответ дан 8 December 2019 в 02:52
поделиться

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

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

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

0
ответ дан 8 December 2019 в 02:52
поделиться

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

-1
ответ дан 8 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

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