Re: Быстрое введение в Clojure
От: roro  
Дата: 02.08.13 20:38
Оценка: 12 (1)
Здравствуйте, kaa.python, Вы писали:

KP>Разыскивается введение в Clojure, которое в обязательном порядке покрывает вопросы многопоточного и сетевого взаимодействия.


KP>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


Насколько знаю в стандартном clojure каких либо прорывов в этой области нету, все как в java только с динамикой и функциональными плюшками + stm.

Из интересного нашел http://blog.paralleluniverse.co/post/49445260575/quasar-pulsar

Судя по последним постам у тебя research на тему современных языков программирования ?
Re: Быстрое введение в Clojure
От: A13x США  
Дата: 02.08.13 11:43
Оценка: 6 (1)
Здравствуйте, kaa.python, Вы писали:

KP>Разыскивается введение в Clojure, которое в обязательном порядке покрывает вопросы многопоточного и сетевого взаимодействия.


KP>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


Наверное каждая книга по clojure покрывает вопросы multithreading.
Одна из самых хороших книг которые я видел: Clojure Programming
Неплох Clojure in Action
Re[2]: Быстрое введение в Clojure
От: LaptevVV Россия  
Дата: 02.08.13 11:47
Оценка: 6 (1)
Здравствуйте, A13x, Вы писали:

A>Здравствуйте, kaa.python, Вы писали:


KP>>Разыскивается введение в Clojure, которое в обязательном порядке покрывает вопросы многопоточного и сетевого взаимодействия.


KP>>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


A>Наверное каждая книга по clojure покрывает вопросы multithreading.

A>Одна из самых хороших книг которые я видел: Clojure Programming
A>Неплох Clojure in Action
Clojure Programming переведена: http://www.ozon.ru/context/detail/id/21296773/
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Быстрое введение в Clojure
От: A13x США  
Дата: 02.08.13 13:10
Оценка: 6 (1)
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, A13x, Вы писали:


KP>>>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


A>>Одна из самых хороших книг которые я видел: Clojure Programming


KP>Да, мне эта тоже понравилась, ну и отзывов много положительных. Но, в первую очередь, хочется статьи, т.к. у меня есть вполне конкретные "хотелки" и был бы рад глянуть как они реализованы.


"Выжимку" можно найти на официальном сайте:

по многопоточности

Clojure simplifies multi-threaded programming in several ways. Because the core data structures are immutable, they can be shared readily between threads. However, it is often necessary to have state change in a program. Clojure, being a practical language, allows state to change but provides mechanism to ensure that, when it does so, it remains consistent, while alleviating developers from having to avoid conflicts manually using locks etc. The software transactional memory system (STM), exposed through dosync, ref, set, alter, et al, supports sharing changing state between threads in a synchronous and coordinated manner. The agent system supports sharing changing state between threads in an asynchronous and independent manner. The atoms system supports sharing changing state between threads in a synchronous and independent manner. The dynamic var system, exposed through def, binding, et al, supports isolating changing state within threads.


+ есть еще полезный clojure cheat sheet
Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 02.08.13 07:25
Оценка:
Разыскивается введение в Clojure, которое в обязательном порядке покрывает вопросы многопоточного и сетевого взаимодействия.

Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.
clojure
Re[2]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 02.08.13 11:47
Оценка:
Здравствуйте, A13x, Вы писали:

KP>>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


A>Одна из самых хороших книг которые я видел: Clojure Programming


Да, мне эта тоже понравилась, ну и отзывов много положительных. Но, в первую очередь, хочется статьи, т.к. у меня есть вполне конкретные "хотелки" и был бы рад глянуть как они реализованы.
Re[3]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 02.08.13 11:49
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Clojure Programming переведена: http://www.ozon.ru/context/detail/id/21296773/


Не, я за оригинальные версии книг, там, хотя бы, ожидать сюрпризов от переводчиков не приходится
Re[4]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 02.08.13 14:39
Оценка:
Здравствуйте, A13x, Вы писали:

A>"Выжимку" можно найти на официальном сайте:


Вс не то Не, информативно и я благодарен за затраченное на ответ время, но не то что я ищу. Ну да ладно, буду книгу листать.
Re[2]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.08.13 03:34
Оценка:
Здравствуйте, roro, Вы писали:

R>Из интересного нашел http://blog.paralleluniverse.co/post/49445260575/quasar-pulsar


Вот это уже больше походит на то, что я ищу, спасибо

R>Судя по последним постам у тебя research на тему современных языков программирования ?


Почти. Я, довольно давно, начал искать себе альтернативу своему основному рабочему языку (C++) для собственных проектов и прототипчиков. Остановился на Scala, но несколько разочаровался в итоге. Сейчас думаю начать писать то, ради чего все это затевалось, но меня обуревают серьезные сомнения насчет того, что Scala оказалось подходящим выбором. Решил еще что-нибудт глянуть
Re[3]: Быстрое введение в Clojure
От: A13x США  
Дата: 03.08.13 06:39
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>...


KP>Почти. Я, довольно давно, начал искать себе альтернативу своему основному рабочему языку (C++) для собственных проектов и прототипчиков. Остановился на Scala, но несколько разочаровался в итоге. Сейчас думаю начать писать то, ради чего все это затевалось, но меня обуревают серьезные сомнения насчет того, что Scala оказалось подходящим выбором. Решил еще что-нибудт глянуть


Мне кажется, что clojure тебя разочарует. Вести сложный проект на нем будет довольно тяжело.
Далее субъективные плюсы и минусы.

плюсы:
1. Краткость и внутренняя элегантность языка: (ну что ж, я всегда любил лисп) + удобные common lisp-way макросы. Язык более прост чем Common Lisp.
2. Неизменяемость "из коробки", простой и понятный подход к многопоточному программированию.
3. Очень хорошая интеграция с явой и наоборот.
4. REPL, простота экспериментирования
5. Большое сообщество, много материала по языку в сети.

минусы:
1. Динамическая типизация (еще раз напомню — субъективно), без всеобьемлющих юнит тестов код на clojure имеет нулевую ценность, даже при прототипировании. В серьезных проектах нужно будет покрывать тестами бОльший объем примитивного кода, чтобы отчасти проверять то, что в другом языке проверила бы система контроля типов компилятора.
2. Код на порядок, а иногда и на два более медленный, чем эквивалентный более громоздкий и менее красивый на яве.
3. Невнятные сообщения об ошибках. Примеры непонятных ошибок см. ниже.

итог:
в качестве barebones я решил использовать впредь яву, пусть многословно, но понятно, сопровождаемо и надежно. На clojure писать только небольшие прототипы, dsl-подобные вещи и динамически загружаемый код.

+ ряд примеров непонятных ошибок из моих заметок:

[1] On weird error reporting:
ClassCastException java.lang.Boolean cannot be cast to clojure.lang.Symbol clojure.core/alias (core.clj:3799)
when loading file with (ns myns [:use qdsl.java.ir :as ir]) — should be: [:use [qdsl.java.ir :as ir]].

[2] On weird error reporting:
ClassCastException qdsl.java.ir$v cannot be cast to java.lang.Throwable qdsl.java.printing/pir-for-statement (printing.clj:50)
when making an error like this
(throw (UnsupportedOperationException. "Unsupported statement kind: " kind))
instead of
(throw (UnsupportedOperationException. (str "Unsupported statement kind: " kind)))

[3]
Exception in thread "main" java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol

— when the function defines argument list in round braces, e.g. defn fnname (arg) instead of defn fnname [arg].

[4]
CompilerException java.lang.NullPointerException, compilingfile.clj:160)

— when you make a typo in forward function declaration:

(defn mc)

(defn qwe []
(mc 2))

[5]
IllegalArgumentException Don't know how to create ISeq from: tl.langcore$implements$fn__1563 clojure.lang.RT.seqFrom (RT.java:494)

— when trying to concatenate lazy sequence with non-sequence symbol — code compiles and runs but when you try to access the variable you’ll get error. Minimal sample that reproduces the described behavior:
(let [a (concat [] :a) b 12]
(println a))

[6] CompilerException java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.Symbol, compilingNO_SOURCE_PATH:58)

— when evaluating
(var "a" "b")


[7] On weird error reporting:
Error:
IllegalArgumentException Don't know how to create ISeq from: clojure.lang.Var clojure.lang.RT.seqFrom (RT.java:494)

— When evaluating macro with excessive backquote.

Re[3]: Быстрое введение в Clojure
От: roro  
Дата: 03.08.13 12:19
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Почти. Я, довольно давно, начал искать себе альтернативу своему основному рабочему языку (C++) для собственных проектов и прототипчиков. Остановился на Scala, но несколько разочаровался в итоге. Сейчас думаю начать писать то, ради чего все это затевалось, но меня обуревают серьезные сомнения насчет того, что Scala оказалось подходящим выбором. Решил еще что-нибудт глянуть


имхо, универсального средства не существует. Я под свои задачи выбрал с++ со скриптами на лиспе и лисп с библиотеками с++.
Re[4]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.08.13 12:55
Оценка:
Здравствуйте, roro, Вы писали:

R>имхо, универсального средства не существует. Я под свои задачи выбрал с++ со скриптами на лиспе и лисп с библиотеками с++.


Нууу, даже и не знаю. По моему мнению, C++ скрипты совсем не нужны и довольно не уместны. Если ты делаешь какую-то жутко расширяемую пользователем штукенцию, например отладчик (тот же GDB), то да, скрипты нужны. Если говорить о неком общем случае, то скрипты довольно бессмысленны и позволяют разве что сделать очень умную конфигурацию
Re[4]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.08.13 13:10
Оценка:
Здравствуйте, A13x, Вы писали:

A>Мне кажется, что clojure тебя разочарует. Вести сложный проект на нем будет довольно тяжело.


Да я вообще склоняюсь к тому, что лучше C++11 и Rust для моих целей ничего нет и не будет. Хотя, мне очень хотелось иметь JVM без всяких JNI, как минимум из за этой морфологической библиотеки.

A>Далее субъективные плюсы и минусы.


Спасибо, интересно. Пролистаю книгу-другую, и там видно будет
Re[5]: Быстрое введение в Clojure
От: roro  
Дата: 03.08.13 14:01
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, roro, Вы писали:


R>>имхо, универсального средства не существует. Я под свои задачи выбрал с++ со скриптами на лиспе и лисп с библиотеками с++.


KP>Нууу, даже и не знаю. По моему мнению, C++ скрипты совсем не нужны и довольно не уместны. Если ты делаешь какую-то жутко расширяемую пользователем штукенцию, например отладчик (тот же GDB), то да, скрипты нужны. Если говорить о неком общем случае, то скрипты довольно бессмысленны и позволяют разве что сделать очень умную конфигурацию


Зависит сильно от задачи.
У меня есть несколько проектов где мне пригодилось.

1. графическое с++ приложение для анализа потока данных, на каждом кадре вызывает функцию скрипта, задача скрипта проанализировать и отрендерить результат в окно вывода. Скрипт в любой момент времени можно перезагрузить, без потери данных в глобальных переменных, эдакий hot-code-reload. Для удобства приложение само отслеживает время модификации файла и обновляет код в паузе между кадрами.

(define-record state avg acc ...)
(use rendring-api)
(define (on-init)
  (make-state))

(define (on-frame state input)
  (process state input))



SCHEME_load("process.scm")
SCHEME_Object state  = SCHEME_eval("(on-init)");
SCHEME_Object func = SCHEME_read("on-frame");
while (running) {
 state = SCHEME_eval(func,state,getInputs());
 if (file_changed("process.scm"))
  script_reload("process.scm",&state,&func))
}



2. Qt приложение с управлением через web интерфейс. webserver работает в отдельном потоке и контактирует с приложение через slot/signal. Для Qt5 вызов методов польностью автоматический (метаинформацию добавили тип возврашаемого значения).

class Gateway : public QObject {
... 
Q_SLOT QString welcome(QString username) { return QString("Wellcome, %1").arg(username); }
};



(define-page (irregex "/wellcome")
  (lambda (path)
    (string-append
      "Server-say: " (qt-invoke gateway "welcome" $('username))
      "time: " (current-date))))


3. дальше идут немного комбинирование решения, когда код скрипта используется из с++

(define-foreign-type Puzzle (pointer (struct "Puzzle")))

(define-external solve_puzzle ((Puzzle p)) int
    (solve (Puzzle-type p) (Puzzle-cells p)))


external "C" int solve_puzzle(struct Puzzle* p);

void Solver::onClick() {
 m_result = solve_puzzle(m_puzzle);
 showResult();
}
Re: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 03.08.13 15:59
Оценка:
Да, полезность и интересность это одно, но мне тут в голову пришло глянуть восстребованность языков в более-менее цивилизованных странах, как говорится интереса ради. По всем странам кроме RU в качестве источника информации я взял Монстр. В целом, меня удивило количество вакансий, в которых есть упоминание Scala и Clojure в UK, особенно на фоне их полнейшего отсутствия в SG, при том что и там и там мировой фин.центр и работа, казалось бы, схожая

Вобщем, ни о чем, но познавательно

Страна/ЯзыкC++Scala Clojure ErlangHaskell
UK1000+115542610
US37222130
SG600000
RU19637384812
Re[4]: Быстрое введение в Clojure
От: Grundik2 Земля  
Дата: 04.08.13 04:39
Оценка:
Здравствуйте, A13x, Вы писали:

A>Мне кажется, что clojure тебя разочарует. Вести сложный проект на нем будет довольно тяжело.

A>Далее субъективные плюсы и минусы.

видел на хабре статью: Учите closure, а что-то не могу найти. Не видели?
Re[5]: Быстрое введение в Clojure
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 04.08.13 07:28
Оценка:
Здравствуйте, Grundik2, Вы писали:

G>видел на хабре статью: Учите closure, а что-то не могу найти. Не видели?


Эта что-ли? http://habrahabr.ru/post/173071/ Школота как писала хреново, так и продолжает хреново писать. И это лучшая заметка по Clojure на Хабре (тут должен быть блюющий смайлик).
Re: Быстрое введение в Clojure
От: gerrCrazzy  
Дата: 05.08.13 13:50
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Разыскивается введение в Clojure, которое в обязательном порядке покрывает вопросы многопоточного и сетевого взаимодействия.


KP>Можно и книги, но хотелось бы краткой выжимки по конкретным вопросам. Список ключевых возможностей так же приветствуется.


http://alexott.net/ru/clojure/clojure-intro/index.html
Похоже именно то, что нужно, хотя уже должно быть поздно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.