LINUX.ORG.RU

Выход mocl

 , ,


7

8

mocl — набор инструментов для разработки на Common Lisp под мобильные платформы iOS и Android. По заверениям разработчиков получаемый код (используется LLVM) по производительности значительно превосходит аналогичный на Java/Dalvik.

В основе mocl лежит идея, заключающаяся в том, что логика приложения должна быть полностью описана на Лиспе, а пользовательский интерфейс — быть «родным» для платформы. Авторы проводят аналогию с Вэбом, когда логика серверного приложения описана на одном языке (например, на Лиспе), а представление — на другом (HTML + JavaScript).

Цена лицензии варьируется от $1299 для серьёзных компаний до $199 для индивидуальных разработчиков. Также предусмотрена «Source code license» для особых энтузиастов, доступ к которой, по-видимому, дают после обращения в службу поддержки.

Пример приложения на Github.

>>> Подробности

★★★★★

Проверено: mono ()
Последнее исправление: Dendy (всего исправлений: 4)
Ответ на: комментарий от r

Плять, а я с помощью чего по твоему сделал?

Ты sequence разобрал, дурашка. Предварительно сделать .toList, а не словарь.

Кого - тебя? Меня не интересует.

Да просто говори «соснул» да и всё. А ведь столько спел дифирамбов сралке. Я аж даже подумал, что вот ещё чуть-чуть и будет решение, но нет. Собственно, я практически и не надеялся.

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

Сначала научись аргументировать без лохства пукнул и прочих какашек - потом приходи.

Да какие аргументы. Ты ж их не воспринимаешь. Одним словом пробулшиченный статикой фанбой. Такие дела.

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

Ты sequence разобрал, дурашка.

Ты клинический идиот. Ты хть знаешь что такое unapply? Ты посмотрел его сигнатуру?

Да просто говори «соснул»

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

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

Кстати, в динамически-типизированные языки тоже можно добавить вычислительные выражения. Этим они и отличаются от нотации do из Haskell, что не требуют статической типизации. Еще хотел бы видеть новый лисп с поддержкой оных выражений. Но что-то я размечтался... Пакет cl-cont из Common Lisp приближает к этому, но у него есть ряд существенных ограничений.

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

Кодом сестра кодом.

Давай, лалочка, xml'ку и что нужно разобрать, а я код накатаю.

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

Автор этого термина - втор поста на который отетом ыл пост по твоей ссылк

Да, действительно, признаю. Автор не ты.

ps: то есть, ты уверенно и аргументированно ответил на сообщение, смысла которого не понимаешь?

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

По ссылке _именно это_ и показано.

На CoffeeScript 1 строка — полностью готовое решение разбора. А у тебя только сферические классы. Либо пиши код полностью, либо засливан.

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

Ты клинический идиот.

Не. Я в этом не силён. Это по твоей части :)

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

ps: то есть, ты уверенно и аргументированно ответил на сообщение, смысла которого не понимаешь?

Как думаешь - когда в конце стоят вопросительныё знаки - это ответ или вопрос?

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

передаешь в строках цифры на пыхе, правильно?

Да, только не пыхе, а в json/xml. Теперь понятна моя ошибка. Научишь правильно передавать цифры? Особенно меня смущает ситуация, когда строки и на входе, и на выходе.

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

На CoffeeScript 1 строка — полностью готовое решение разбора.

Боже какой же ты фейспалм. Когда я задал уточняющую формалировку по поводу «нативных для языка объектов» - это тебе о чем ни сказало? Хоть извилина шелохнулась в мозгу? Нет?

Либо пиши код полностью, либо засливан.

По ссылке _компилящийся код_.

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

Боже какой же ты фейспалм. Когда я задал уточняющую формалировку по поводу «нативных для языка объектов» - это тебе о чем ни сказало? Хоть извилина шелохнулась в мозгу? Нет?

Демагогия? Повторю ещё раз... На вход прилетает JSON... Задачу надо решить, понимаешь? Решить! А не разводить демагогию о «нативных для языка объектах».

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

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

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

Покажите уже пример этих ваших вычислительных выражений в F#.

По идее, в CL или racket такое сделать будет вообще не проблема.

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

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

Входные данные имеют большое значение. А также формат входных данных может расширяться и дорабатоваться. И фишка тут в том, что бы не ломать уже написанный код. Возможно с расширенным форматом будет вообще другой код работать, а старому коду достаточно тех данных о которых он знает. Посмотри на google protobuf. Протокол специально спроектирован под такую логику. Рухнуть код должен только в том случае, если новый формат рушит совместимость со старым форматом. Понимаешь, чувак? Только в этом случае. Понимаешь, лалочка? Только в этом. Только. В этом.

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

Это да, ты абсолютно прав. А как надо-то? Научи дурака, поделись опытом, как в строке (json например) правильно указать тип?

Вот, к примеру, {age:«34»} — это int, float, string или date? Или {weight:«15+3»}? Или {size:«1234x860x8»}?

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

Демагогия? Повторю ещё раз... На вход прилетает JSON...

Демагог ты. Где в твоем примере на кофискрипте на вход прилетет JSON?

Ты так и не научился формулировать нейтральные задачи. Иди учись.

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

Входные данные значения таки не имеют

Только данные и имеют значение, а что там у тебя в черном ящике — всем насрать, пока из него фекалии не брызжут от «неправильных» данных.

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

Понимаешь, чувак? Только в этом случае. Понимаешь, лалочка? Только в этом. Только. В этом.

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

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

Вот, к примеру, {age:«34»} — это int, float, string или date?

Ты что скрипачь - дальтоник? Это строка.

А вот если бы у тебя был age: 34 и была логика вычисления среднего возраста написанная не на пыхе - посмотрим как смена int -> string сказалась бы на твоем коде.

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

Совет тебе чудак - читай то на что я отвечаю - тогда не будешь лажаться как с поломкой кода.

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

посмотрим как смена int -> string сказалась бы на твоем коде.

Доо, а прикинь, если {age:«zxc»} прилетит? Тут-то всемирный коллайдер и наступит, и придет всем кариес!

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

написанная не на пыхе

Что такое? Что я вижу! Намекаешь на статикопроблемы?

Ты что скрипачь - дальтоник? Это строка.

Вообще-то тип age, ну да не важно. Собственно, об этом и речь — это не важно. Это не должно быть важно! Код не должен ломаться!

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

> если новый формат рушит совместимость со старым форматом.

Если у тебя данны только добавляются и не меняются

Ну да, ну да. Опять я облажался, кто ж еще? Пойду в угол стану.

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

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

Чувак если это ошибочные входные данные - то это валидация и код тут не при чем. А если вход поменялся - то код тут очень даже при чем. И если он уже не обрабатывает валидныё входныё данныё - то это поломанный код.

Намекаешь на статикопроблемы?

Нет - намекаю на пыховый коэршен 2 + «2».

Вообще-то тип age, ну да не важно.

Вообще-то это у тебя в голове пока только. А в JSON строка.

Код не должен ломаться!

Словом «Ломаться» ты что называешь?

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

Покажите уже пример этих ваших вычислительных выражений в F#.

По идее, в CL или racket такое сделать будет вообще не проблема.

Разве уже отменили учебники? Там достаточно информации.

Что касается кажущейся «беспроблемности», то посмотрите на ограничения cl-cont. Все эти ограничения перенесутся и на вычислительные выражения, поскольку у них одна природа.

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

А если вход поменялся - то код тут очень даже при чем. И если он уже не обрабатывает валидныё входныё данныё - то это поломанный код.

Ну да, все правильно. Вопрос только — зачем писать код, который ломается от каждого чиха? Или ты заранее пишешь поломаный код?

Словом «Ломаться» ты что называешь?

то это поломанный код.

написанная не на пыхе

намекаю на пыховый коэршен 2 + «2».

Да, не легко тебе. Сочуствую. В отпуск съезди. Или к доктору сходи.

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

Вообще-то это у тебя в голове пока только. А в JSON строка.

Вот чудак-человек! Тебе ж говорят — не важно это, совершенно!

Есть факт: котенку 34 дня, этот факт отражен записью {age:«34»} Внимание, вопрос: как изменится возраст котенка, если из записи убрать кавычки? Как подобная манипуляция с возрастом котенка повлияет на алгоритм расчета даты его рождения? Ну и самое главное — так какого?..

А впрочем ладно, ты ведь все равно съедешь.

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

Вопрос только — зачем писать код, который ломается от каждого чиха?

Вот и я тебя спрошу - зачем писать такой код?

Ты же так и не ответил. А мне интересно.

Ответ будет таким же.

Как подобная манипуляция с возрастом котенка повлияет на алгоритм расчета даты его рождения?

Если там почему-то будут написаны age: «3 weeks»? и правда - как?

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

Как подобная манипуляция с возрастом котенка повлияет на алгоритм расчета даты его рождения?

Если там почему-то будут написаны age: «3 weeks»? и правда - как?

Я понял! Это вопрос с подвохом. Совершенно очевидно, в этом случае потребуется альтернативная таблица умножения, а потом надо... Черт... Ты меня срезал!

upd: вообще, ты меня пожалел, спасибо тебе. Ведь ты мог написить age:«щитири филахрамана».Еще раз спасибо!

linuxnewb
()
Последнее исправление: linuxnewb (всего исправлений: 1)
Ответ на: комментарий от r

Ответ будет таким же.

Значит, опять слив? Жаль.

Вот и я тебя спрошу - зачем писать такой код?

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

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

Не, ну серьезно, объяснишь в чем отличие алгоритмов:

«$birthday=now()-$age();», «$birthday=now()-$age();», «$birthday=now()-$age();» и «$birthday=now()-$age();»

для {age:34}, {age:«34»}, {age:«3 weeks»} и {age:«икс-три»} соответственно?

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

в моем решении кастомный аллокатор + unordered_set

А как в unordered_set (не multi) количество элементов считать?

Я про tr1 забыл — с ними немного быстрее получается:

#include <cstdio>
#include <cstdlib>

#include <tr1/unordered_map>

int main()
{
    typedef std::tr1::unordered_map<int, size_t> Stack;

    Stack stack;
    size_t heteros = 0, homos = 0;

    char buf[20];
    int n, i;

    fgets(buf, 20, stdin); n = atoi(buf);
    do {
        fgets(buf, 20, stdin); i = atoi(&buf[7]);
        if (buf[0] == 'i') {
            const std::pair<Stack::iterator, bool> ret = stack.insert(std::pair<int, size_t>(i, 0));
            if (ret.second) ++heteros;
            else { ++(ret.first->second); ++homos; }
        } else {
            const Stack::iterator it = stack.find(i);
            if (it != stack.end())
                if (it->second--) --homos;
                else { --heteros; stack.erase(it); }
        }
        puts(heteros > 1 ? homos ? "both" : "hetero" : homos ? "homo" : "neither");
    } while (--n);
}
quasimoto ★★★★
()
Ответ на: комментарий от quasimoto

А как в unordered_set (не multi) количество элементов считать?

класть в него long long или структуру из двух интов, конечно использовать свой заточенный под задачу сет будет еще быстрее, но я и со старой версией unordered_set выжал 0.27сек

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

Результаты ты забыл указать, результаты.

Результат --- дата рождения. Внимательнее читай. Ну так чем же алгоритмы отличаются?

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

Результат --- дата рождения. Для всех четырех случаев.

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

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

Не, ну серьезно, объяснишь в чем отличие алгоритмов:

«$birthday=now()-$age();», «$birthday=now()-$age();»,
«$birthday=now()-$age();» и «$birthday=now()-$age();»

Fatal error: Call to undefined function now() on line 1

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

Результат --- дата рождения. Для всех четырех случаев.

Там есть входные данные для четырех случаев. Напрягись - посчитай выход. Заэвалюэйть программу - напиши `твой_любимый_язык’ -eval ...

Код же должен быть 'неполоманным'

Что такое алгоритм знаешь? Вот и давай, показывай различия.

Зачем?

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

Там есть входные данные для четырех случаев.

Дурака включил? Достойно!

Там есть четыре алгоритма для четырех случаев. Напрягись - сравни их. Результат сравнения доложи здесь.

Зачем?

«Да просто говори «соснул» да и всё. » (с) BooBoo

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

Зачем тратить время и силы на людей одержимых лиспом? Реально выглядит как разговор атеиста с религиозным фанатиком. Вероятно самый вести эффективный диалог с лиспером о лиспе был случайно озвучен известным лиспоманьяком Роном Гарретом в одной из его статей (http://www.flownet.com/gat/jpl-lisp.html):

... I did try to introduce Lisp to Google. Having had some experience selling Lisp at JPL I got all my ducks in a row, had a cool demo going, showed it to all the other members of the ads team, and had them all convinced that this was a good idea. The only thing left was to get approval from the VP of engineering. The conversation went something like this:

Me: I'd like to talk to you about something...
Him: Let me guess - you want to use Smalltalk.
Me: Er, no...
Him: Lisp?
Me: Right.
Him: No way.

And that was the end of Lisp at Google. ...

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