LINUX.ORG.RU

Посоветуйте язык для web'a


0

0

Ни бум-бум, но хоцца :)
Как я понимаю, нужна разметка страницы (html) и скриптовый язык (СЯ). Если с html более-менее понятно, то с СЯ - вопрос ? Какими свойствами он должен
обладать ? (Приходит на ум тока скорость). Ну в общем посоветуйте, желательно
с ссылками.

P.S.
Жабу, наверное, не надо )


питон же. помимо django есть pylons. счас вот право не для веб рассматриваю. да и вообще? я только учусь >_>

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

>Синтаксис - это детали/мелочь. 95% работы не упирается в скорость набора кода.

Ну так ты это md5xxx1 объясни.

Waterlaz ★★★★★
()

Помнится, кто-то мне очень рекламировал C++. С фреймворком, ЕМНИМЭ, под названием «Wt». Попробовать - так и не попробовал.

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

Боже, какой кошмар.

Ну так весь веб - такой вот кошмар. По мне так лучше писать веб-приложения в едином стиле, а не городить помесь HTML с каким нибудь C (как PHP). Не очень удобно использовать императивные ЯП для веба. Функциональные и декларативные гораздо больше подходят. Вот для сравнения код на PHP (взято с http://www.w3schools.com/PHP/php_db_odbc.asp) и dbPager, делающий одно и то же:

<html>
<body>
<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
  {exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
  {exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
  {
  $compname=odbc_result($rs,"CompanyName");
  $conname=odbc_result($rs,"ContactName");
  echo "<tr><td>$compname</td>";
  echo "<td>$conname</td></tr>";
  }
odbc_close($conn);
echo "</table>";
?>
</body>
</html>

<html>
  <body>
    <odbc:database dsn="northwind">
      <table><tr><th>Companyname</th><th>Contactname</th></tr>
      <odbc:query statement="SELECT * FROM customers">
        <tr><td>{$compname}</td>
            <td>{$conname}</td></tr>
      </odbc:query>
      </table>
    </odbc:database>
  </body>
</html>

IMHO, второй вариант гораздо нагляднее и проще.

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

Не только для «хелловорда». Единственная проблема с башем - сложные скрипты притормаживают. Но в этом случае можно использовать С.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от thevery

> это вы типа решили переизобрести JSTL на паскале?

Кстати, довольно похоже на JSTL. Не знал о таком проекте, ибо не сильно интересуюсь Java :) В любом случае, на http://www.jcp.org/en/jsr/detail?id=52 указано, что первые спецификации JSTL были выпущены публично в 2002 году. Прототип dbPager был выпущен еще в 1999, правда синтаксис языка тогда был не на тэгах, а на отступах. Было даже лучше, более лаконично. Но народ как то не очень воспринял отступы (странно, что позже, в питоне, отступы уже не смущали). В 2002 году был открыт проект на Sourceforge и я начал изучать C++, чтобы переписать паскалевский прототип на чем-то более современном и вот переписал.

В любом случае, пусть растут все цветы. Если одна и та же идея пришла в голову и разработчикам JSTL и мне, значит она не такая дурная :)

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

>В любом случае, пусть растут все цветы. Если одна и та же идея пришла в голову и разработчикам JSTL и мне, значит она не такая дурная :)

просто устарела почти на 8 лет, чоуж

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

> и тот, и другой код - говно, ибо не MVC

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

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

>ГовноКод был дан исключительно для примера.

fixed :))

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

Ложь не перестаёт быть ложью, если в неё верят миллионы. (c) Л.Н.Толстой

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

>Сомнительно по поводу скорости

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

Можно поподробнее.

Сам не смог нагуглить :(

Но точно знаю что оно есть.

Те же инструкции <??> как и в php, только код на C (а может и на C++, давно это было и точно не помню). Конвертируется в обычный C код, потом компилируется.

Помнится слышал я про интерпретатор C

Причём тут вообще интерпретатор?

PS Мне это средство не сильно понравилось.

SV0L0CH
()

Есчё есть смысл обратить внимание на Parser3, удобное и самодостаточное средство.

Не понятно только почему мало популярно.

И я не видел ни одного редактора с поддержкой его синтаксиса.

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

А что они в js-kit кстати используют?

erlang и ocaml. по поводу хаппса могу познакомить с человеком, который его использует (использовал) в продакшене. может много интересного рассказать :)

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

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

Дело не в бинарнике а в CGI.

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

Те же инструкции <??> как и в php, только код на C (а может и на C++, давно это было и точно не помню). Конвертируется в обычный C код, потом компилируется.

Неужели не проще сделать отдельно CGI на С, и включать его вывод в HTML, например, как SSI, или же при помощи JS-запросов?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от dennis_pro

Ну так весь веб - такой вот кошмар. По мне так лучше писать веб-приложения в едином стиле, а не городить помесь HTML с каким нибудь C (как PHP).

Что лучше: писать

<?xml version="1.0" encoding="utf-8"?>

<dbp:module
    xmlns:dbp="http://dbpager.org.ru/schemas/dbp/3.0"
    xmlns:usr="http://dbpager.org.ru/schemas/dbp/3.0/custom"
>

<dbp:tag name="sing">
    {$number} bottles of beer on the wall, {$number} bottles of beer.{$crlf}
    Take one down, pass it around, {$number - 1} bottles of beer on the wall.{$crlf}{$crlf}
    <dbp:switch test="{($number - 1) = 0}">
        <dbp:case match="1">
            Go to the store and buy some more,{$crlf}
            99 bottles of beer on the wall.{$crlf}
        </dbp:case>
        <dbp:case match="0">
            <usr:sing number="{$number - 1}"/>
        </dbp:case>
    </dbp:switch>
</dbp:tag>

<dbp:var name="crlf" value="{byte(13)}{byte(10)}">
    <usr:sing number="99"/>
</dbp:var>

</dbp:module>

Или, например, так:

import dbPager
import dbPager.custom
text crlf = "{byte(13)}{byte(10)}"
tag sing(int number) {
    "{$number} bottles of beer on the wall, {$number} bottles of beer.{$crlf}
    Take one down, pass it around, {$number - 1} bottles of beer on the wall.{$crlf}{$crlf}"
    if (number == 1) {
        "Go to the store and buy some more,{$crlf}
         99 bottles of beer on the wall.{$crlf}"
    } else {
        sing(number-1)
    }
}
main = sing(99)

Я уж молчу про динамическую область видимости в твоём коде, это вообще **здец.

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

А вместо такого:

<html> 
  <body> 
    <odbc:database dsn="northwind"> 
      <table><tr><th>Companyname</th><th>Contactname</th></tr> 
      <odbc:query statement="SELECT * FROM customers"> 
        <tr><td>{$compname}</td> 
            <td>{$conname}</td></tr> 
      </odbc:query> 
      </table> 
    </odbc:database> 
  </body> 
</html>
лучше уж писать что-нибудь вроде
database dsb = odbc("northwind)
answer q = query dsb "SELECT * FROM customers"
html $ body $ table $ tr [th "Companyname", th "ContactName"] : fmap (\a -> tr [td (compname a), td (conname a)]) answer
или так
database dsb = odbc("northwind)
answer q = query dsb "SELECT * FROM customers"
template companies = getTemplate "companies"
runTemplate companies answer

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

У каждого варианта есть свои плюсы и минусы.

XML многословен, но программу на нём можно, например, валидировать на корректность синтаксиса по схеме стороними инструментами. Можно преобразовать с помощью XSLT в другой формат, в тот-же вышеупомянутый JSTL или в любой другой. Имеется куча удобных редакторов с подсветкой :D, которые проставят все «лишнее», по схеме за тебя, предоставят автодополнение и т.д. И наконец самое главное: XML не пугает web-программистов :)

Второй вариант немного компактнее, но синтаксис его в значительной мере отличается от привычного web-программисту языка разметки. Т.е. вместо того, чтобы сразу сесть и писать, подглядывая в мануал значение десятка спец. тегов, придется выучить по сути новый язык. Т.е. порог вхождения гораздо больше. При этом лучше сразу взяться за какой нибудь мейнстрим язык.

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

@sing
  {$number} bottles of beer on the wall, {$number} bottles of beer.{$crlf}
  Take one down, pass it around, {$number - 1} bottles of beer on the wall.{$crlf}{$crlf}
  switch {($number - 1) = 0}
    case 1
      Go to the store and buy some more,{$crlf}
      99 bottles of beer on the wall.{$crlf}
    case 0
      sing({$number - 1})
 
var crlf={byte(13)}{byte(10)}
  sing(99)

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

Я уж молчу про динамическую область видимости в твоём коде, это вообще **здец

А что с этим не так? Это ж как в LISP'е ;)

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

Ещё чуть-чуть, и первый вариант будет 100% AST. В общем так и просится DSL/eDSL куда-нибудь. Хотя я уже повторяюсь, я уже это где-то писал.

Первый вариант - не для людей. Как и конфиги в xml.

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

программу на нём можно, например, валидировать на корректность синтаксиса по схеме стороними инструментами.

Интересно, зачем?

Имеется куча удобных редакторов с подсветкой :D, которые проставят все «лишнее», по схеме за тебя

Ну да, write-only мы все горазды изобретать. Программы, как известно, в первую очередь пишутся для чтения людьми.

но этому языку нужно учиться, что, видимо, не всех устраивает

ЛЮБОМУ языку нужно учиться. Синтаксис изучается за пять минут, вопрос в семантике.

А что с этим не так? Это ж как в LISP'е

1) В Common Lisp'е принята лексическая видимость. Динамическая тоже есть, но организуется специфическими конструкциями. В Emacs Lisp'е - да, там динамическая, ну дык это один из самых отстойных лиспов, какие есть (AutoLISP может поспорить).

2) Не всё, что сделано в Лиспе - хорошо. Я бы сказал даже так: мало что в Лиспе сделано хорошо.

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

> Интересно, зачем?

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

write-only мы все горазды изобретать

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

Не всё, что сделано в Лиспе - хорошо. Я бы сказал даже так: мало что в Лиспе сделано хорошо

Расскажи, пожалуйста, чем конкретно плоха динамическая видимость. Мне это показалось удобным; возможно я просто не вижу каких-то серьезных связанных с этим проблем в будущем. Что из того, что в Лиспе сделано, по-твоему хорошо? Я все хорошее себе добавлю :)

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

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

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

Miguel ★★★★★
()

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

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

>>> Синтаксис - это детали/мелочь. 95% работы не упирается в скорость набора кода.

+1 Просто отвечал троллю в его стиле.


Здесь вы оба неправы. Чем проще и понятнее читать/писать код, тем больше ментальный усилий тратится на суть работы, + меньше ошибок.


Из этого утверждения следет, что самый простой и лучший в мире язык - Lisp.

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

>Неужели не проще сделать отдельно CGI на С, и включать его вывод в HTML, например, как SSI, или же при помощи JS-запросов?

Лично мне именно так проще.

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

Чисто так, чтобы такие люди как вы не забывали:
XML - машинный язык разметки, не предназначенный для чтения и составления человеком. Это говорю не только я.
Засмеют твой XML в более или менее образованных кругах, лучше дропни быстрей.

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

Знаю пару сайтов с такими модулями...
ЛОР'овцы, не хватит ли уже троллить?
Прикладники говорят - Си! Плюсы! А на них нет ни единого вебфреймворка, который стоил бы внимания.
Системники говорят - Асм! На котором это практически не реально.
Тролли говорят - Лисп! Схема! На которых кодить ад, да и ситуация не лучше чем с Си.
Когдатосвязывающиесясвеб говорят - ПХП! Который безоговорочно проигрывает пайтону и руби, на которых в разы легче, быстрее и удобнее кодить при том что фреймворков больше и они лучше
Веб-кодеры только нормальное советуют - Пайтон, Руби. На них сейчас всё и делают! Они популярнее всех в веб-деве. На них есть самые лучшие веб-фреймворки, которые только создавались: Pylons, Django, GAE, RoR.

Здесь никто не любиттроллей, но каждый, каааждый человек троллит описывая как он будет делать свой ORM и свой веб-сервер...
Мб хватит?

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

>XML - машинный язык разметки, не предназначенный для чтения и составления человеком. Это говорю не только я. Засмеют твой XML в более или менее образованных кругах, лучше дропни быстрей.

Лутше намекни лисперам что S-выражения абсолютно не годятся для правки и чтения и что изза этого над ними смеются в образованых кругах (интересно, кем образованых и каких таких кругах?) ;)

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

>Тролли говорят - Лисп! Схема! На которых кодить ад, да и ситуация не лучше чем с Си.

И много ты на Лиспе накодил, чтобы позволять себе такие высказывания?

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

Я на счёт лисперов лучше промолчу, все всё и так знают.
А «образованный круг» - круг специалистов, которые окончили ВУЗы по специальностям вроде «программист», которые в запасе имеют не только лисп, но и си, cpp, c#, d, js, html.

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

Анонимус король логики?
Если на лиспе кодить - ад, то с чего я должен на нём «много» кодить?

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

>каааждый человек троллит описывая как он будет делать свой ORM и свой веб-сервер...

Мб хватит?

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

А если это не нравится, то что вообще делать на ЛОРе?

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

>Я на счёт лисперов лучше промолчу, все всё и так знают.

S-expressions достаточно удобны. Как минимум не надо ломать голову, как в этом новом языке натянули эту семантику на Си подобный синтаксис? Да и с макросами проде как проще.

ЗЫ вот как можно тебе нормально отвечать, когда такое желание трахнуть твою аватару?

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

>А «образованный круг» - круг специалистов, которые окончили ВУЗы по специальностям вроде «программист»

Понятно, дипломированые кодеры... на них нормальные люди смотрят как на УГ, ибо не секрет какой сейчас «высшее образование».

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

>Этот тред создавался с целью подобрать подходящий инструментарий для новичка
... веб-кодера

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

Не об это просили ведь. Просили инструмент для новичка веб-кодера.
Если просят подсказать лучший для новичка инструмент для управления, скажем, mpd, все тоже буду называть telnet, mpc, дв?

Мне одному кажется что в данном треде

каждый упоминает тот инструмент, по которому готов дать консультацию

не есть верно?

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

Я говорю про конкретные детали лиспа, я говорю про лисп как о совокупности всех его деталей, процесса программирования на нём и степени его развития относительно других языков.

PS: Не сметь на неё фапать! Сначала сохрани, открой в feh и только потом делай свои дела -_-

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

>Прикладники говорят - Си! Плюсы! А на них нет ни единого вебфреймворка, который стоил бы внимания.

можно написать свой фреймворк, с блекджеком и проститутками :)

Системники говорят - Асм! На котором это практически не реально.

Вполне реально. Только писать долго и некроссплатформенно

Да и чем принципиально отличается веб-кодинг на, скажем ПХП от С? Синтаксис похож, почти все используемые библиотеки написаны на Си, ПХП предоставляет только обертки для сишных функций. Что кроме устоявшихся традиций мешает писать под веб на С? Наличие большего количества мозгов нужно, это да. Вообще, сфера веб-программирования сильно оккупирована быдлокодерами. Для них изобретают всякие быдло-языки, в которых нет указателей, чтобы они, не дай Бог, мозг себе не сломали :)

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