LINUX.ORG.RU

Парни из Ричмонда разработали язык Fan на замену C# и Java

 , , , ,


0

0

Устав переписывать программы с Java на C# и обратно, группа лиц разработала новый практичный язык программирования, который предназначен для написания программ в легкой и непринужденной, веселой (fun) манере.

Программы на языке Fan можно запускать как скрипты в браузере (аналогично JavaScript), так и как обычные скрипты (аналогично bash/perl) или десктопные приложения (.exe, elm)

Программы компилируются в промежуточный код fcode, который затем в рантайме транслируется либо в байткод JVM, либо в IL, в зависимости от того, в какой виртуальной машине запустили программу. Также fcode позволит в будущем написать транслятор в Parrot, Object-C либо LLVM.

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

★★★★★

Проверено: Shaman007 ()

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

>> Тополь уже не в моде ?

У него БЧ не разделяемая. А у РС20 - разделяемая, с кучей ложных целей и генераторами помех.

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

После апгрейда до 1.9.x оценю.

Цифры тебе не понравятся :)

fib.rb:

def fib(n)
  if n<2
    n
  else
    fib(n-2)+fib(n-1)
  end
end
print(fib(43), "\n");

: time ruby1.9.1 fib.rb
433494437

real    2m40.000s
user    2m37.586s
sys     0m0.040s
Deleted
()
Ответ на: комментарий от Karapuz

> Гогно под названием SWT никак не перепишут под AMD64. Пресловутая IBM

Щито? А как eclipse в 64-битной системе себя рисует?

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

>Цифры тебе не понравятся :)

Мне индифферентно, ибо я не являюсь ни сторонником, ни противником Ruby :)

>real 2m40.000s

Ну, да, он на числодробилке сильно тормознее Питона с Psyco.

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

>Смотрю Red Dawn с П.Суэйзи. Доставляет

очередной фильм для промывки мозгов американцам. Мой мозг такого не выдерживает :)

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

>Сейчас Си++ с хипом гляну...

Досчитал. Получилось 31,2 сек. на цикл. В пересчёте на ту таблицу - около 22 сек. Погрешность приличная (было 17 сек), но оценить уровень позволяет. g++ при работе с хипом почему-то опять в пролёте :-/ Так и не разобрались тогда, почему. Надо будет с boost'ом протестировать, там получалось быстрее.

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

>> Смотрю Red Dawn с П.Суэйзи. Доставляет

> очередной фильм для промывки мозгов американцам.

"Очередной"? Да он как бы не старше тебя был :)

tailgunner ★★★★★
()

ржу-нимагу называется

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

>У него БЧ не разделяемая. А у РС20 - разделяемая, с кучей ложных целей и генераторами помех.

посмотрел видео на ТыТруба. Согласен, оно таки круче. Даже проходит через термоядерный взрыв.

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

Поприветствуем черёпашку

: time ruby1.8 fib.rb
433494437

real    15m36.173s
user    14m17.738s
sys     1m17.337s
Deleted
()
Ответ на: комментарий от KRoN73

>Сейчас Си++ с хипом гляну...

Бгыгык. А хип извратись и помести в замапленный файл, чтоб точно тормозило.

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

>Бгыгык.

Предложи более быстрый метод, я оттестирую. Или в том же варианте с boost'ом подскажи, чего там инклудить - я никогда с boost не работал. А бгыгыкать любой дурак может. Сделай лучше, тебе же и карты в руки! :)

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

>А -server как-то влияет на производительность?

Очень сильно (в этом тесте - скорее всего меняются алгоритмы выделения памяти). Скажем, раньше поднималось с 3,9сек. на цикл до 2,5.

Сейчас - с 4,99 до 2,33 сек.

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

>Но у тебя там аргументы шаблона съелись

Восстановить не сможешь? Там непер в том, что съелись они не при раскраске кода, а в сорцах автора. Я напрямую смотрел.

KRoN73 ★★★★★
()

а ничего такой язык. острый. можно баловаться

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

>Восстановить не сможешь?

Пришлось доки раскуривать. Там кое-что можно потюнить. Но в общем я бы сделал так (отключена только тредобезопасность, остальное дефолт):

typedef boost::singleton_pool< MyPoolTag, 32, boost::default_user_allocator_new_delete, boost::details::pool::null_mutex > FibPool;

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

>typedef boost::singleton_pool< MyPoolTag, 32, boost::default_user_allocator_new_delete, boost::details::pool::null_mutex > FibPool;

Спасибо. Работает. И стало НАМНОГО быстрее. Теперь цикл занимает 3,41 сек. Ещё не 2,33 у java -server, но уже не позорно. Код, правда, страшный... ;)

...

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

Займусь понемногу.

KRoN73 ★★★★★
()

Прочитал "Парни из Редмонта..."

filosof ★★
()

А чем Qt хуже JVM и дотнета? Тем, что быстрее и позволяет с помощью условной компиляции лучше использовать особенности каждой из платформ?

chemikadze
()

>Программы на языке Fan можно запускать как скрипты в браузере (аналогично JavaScript), так и как обычные скрипты (аналогично bash/perl) или десктопные приложения (.exe, elm)

только за эти строки автора и модератора новости надо банить. этож надо такое пропустить...

golodranez ★★★★
()

>программ в легкой и непринужденной, веселой (fun) манере

если бы в очень увлекательной, то была бы совсем укатайка

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

Ок, ставим вопрос по-другому. А если не использовать особенности платформ?

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

>> А чем Qt хуже JVM и дотнета? Тем, что быстрее и позволяет с помощью условной компиляции лучше использовать особенности каждой из платформ?

Хуже тем, что "устаревшее", "вчерашний день", и вообще это "не модно", и это не "современная новая, прогрессивная технология".

А на то, что "современная, модная прогрессивная технология от M$" являет собой дикий тормоз и набор костылей и подпорок, состоит из индусокода чуть более чем полностью, является маркетинговым высером и расчитана на мартышек - как всегда всем пох...

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

>А на то, что "современная, модная прогрессивная технология от M$" являет собой дикий тормоз и набор костылей и подпорок

Это ты о чём?

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

> состоит из индусокода чуть более чем полностью

Ну, из него он ТАМ, у нас Мигель это исправил.

> дикий тормоз и набор костылей и подпорок

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

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

>Спасибо. Работает. И стало НАМНОГО быстрее.

Конечно быстрее, без системных вызовов-то. Ещё чуточку быстрее станет, если нью и делит пометить как inline. По хорошему надо ещё _value и value() сделать константными, но в данном случае это прироста не даёт. Осталось лишь играться к ключами компиляции и изобретать ещё более специализированный аллокатор.

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

>> Это ты о чём?

Да обо всех их высерах, включая дотнет

>> Ну, из него он ТАМ, у нас Мигель это исправил.

Горбатого могила исправит.

>> ихний сборщик мусора настолько бажен, что до сих пор не поглотил себя вместе с самим дотнетом

Наличие этого сборщика уже кагбэ намекает. Нормальные люди не мусорят.

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

> Чего только не сделают люди, чтобы С++ не изучать.

[пожимая плечами] зачем учить умирающие, плохо спроектированные языки...

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

Хорошо спроектированные ещё не написали :}

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

>Да обо всех их высерах, включая дотнет

Ну, у нас тут, вроде, Fun и Java обсуждаются :)

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

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

Альтернатива? (Стек - это не альтернатива, так как объект на стеке ты не можешь вернуть)

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

> Производительностью. Ы-ы-ы-ы...

[зевая] Да кому она нужна, ваша "производительность". Вы газовую динамику, что ли, обсчитываете? Не говорите ерунды. Даже производительности скриптовых языков сегодня за глаза хватает для большинства прикладных задач.

Единственная проблема жабы и дотнета - долгий старт. Вот об этом да, имеет смысл говорить.

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

>Случай в квадрате 36-80 и тасс уполномочен заявить промывали мозги сильнее

Фиг там :) Они учили тому, что не так просто определить хорошего от плохого. Типа, есть американцы хорошие, а есть плохие. Обсуждаемый вами фильм не видел, но типичный американский фильм говорит, что _все_ русские - плохие.

Почувствуйте разницу.

У нас это прошло уже вскоре после войны (в таком духе только послевоенные фильмы про немцев снимались... И то не все)

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

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

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

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

>Альтернатива? (Стек - это не альтернатива, так как объект на стеке ты не можешь вернуть)

У тебя на голове сидит мозговой жаболизняк. Стряхни его.

Теперь поговорим. Я _могу_ вернуть объект на стеке. Да, это означает его копирование (перенос в c++0x), ну и что? Мало того, что в примере данные с запасом влезут в регистры, так к тому же по праздникам в c++ случается оптимизация хвостовой рекурсии.

Ну а если совсем плохо дело, то можно пользовать функциями, пишущими в глобальную (быть может, для треда) переменную.

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

>Теперь поговорим. Я _могу_ вернуть объект на стеке.

Я, наверное, туплю. Или ты.

Приведи пример. Закажи в методе метод на стеке и верни ссылку на него его в вызывающий метод.

>Да, это означает его копирование ну и что?

Хм. Приведи мне пример и давай отбенчим. Что-то мне подсказывает, что этот вариант будет ещё медленнее, чем с хипом.

>Ну а если совсем плохо дело, то можно пользовать функциями, пишущими в глобальную (быть может, для треда) переменную.

Давай примеры. Отбенчим.

KRoN73 ★★★★★
()

There is a great disturbance in the Force.

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

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

Позвольте узнать, а зачем?

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

Я, наверное, туплю. Или ты.

Да, что-то тут не чисто. Я имею ввиду это:

  int value() const
  {
    if (_value <= 2)
      return 1;
    /*
            Fib *f1 = new Fib(_value - 1);
            Fib *f2 = new Fib(_value - 2);
            int n1 = f1->value();
            int n2 = f2->value();
            delete(f1);
            delete(f2);
            return n1+n2;
    */
    return Fib(_value - 1).value() + Fib(_value - 2).value();
  }

Работает в 4 раза быстрее (и я немного удивлён, что так медленно).

Закажи в методе метод на стеке

Для меня это звучит как «Ехал гилер через гитлер видит гитлер гитлер гитлер»...

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

Что-то я не пойму, мужики, а почему нужен класс Fib? Это ведь дополнительный системный вызов (new) разве не?

Или смысл именно в классе Fib? Ну если в классе Fib - то нужно писать аллокатор памяти, думаю ускорит вполне себе заметно.

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