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 ()
Ответ на: комментарий от AndreiBA

>fAn = ВЕНТИЛЯТОР (веер, опахало)

>Вы уж определитесь... =)

Язык называется FAN, чё уж определяться? fandev.org

Karapuz ★★★★★
() автор топика

Во! Как вам такая задачка?

class Ackermann
{
    private final int _m, _n;

    Ackermann(int m, int n)
    {
        _m = m;
        _n = n;
    }

    static int Ack(int m, int n) { return (new Ackermann(m, n)).value(); }

    public int value()
    {
        if(_m == 0)
            return _n + 1;

        if(_n == 0)
            return Ack(_m-1, 1);

        return Ack(_m-1, Ack(_m, _n-1));
    }

    public static void main(String[] argv)
    {
//        for(int i=0; i<100; i++)
        {
            Ackermann x = new Ackermann(3, 12);
            System.out.println(x.value());
        }
    }
}

...

Хотя, поиграл, поиграл - не нравится. Она на Си++ тоже на стеке решается, так что неизбежены вопросы :) Как бы придумать простой тест, но с передачей объектов в нём?...

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

>>fAn = ВЕНТИЛЯТОР (веер, опахало)

>>Вы уж определитесь... =) > Язык называется FAN, чё уж определяться? fandev.org

к слову fan на шведском и датском это что-то типа нашего "бля" или "ЁТМ".

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

>к слову fan на шведском и датском это что-то типа нашего "бля" или "ЁТМ".

Гугль транслейт со шведского «fan» никак не переводит, а с датского переводит как «вентилятор» :)

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

Многое, но далеко не всё :) Как только начинается реальной сложности проект с долгоживущими объектами - начинается жонглирование new/delete и передача ссылок...

KRoN73 ★★★★★
()

Ещё одна лишняя, никому не нужная сущность.

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

Если нужно создание объектов не в стеке, а в куче, попробуй так:

class HeapTest { public: void DestroyTest(){ delete this; } private: ~HeapTest(); };

И юзать так

HeapTest * ptr = new HeapTest; ptr->DestroyTest()

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

>опенофис. он стартует 20 секунд

>Уже давно нет.

врёшь и не краснеешь. дебьян сид, 2.6.30, 2.83ГГц, 2ГБ. ОО стартует 20 сек. по секундомеру.

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

ORLY?

: show openoffice.org-writer
Пакет: openoffice.org-writer
Состояние: установлен
Автоматически установлен: нет
Версия: 1:3.1.1-1
: time ooffice -writer

real    0m5.902s
user    0m0.000s
sys     0m0.052s
Deleted
()
Ответ на: комментарий от legolegs

>>Она на Си++ тоже на стеке решается

>На c++ много чего на стеке решается.

В жабе размещение на куче это O(1), т.к gc дефрагментирует память и поэтому достаточно прибавить размер объекта к указателю на вершину кучи. Так что в жабе куча это примерно как стек.

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

>В голову лезут задачи коммивояжёра, поиска путей в лабиринте, расстановки ферзей... Всё не то, блин...

Бинарное дерево, самобалансирующиеся, с добавлением и удалением элементов.

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

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

Да блин, сделайте вы калькулятор - проще уже некуда. Понаделать таких калькуляторов тыщу, заставить их всех выполнить простейшее арифметическое действие - занести значение 0 в поля a и b, сложить, умножить. Вот тебе и будет проверка времени создания, удаления объекта, доступа к полям и методам. В чем проблема?

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

> гугль транслейт со шведского «fan» никак не переводит, а с датского переводит как «вентилятор» :)

Не доказательство -- он на шведский простое "goddamn" перевести не может, видимо там ругательства не дописали ещё (в отличие от русского).

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

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

А вот еще фееричный тест, http://www.rsdn.ru/forum/java/3531888.aspx на мультипоточность

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

>Так что в жабе куча это примерно как стек.

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

Karapuz ★★★★★
() автор топика

Возвращаясь к сабжу. Они туда даже генерацию флеша запихнули :)

using web
using webapp
using testWeb

class FlashTest : Widget
{

  new make()
  {
    add(Flash { label="Red";    text="This should be red!";    bg="#f88" })
    add(Flash { label="Yellow"; text="This should be yellow!"; bg="#ff8" })
    add(Flash { label="Green";  text="This should be green!";  bg="#8f8" })
  }

  override Void onGet()
  {
    head.title.w("Flash").titleEnd
    body.h1.w("Flash").h1End
    children.each |Widget w| { w.onGet }
    body.hr
    body.p
    body.button("value='Refresh' onclick='window.location.reload(true);'")
    body.pEnd
  }

}
KRoN73 ★★★★★
()

Ну сколько уже можно языков придумывать?! Каждая тварь норовит свой синтаксис выдумать!

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

> В жабе размещение на куче это O(1), т.к gc дефрагментирует память и поэтому достаточно прибавить размер объекта к указателю на вершину кучи. Так что в жабе куча это примерно как стек.

Так то оно так, но вот удаление такого объекта уже дороже. Я что-то слышал, что в jvm собирались escape analysis делать и объекты, не выходящие за пределы метода, в стеке размещать.

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

интересно не такой тест, а приблизительно такой:

#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <time.h>
#include <new>

#define PATH_LENGTH 10000
#define DESTROY_PATH_LENGTH 50
#define CICLES 400000

class Node
{
  size_t size_;
  Node* link_;
  void destroy_link_ ()
  {
    Node* link = link_;
    link_ = link_->link_;
    free(link);
  }
  void destroy_ (Node* top, unsigned int count = (rand()*DESTROY_PATH_LENGTH)/RAND_MAX)
  {
    if(!count)
    {
      if(link_ != top)
      {
        destroy_link_();
      }
      else
      {
        link_->destroy_(top, count);
      }
    }
    else
    {
      link_->destroy_(top, count-1);
    }
  }
public:
  Node (Node* link, size_t size)
    :link_(link), size_(size)
  {
  }
  Node ()
  {
    link_ = this;
    size_ = 0;
  }
  void create()
  {
    size_t size = sizeof(Node) + rand();
    void* newplace = malloc(size);
    Node* next = new (newplace) Node(link_, size - sizeof(Node));
    link_ = next;
  }
  void destroy ()
  {
    destroy_(this);
  }
};

int main(int, char**)
{
  srand((unsigned)time(0));
  Node* node = new Node();
  for(int i=0; i< PATH_LENGTH; i++)
  {
    node->create();
  }
  double t1 = (double)time(0);
  for(int i=0; i< CICLES; i++)
  {
    node->create();
    node->destroy();
  }
  double t2 = (double)time(0);
  std::cout << (t2-t1) << std::endl;
  std::cin.get();
  return 0;
}

не знаю как его на яве переписать интересность в том что он тестирует одновременно и рекурсию и создание/уничтожение объектов разных размеров

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

оно интересно тем, что производительность дебажной версии незначительно отличается от производительности, не дебажной версии

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

Легко делается свой ГПСЧ с одинаковой формулой и начальным зерном для всех.

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

Хороший тест
главное что аналог на java культурненько сливает c++'су

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