LINUX.ORG.RU

интерпретируемые языки


0

0

Требуется консуьтация по сабж. Сам пишу на С и кроме программирования в bash с интерпретируемыми языками не сталкивался. Вот нужно изучить что-нить из perl, python, lisp, php ... ещё что-то... и т.д. для :
1. Замены тяжелому и тормознутому MatLab'у. Т.Е. нужны мат. вычисления (матрицы, ЦОС и т.д.), быстрого построения графиков... Эт может и не входить в сам язык, а цепляться как модули.
2. ВсЁтаки важна скорость исполнения - желательно наиболее быстрый.
3. Гибкое взаимодействие с ОС - процессы, потоки, IPC, ФС.....
4. Сетевого, WEB - программирования...
5. Быстрого клепания GUI - иногда нужно, а лезть в дебри не охото...)))

Понятно, что все это можно на С сделать...) Но для не критичных по скорости приложений - не лениво заморачиваться!

Что выбрать ???

Ответ на: комментарий от ero-sennin

> Нет в жабе ничего хорошего, НЕ-ТУ. И дураки все, кто ее использует. ДУ-РА-КИ.

> А что, кто-то сомневался?

Ну так и что использовать ??? ИМХО питоны, перлы и т.п. ещё хуже...

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

> Можно примерчик или ткните носом, где есть примеры применения lisp'a в графике, гуях, сетях и т.д.

Так всё там-же: www.cliki.net

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

> Посмотрел жабу, сложилось первое (может обманчивое?) впечатление, что это какой-то кастрированный C++.

Это только первое впечатление.


> Чем жаба облегчит разработку гуёв, сетевых приложений и пр. по сравнению с C++ ??? Только наличием большого числа готовых либ, классовб, большей высокоуровневостью ?

Да, да, да, и ещё высокой безопасностью. Там нет опасных кастов C++, ручной подчистки выделенной памяти и вообще никаких операций с памятью. Нет препроцессора, в том числе и #include-ов.


> Так это недостаток, а не достоинство.

Смотря что понимать под "С++-подобностью". Если раздражает сам синтаксис, похожий на С++, ну что тогда возразишь... Почему недостаток-то?


> Да. Но хотелось бы самого скоростного из тормозов...

Ну тебе же уже говорили, что жаба как раз самая быстрая из всех тормозов.

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

> Нет в жабе ничего хорошего, НЕ-ТУ.

> Ну почему же? C++ подобныая, с большим кол-вом готовых либ, скоростнее питонов и перлов - ИМХО не так уж и плохо...

У Python тоже до фига либ, насчет скорости - вопрос оочень спорный. Правда, Python на C++ не похож, но его синтаксис изучается за 15 минут.

> ИМХО питоны, перлы и т.п. ещё хуже...

Чем же? И зачем ты спрашиваешь, если уже всё знаешь?

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

> но его синтаксис изучается за 15 минут

Я б это к достоинствам не относил :)

>> ИМХО питоны, перлы и т.п. ещё хуже... > Чем же? И зачем ты спрашиваешь, если уже всё знаешь?

Не лучше... :)

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

>> но его синтаксис изучается за 15 минут

> Я б это к достоинствам не относил :)

8-O

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

Ты бы всё-таки отвечал в несколько писем, или хоть помечал, кому отвечаешь. А то я вижу ответ мне на то, что я не писал...

>> Так это недостаток, а не достоинство.

> Смотря что понимать под "С++-подобностью". Если раздражает сам синтаксис, похожий на С++, ну что тогда возразишь... Почему недостаток-то?

Раздражать - не раздражает, но всё же вещь переусложнённая. Процитирую http://www.pcmag.ru/archive/9705s/05s979.asp:

> В несколько упрощенном виде формулировка из стандарта выглядит так: "выражение, содержащее в качестве своего самого левого подвыражения явное преобразование типа, которое записано в функциональном стиле, может было неотличимо от объявления, в котором первый декларатор начнается с левой круглой скобки". Классический пример: что такое T(a); если T - некоторый тип? С одной стороны, это как бы объявление переменной с именем a, тип которой задан как T. С другой - конструкцию можно трактовать как преобразование типа уже объявленной где-то ранее переменной a к типу T.

> ...

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

Ну, и так далее. В общем, Yacc-ом они там не справились. А ведь чем проще грамматика, тем легче её читать.

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

> А ведь чем проще грамматика, тем легче её читать.

RPN? brainfuck? whitespace? :D

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

>Ну, и так далее. В общем, Yacc-ом они там не справились. А ведь чем проще грамматика, тем легче её читать.

Это описание - правило разбора, оно расчитано на все случаи жизни. Оно в C++ действительно весьма сложное. Обычно все гораздо проще. Не все ведь используют функторы, "оператор," и прочие прелести жизни.

>А ведь чем проще грамматика, тем легче её читать.

Читаешь всеравно не грамматику, скорее примерный смысл(особенно, если все работает =))) ).

Насчет вычислений на java ни чего не скажу, не интересовался. По остальным пунктам весьма подходит. imho.

Imho удобнее жава(чем плюсы) скорее не языком, а платформой и всякими сопутствующими вещами. Не нужно перекомпилировать на разных платформах, не нужно переть нестандартные(их просто в стандарт зашили =) ) либы для кросплатформенного GUI(gtk for windows), нету проблеммы с разным манглингом компиляторов и т.д..

Imho java - порезанный C++ с отполированной платформой.

YesSSS ★★★
()

Отвечу по LISP в пункте GUI.

Для LISP есть CLIM/MCCLIM. Это очень высокоуровневый набор, который написан на самом же Common Lisp. Для отрисовки имеет несколько бэкэндов. CLX, PostScript, скоро будет GTK. CLX -- это реализация (не биндинг к xlib!) X-протокола на Common Lisp, а не тулкит.

Но для проектов я рекомендую воспользоваться не MCCLIM, а LTK. Это порт Tk для LISP. Есть под большое число платформ и разных реализаций Common Lisp. Общение с тулкитом происходит через сокеты без привлечения UFFI/CFFI. Я проверял его работу в SBCL и CLISP. Работает на ура!

Еще есть порт GTK+ 2.0 под названием lambda-gtk (ищи на cliki.net). Тоже работает без проблем, но возможность его использования на разных платформах и реализациях LISP ограничена, так как он пока использует CFFI. У меня он отлично работает на SBCL.

Если у кого есть чего дополнить, пишите.

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

Если захочешь проверить LTK, то вот тебе краткий способ это сделать. Ставишь CLISP или SBCL. Скачиваешь ltk-0.90 (текущая версия). Дальше распаковываешь tar.gz. Не забудь поставить и Tk! :)

Запускаешь CLISP. Пишешь (load "/your/ltk/path/ltk.lisp"). <Enter>. Все компилируется, интерпретируется. Появится следующее приглашение. Запускай примерчики:

(ltk::ltk-eyes) - это глаза, аналогичные xeyes. Ловят положение мышки и следят за ней.

(ltk::ltktest) - Вращение колеса.

Точно такие же действия можно провести на компилируемом SBCL.

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

>С юниксом неплохо, а вот с виндами действительно тяжело.

Что вы сказали? Байткодный CLISP из свободных работает отлично везде! :)

>CLISP runs on most GNU and Unix systems (Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Tru64, HP-UX, BeOS, NeXTstep, IRIX, AIX and others) and on other systems (Windows NT/2000/XP, Windows 95/98/ME) and needs only 4 MB of RAM.

Идет работа над портированем SBCL. Думаю, что она будет закончена. не забывайте еще про коммерчесие реализации.

>LispWorks Ltd is pleased to announce the release of LispWorks 5.0 on Windows, Macintosh, Linux and FreeBSD platforms.

Ну и Allegro CL.

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

Вот жабу и лисп решил помучать. Проблемы:

1. Жаба. 
Поставил sun-jdk-1.5.0.08. 
Пример:
class My_java {
  public static void main(String args[ ]) {
    System.out.println("Hello. Wende Kapez"); 
  }
}
javac My_java .java - Все ОК
java My_java
Exception in thread "main" java.lang.NoClassDefFoundError: projects/My_java (wrong name: My_java)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Имя файла совпадает с именем класса. Может java-машину нужно запустить? Как? Поставил sun-jre-bin-1.5.0.08. Там есть java_vm может его как-то запустить? Пока не хочет. Что делать?

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

Я, конечно, жабы не знаю, но по-моему у файла с байт-кодом должно быть расширение .class и имя, совпадающее с именем класса...

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

> Я, конечно, жабы не знаю, но по-моему у файла с байт-кодом должно быть расширение .class и имя, совпадающее с именем класса...

Всё так и есть. Есть файлы My_java.java и My_java.class. Имя класса - My_java.

eraser
() автор топика
Ответ на: комментарий от Zubok

И по lisp'у вопрос:  создал файл l1.lisp, компильнул clisp -c l1.lisp, получид l1.fas и l1.lib.
Пытаюсь просто запустить l1.fas - не хочет, делаю clisp l1.lisp - работает. Это так и надо?
И еще. Дайте плз ссылку на нормальный учебник по Common Lisp'у, а то или хня каккае-то, больше половины ссылок битых, или бабки плати...

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

> java My_java

java -classpath . My_java

Либо пропиши точку в переменную окружения CLASSPATH.

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

> лисп компилит в байткод а не в выполняемое.

Поправки:

1. clisp компилит. Есть лиспы, которые компилят в натив (CMUCL и SBCL, например).

2. Выполняемым может быть не только ELF. clisp'овые .fas можно прописать как misc binaries и фиг отличишь от ELF на уровне пользователя.

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

Запускай так java ./My_java. Или как уже советовали, пропиши .; в начало CLASSPATH

А вообще вот FAQ http://forum.juga.ru/showthread.php?threadid=11143 http://www.sql.ru/forum/actualthread.aspx?tid=227954 http://skipy.dev.juga.ru/philosophy/visualDesigners.html http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target... http://skipy.dev.juga.ru/philosophy/beginning.html

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

> Есть лиспы, которые компилят в натив (CMUCL и SBCL, например).

CMUCL'ем компильнул свой файл l1.lisp - получил l1.x86f. Но он не запускается... Что не так ? Как натив получить то ???

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

Вот нашел 
The decision to byte compile or native compile can be done on a per-file or per-code-object basis. И всё. Это как?

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

>CMUCL'ем компильнул свой файл l1.lisp - получил l1.x86f. Но он не запускается... Что не так ? Как натив получить то ???

Для начала хочу заметить, что ты попросил *интерпретируемый* язык. А сейчас вдруг активно стал найтив выискивать пускаемые файлы. Интерпретируемый язык на то и интерпретируемый, что программа компилируется в байт-код (или без компиляции) и выполняется виртуальной машиной (интерпретатором). Так в Java, так в LISP.

Ну а если конкретно по вопросу, где найтив в CMUCL/SBCL, то отвечу, что компилируются в нэйтив так называемые VOPы (Virtual OPerations). Это все инструкции языка. Но эти VOPы все-равно работают в виртуальной машине. Ты можешь свою программу сделать, вместе с ядром LISP в одном файле. Не знаю, как это в CMUCL, а в SBCL это так:

REPL> (load "/path/to/your/program/l1.lisp") REPL> (save-lisp-and-die "sbcl.l1")

После этого у тебя сгенерится 25Мб (примерно) ядро, которое запускается пускателем.

$ sbcl --core /path/to/your/new/kernel/sbcl.l1

Допустим, что твоя программа запускается так (start-l1), тогда чтобы программа сразу запустилась, ты должен написать:

$ sbcl --core /path/to/your/new/kernel/sbcl.l1 --eval "(start-l1)"

Почему ядро большое? Да потому что там вся мощь лиспа упрятана, которая в больших проектах просто необходима. Например, там есть вся объектно-ориентированная система CLOS, математика, строки, эвалюатор, парсер лисп-программ и куча всего прочего.

Почитай где-нибудь про принцип инкрементальной компиляции, который есть основной из фишек лиспа. Это интересный, но довольно необычный для прочих средств способ разработки программ. Когда начнешь вникать, то поймешь. Прочти для начала onlisp Поля Грэма. Еще есть книжка более сжатая, которую можно для беглого ознакомления (ссылки не помню): (David J. Cooper Jr.) Basic Lisp Techniques.

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

Спасибо за подробный ответ.

> Для начала хочу заметить, что ты попросил *интерпретируемый* язык. А сейчас вдруг активно стал найтив выискивать пускаемые файлы. Интерпретируемый язык на то и интерпретируемый, что программа компилируется в байт-код (или без компиляции) и выполняется виртуальной машиной (интерпретатором). Так в Java, так в LISP.

Я просто не знал, что можно в натив... Ну так если язык это позволяет , то почему не воспользоваться ??? Это же позволяет скорость увеличить.

> Допустим, что твоя программа запускается так (start-l1)

Если моя прога называется l1, то start это что такое? команда чтоли ? или от балды ?

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

>Если моя прога называется l1, то start это что такое? команда чтоли ? или от балды ?

Когда пишешь на С программу, то основной функцией является main(). В любой CL-программе тоже есть основная функция. Название можешь придумать сам, какое хочешь. Я от балды придумал (start-l1), потому что не видел твоей программы.

Zubok ★★★★★
()

Ух ты какую книжку я по этим ссылка нашел http://mitpress.mit.edu/SICM/ .До этого и незнал что такие веши бывают

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

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

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

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

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

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

> В любой CL-программе тоже есть основная функция

А как она обозначается ? (чёт не дошед еще).

И ещё подскажите где почитать о взаимодействии с ОС. Пока интерисует открытие файла open()/fopen(), read()/write, fread ???

eraser
() автор топика
Ответ на: комментарий от yyk

> Ну скачай ты себе CLTL - половина (если не больше) вопросов решится...

Это Tk/TL (или как там его)? Не... я sbcl и CMUCL юзаю.

eraser
() автор топика
Ответ на: комментарий от yyk

Зачем человеку такой гимор с самого начала. Behemoth уже первым делом запостил самую правильную ссылку на Practical Common Lisp: http://www.gigamonkeys.com/book/

В этой книге доступным языком описаны основы, и она покрывает большую часть вопросов начинающих изучать Лисп. Жаль что ее небыло когда я начинал изучать. Правда я учил сначала по бумажной версии ANSI Common Lisp Пола Грэма, тоже недурная книжка, но PCL практичнее что-ли ;-)

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