LINUX.ORG.RU

Хочу написать вэб-приложение

 , , ,


0

1

Собственно, сабж. Никогда с вэбом не сталкивался, даже в архитектуре клиент-сервер ничего не писал, с БД не работал, HTML/CSS/Javascript/Php/ и т.п. не умею, опыта вообще ноль. Хочу - чтобы в браузере открывалась страничка с удаленного сервера, я ввожу текст в поле - идет запрос на сервер, и в другое поле выводится ответ или в третье рисуется графический примитив, допустим. через ajax какой-нибудь или что там еще. В перспективе развития - чтобы несколько человек зашло на страницу и при команде от любого ответы приходили всем. Собственно, вопрос - сейчас 100500 модных слов, технологий и фреймворков - что посоветуете для данной задачи? Какой сервер, и т.п. Особых наворотов не надо, платные компоненты также не хочется рассматривать.


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

Макры работают на этапе компиляции, т.е., как ты выразился, «время раскрытия другое»

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

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

Это означает, что если foo вызывает bar, а bar генерирует (а не бросает) исключение, то управление передается foo :-)

Не знаю как в общем, но в JS не так. Управление улетит в обработчик.

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

Это может дать что-то, только с точки зрения производительности.

Дело совершенно в другом :-) Ты когда-нибудь слышал что-либо о метапрограммировании? :-) Видимо, нет :-)

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

Не знаю как в общем, но в JS не так. Управление улетит в обработчик.

Правильно, который в вызывающей функции, расположенной где-то на стеке вызовов, что приведёт к раскрутке стека :-)

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

Если дело только в этом, ограничение компилтаймом тут только минус. Макросам именно это и вменяется, что это не первоклассные объекты языка. А наиболее мощная разновидность метапрограммирования — рефлексия, и макросы, как раз, в нее полноценно не могут. Это ограниченное метапрограммирования, когда рефлексия вроде и есть, но только в компилтайме. В этом смысле даже обычное ООП мощней, в смысле метапрограммирования

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

Еще раз: нет, стек не будет раскручиваться, он сброситься

Знать не знаю, чего ты там нафантазировал про какой-то «сброс стека» :-) Вот выдержка из книги Eloquent JavaScript (http://eloquentjavascript.net/1st_edition/chapter5.html): «Raising an exception somewhat resembles a super-charged return from a function ― it does not just jump out of the current function, but also out of its callers, all the way up to the top-level call that started the current execution. This is called unwinding the stack.» :-)

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

Если дело только в этом, ограничение компилтаймом тут только минус. Макросам именно это и вменяется, что это не первоклассные объекты языка. А наиболее мощная разновидность метапрограммирования — рефлексия, и макросы, как раз, в нее полноценно не могут. Это ограниченное метапрограммирования, когда рефлексия вроде и есть, но только в компилтайме.

Так в Лиспе есть и макры и отражение :-) А в JS макр (пока) нет, о чём и речь :-) Так что JS - это кастрированный Лисп :-) Лол :-)

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

Так в Лиспе есть и макры и отражение

отражение это интроспекция, не совсем из той оперы. Рефлексия есть, но ограничена компилтаймом, о том и речь.

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

Ты сам то читаешь, то что цитируешь?

it does not just jump out of the current function, but also out of its callers

тут как раз и написано об этом. Ты же утверждал, что исключение из bar передает управление в foo(вызывающую функцию)

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

тут как раз и написано об этом. Ты же утверждал, что исключение из bar передает управление в foo(вызывающую функцию)

Там написано про раскрутку стека, а не про какой-то сброс :-) Я говорил в чём разница между исключениями в JS и сигнальным протоколом Лисп :-) Кто не понял, тот поймёт :-)

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

не советую использовать википедию по серьезным вопросам, особенно русскую.

In computer science, reflection is the ability of a computer program to examine, introspect, and modify its own structure and behavior at runtime

Кстати, согласно этому определению [at runtime] в лиспе ее вообще нет.

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

точней есть, но ограниченно, только через eval/quote так же как и в JS, собственно

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

Кстати, согласно этому определению [at runtime] в лиспе ее вообще нет.

Ну о чём ещё с тобой говорить после такого? :-) Ты же даже не в курсе, что в любой Лисп программе компилятор полностью доступен в рантайме :-) Короче, иди учись и не позорься :-)

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

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

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

Там написано, что стек не раскручивается, а управление передается напрямую в обработчик

На прямую, на кривую, какая разница? :-) Обработчик, т.е. блок catch, располагается в функции :-) Если эта функция вызывает другую функцию, генерирующую исключение, то управление передаётся в catch вызывающей функции :-) Тут даже у школьника проблем с восприятием быть не должно :-)

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

Но тот код, который ты уже написал, и который скомпилирован, в рантайме недоступен, ты не можешь к нему обращаться напрямую

А зачем обращаться к коду, который написан? :-) Лол :-) В Лиспе во всем, что считано ридером, можно работать к с объектами первого класса :-)

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

ну так ведь ты не об этом говорил. Хорошо, идем дальше. Чем лисповская модель отличается от этой?

Я говорил об этом :-) Просто не знал, что тебе нужно жевать как птенцу, чтобы ты понял наконец :-) Насчёт Лиспа, я уже сказал :-) Времени на тебя истрачено много, так что дальше сам http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html :-)

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

Зачем и почему, это вопрос другой. Вопрос стоял в том, есть ли в лиспе полноценное метапрограммирование, основанное на рефлексии, или там оно ограничено препроцессингом.

В Лиспе во всем, что считано ридером, можно работать к с объектами первого класса

Сами макросы(и спецформы) не являются объектами первого класса(лексические окружения, кстати, тоже не являются — еще один фейл).

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

Я говорил об этом

Нет, я помню, что ты говорил:

если foo вызывает bar, а bar генерирует (а не бросает) исключение, то управление передается foo

filequest
()

PHP+mysql. Модное говно приходит и уходит, а LAMP будет всегда.

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

Вопрос стоял в том, есть ли в лиспе полноценное метапрограммирование, основанное на рефлексии, или там оно ограничено препроцессингом.

Нет, вопрос стоял в том, что в Лиспе есть макросы, которых в JS нет :-) В Лиспе нет препроцессинга, там есть read/eval на этапе компиляции :-) В JS этого и подавно нет :-)

Сами макросы(и спецформы) не являются объектами первого класса(лексические окружения, кстати, тоже не являются — еще один фейл).

Ну тогда всё вокруг - сплошной фейл :-) Или ты адепт тормозного Smalltalk или Tcl? :-)

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

Чо? В js нет eval?!? С каких это пор?!?!?!?!11111

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

я вижу, ты начинаешь соскакивать. Спрошу тогда напрямую. Как мне написать в лиспе во так:

(define spec-forms (list define set! and))
(define fu (lambda(form list-of-args) (apply(form list-of-args))))
(fu get-by-index(spec-forms) 2, (list false (never-evaluated))) ; --> false

Smalltalk или Tcl

смоллток и тикль действительно умеют в метапрограммирование, в отличие от. А я люблю Io, который умеет вообще все.

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

Спрошу тогда напрямую. Как мне написать в лиспе во так:

На Лиспе так не пишут :-) Лол :-)

смоллток и тикль действительно умеют в метапрограммирование, в отличие от. А я люблю Io, который умеет вообще все.

Хахаха :-) Он умеет вообще всё, но нигде даже не засветился :-)

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

То есть, когда ты говоришь с адекватными программистами, ты им лапшу на уши пытаешься навешать?

Не, адекватные программисты не льют в уши про какие-то сбрасывания стеков, знают про stack unwinding, и понимают что означает передача управления от вызываемой функции к вызывающей функции в контексте разговора об исключениях :-)

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

правильно, не пишут, потому что он не может так. О чем и речь была.

А так никому, кроме тебя и не надо писать :-) Но кому интересны твои фантазии, а? :-)

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

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

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

Кому что надо тут не обсуждалось. Это напрямую касается возможностей построения абстракций, которые в лиспе, естественно, уже, из-за этих костылей.

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

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

Т.е. ты заявляешь, что в коде

function bar()
{
  var i = 1;
  throw 1;
}

function foo()
{
  try {
    bar();
  } catch (e) {
    // ...
  }
}
стек не раскручивается, и функция bar() продолжает работу, переменная i жива, даже когда управление передаётся в блок catch(e) ? :-)

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

Это уже другой вопрос, это возврат. Это то что делает call/cc непосредственным образом. Этого нет в JS, но можно реализовать нечто подобное с помощью генераторов.

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

Это уже другой вопрос, это возврат.

Ясно, слив засчитан :-)

Это то что делает call/cc непосредственным образом.

Лол :-)

Этого нет в JS, но можно реализовать нечто подобное с помощью генераторов.

Костыли костылики :-) Это говорит тот, кто возмущался про костыли в Common Lisp :-) Хахаха :-)

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

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

Лол

Что не так? Ты, я смотрю, и лиспы то не знаешь ни хрена. Че же ты их тогда расхваливаешь, если не знаешь?

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

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

Так судя по твоим суждениями, это ты влез на забор и оттуда вещаешь :-)

Что не так? Ты, я смотрю, и лиспы то не знаешь ни хрена. Че же ты их тогда расхваливаешь, если не знаешь?

throw делает то, что call/cc делает непосредственно? :-) Раскручивание стека ты так и не понял, я смотрю? :-)

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

Да, то что делает throw можно реализовать с помощью call/cc, выйти из стека и обратно войти в него, в то место откуда вышел. То есть, если бы в CL был call/cc, в этих костылях бы не было особой необходимости, только в качестве декорации. Эти костыли могли бы быть реализованы на пользовательском уровне.

filequest
()

This

Golang!

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

Да, то что делает throw можно реализовать с помощью call/cc, выйти из стека и обратно войти в него, в то место откуда вышел.

Можно, но я привёл кусок кода на JS, где нет никакого call/cc, а есть лишь банальная раскрутка стека :-) И зачем ты приплёл call/cc, когда речь идёт о раскрутке стека в JS при генерации исключения не понятно :-) Блеснуть знаниями Схемы? :-) Ну блеснул, стек в JS от этого раскручиваться не перестал, ибо call/cc Схемы или сигнального протокола Common Lisp в JS нет :-)

anonymous
()

node.js бери, что бы не разбираться со всякими php.ini и изучить 1 язык, а не тучу.

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

Я третий, и последний раз повторяю, что раскрутки стека там нет.

Конечно нет :-) Всегда был, а теперь не стало, после того, как filequest на ЛОРе 3-й раз повторил :-) Хахаха :-)

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

foreach = function(f, d){
  if(d.length < 1) return; f(d[1]); foreach(f, d.slice(1))
}

show = function(data){if(data === 5) throw "FIN"; console.log(data)}

try{ foreach(show, [1, 2, 3, 4, 5, 6, 7, 8]) } catch(e){console.log(e)}

//>>>> 2
//>>>> 3
//>>>> 4
//>>>> FIN


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

Ты, я смотрю, и лиспы то не знаешь ни хрена

Никаких «лиспов» нет. Лисп один, Common Lisp.

Я третий, и последний раз повторяю, что раскрутки стека там нет.

Я последний раз повторяю, anonImous, *используй* *CL*.

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

Слишком заумная демонстрация раскрутки стека в JS :-) У меня намного проще выше по треду :-)

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