LINUX.ORG.RU

Не, мне вот интересно - а каким макаром ты собрался хендлить отсутствие сборки мусора без вдумывания в код? А если ты всё-таки собрался вдумываться, то тебе всё равно придется перебирать всё вручную.

Pavval ★★★★★
()

ССЗБ, нужно было сразу выбирать современный производительный язык.

anonymous
()

Вручную переводить код нет охоты из-за его большого объема.
Желательно в виде standalone-программы и опенсорсный.

Пишется на лиспе за вечер, в чем проблема?

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

а каким макаром ты собрался хендлить отсутствие сборки мусора без вдумывания в код.

Если ты про динамическую аллокацию памяти для массивов, списков и т. п. - Standard Template Library. Для остального - можно через классы реализовать.

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

Для такого вечера нужна бутылка хорошего коньяка.

anonymous
()

Подпишусь, штоле.

Всем откликнувшимся спасибо.

Можешь не благодарить :3

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

[code=java]
Circle newStandardCircle() {
return new Circle(10);
}

void processCircle(Circle circle) {
System.out.println(circle.radius);
}

void doWork() {
Circle circle = newStandardCircle();
processCircle(circle);
}
[/code]
Переведи каждую функцию на С++.

Legioner ★★★★★
()

Разыскивается конвертер Java2С++

Советую запостить это в Job. Выйдет быстрее и лучше.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Legioner

Переведи каждую функцию на С++

Circle newStandardCircle() {
	return Circle(10);
}

void processCircle(Circle& circle) {
	std::cout << circle.radius << std::endl;
}

void doWork() {
	Circle& circle = newStandardCircle();  // Создаётся новый объект
	processCircle(circle);
	// а здесь он автоматически удаляется
}
static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Circle& circle = newStandardCircle(); // Создаётся новый объект

Лишний амперсанд.

И код не эквивалентен в общем случае.

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

Отлично. Следующая итерация:

Circle globalCircleVar = null;

void processCircle(Circle circle) {
    System.out.println(circle.radius);
    if (globalCircleVar != null) {
        System.out.println(globalCircleVar.radius);
    }
    globalCircleVar = circle;

}

Приведи измененный текст процедуры processCircle. Остальные, естественно, без изменений.

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

Как все запущено... Возвращать объект, создаваемый на стеке...

если под Circle лежит только радиус, т.е. один int, то это самый эффективный способ, а так да - для общего случая это неприемлемо

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

А если завтра там появится vtable (что прилично любому уважающему себя классу, хотя бы иметь виртуальный деструктор)? Не стыдно - строить код в рассчете на интимные детали реализации?

ЗЫ Там, по идее, еще должны лежать координаты центра... Но это уже вторичный аргумент.

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

Да ладно, на смарт поинтерах можно сделать, просто кода будет больше.

Но я это не к тому, что java2c++ сделать легко. Не подумай ничего такого.

Кроме того йава она ведь не только уборщиком сильна, у неё ведь стандартная библиотека - огого.

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

А если завтра там появится vtable

то все-равно будет намного быстрее

Не стыдно - строить код в рассчете на интимные детали реализации?

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

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

Там, по идее, еще должны лежать координаты центра.

и? RVO убережет от копирования, а LTO и/или inline еще и на регистры переложит

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

Да ладно, на смарт поинтерах можно сделать, просто кода будет больше.

Это уже ближе, но смартпоинтеры спотыкаются на циклических ссылках. Для полноценного конвертера обязательно нужен GC.

Кроме того йава она ведь не только уборщиком сильна, у неё ведь стандартная библиотека - огого.

Ну взять и сконвертировать эту стандартную библиотеку. Стресс-тест для конвертера.

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

Вот в этом как раз смысла и нет, потому что pypy + критичные модули вручную на си.

anonymous
()
Ответ на: комментарий от Legioner
std::shared_ptr<Circle> globalCircleVar;

std::shared_ptr<Circle> newStandardCircle()
{
    return std::shared_ptr<Circle>(new Circle {10});
}

void processCircle(const std::shared_ptr<Circle> &circle)
{
    std::cout << circle->radius << std::endl;
    if (globalCircleVar != nullptr) {
        std::cout << globalCircleVar->radius << std::endl;
    }
    globalCircleVar = circle;
}

void doWork()
{
    std::shared_ptr<Circle> circle = newStandardCircle();
    processCircle(circle);
    processCircle(circle);
}

А вообще должен быть gc_ptr, конечно.

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

которая ес-но не должна быть преждевременной,

Оптимизация в коде сниппетс - это именно что преждевременно.

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

Класс. Еще и на фичи компилятора завязываться будем.

Кусок кода, приведенный для иллюстрации идеи - не должен быть оптимизирован, дабы не вводить некрепкие умы в заблуждение. Кроме случаев иллюстрации ИМЕННО оптимизации.

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

Класс. Еще и на фичи компилятора завязываться будем.

RVO компиляторы еще в 90-х научились, и он здорово помогает, см. ниже

Кусок кода, приведенный для иллюстрации идеи - не должен быть оптимизирован, дабы не вводить некрепкие умы в заблуждение.

string add_space( const string& s ) { return s + ' '; }

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

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

ССЗБ, нужно было сразу выбирать современный производительный язык.

Python?

Недостаточно современный.

anonymous
()
Ответ на: комментарий от wota
String addSpace(String s) { return s + " "; }

Возвращается ссылка, за временем жизни объекта следит GC, «простой и безопасный код». Даже думать о всяких там RVO и r-value references не нужно.

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

Ruby? Говорят, что у него проблемы с производительностью.

anonymous
()

хип освобождать как ты будешь?

ладно, хрен с ним с malloc/calloc/free, но как твой конвертер определит, в каком месте высвобождать память?

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

лучше лисп-машину иметь

или бородатых си-программистов

потому что языки программирования созданы не для того, чтобы на них дрочили

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

RVO компиляторы еще в 90-х научились

Это не важно. В стандарте языка С++ про это ничего нет. Демокод должен быть демокодом. Простым. Понятным. Корректным. И демонстрирующим ТОЛЬКО то, что он должен демонстрировать. В рамках стандарта языка, и только.

покажи свой вариант

Нечестный пример. Потому что используются коннотации в человеском сознании;)

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

сконвертировать эту стандартную библиотеку.

ServerSocket serverSocket = new ServerSocket(12345);
Socket clientSocket = serverSocket.accept();

Боюсь без шибко умного конвертера тут не разобраться.

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

Вопрос, кстати, довольно общий. Спецификация Java не требует от реализации какой-то определенной модели сборки мусора, это может быть и обычный подсчет ссылок.

note173 ★★★★★
()

Не знаю, как для C++, а вот для D был такой конвертер: TioPort

оно использовалось в DWT, который есть порт SWT с Java

при желании, можно похакать ручками

ещё можно потыкать веточкой molt

хотя D сам по себе ближе к Javа, чем к C++. В С++ можно наступить на грабли с трансляцией анонимных классов, например (в D специально для DWT запилили эту фичу в язык и компилятор)

да, и в принципе можно cпециально для плюсов потыкать что-нибудь из состава GCJ, Harmony.

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

Пишется на лиспе за вечер, в чем проблема?

коньяка нет, вискарь кончился.

самому хакать пока некогда, есть дела посрочнее, но интересно — напиши основную идею поделки, как можно закодить это в лисп. так чтобы не писать плагин к clang/gcc MEL, а побыстрее.

до кучи, с конверсией С++ в D похожая история

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

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

Боюсь без шибко умного конвертера тут не разобраться.

как собираетесь реализовывать в плюсах явашные вложенные анонимные классы?

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

https://code.google.com/a/eclipselabs.org/p/j2c/

That said, j2c successfully converts most of OpenJDK 6 and SWT 3.7 to C++ that compiles and passes a quick ocular inspection. Most language features of Java 1.6 are covered (i e you'll still need a JDK and runtime).

хм, любопытно.. там же в SWT вложеных анонимных классов дофига, значит, какой-то workaround придумали

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

Они ничем не отличаются от обычных классов.

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

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

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