LINUX.ORG.RU

GCC переходит на С++ компиляцию самого себя с целью улучшения качества кода

 ,


3

4

Для начала изменен только bootstrap код. Цель — улучшение качества кода (поскольку С++ жестче работает с типами). Когда там появятся классы и темплейты?.. Официально заявленные причины использовать С++:

  • C++ — стандартизованный, популярный язык.
  • C++ — практически надмножество C90, используемого внутри GCC.
  • Совместимый с С C++ код так же эффективен, как просто код C.
  • C++ поддерживает более чистый код во многих важных ситуациях.
  • C++ позволяет легче создавать и поддерживать четкие интерфейсы.
  • C++ никогда не требует более кривого кода.
  • C++ не панацея, но улучшение.

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Silent (всего исправлений: 6)
Ответ на: комментарий от anonymous

Каждый

#include <cstring>
#include <fstream>
#include <iostream>
using namespace std;

unsigned char out[] = {
0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x3e,0x00,0x01,0x00,0x00,0x00,0xb0,0x00,0x40,0x00,0x00,0x00,
0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x38,0x00,0x02,0x00,0x40,0x00,
0x04,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x00,0x00,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xcd,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xd0,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0xd0,0x00,0x60,0x00,0x00,0x00,
0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0xba,0x07,0x00,0x00,
0x00,0xb9,0xd0,0x00,0x60,0x00,0xbb,0x01,0x00,0x00,0x00,0xb8,0x04,0x00,0x00,
0x00,0xcd,0x80,0xb8,0x01,0x00,0x00,0x00,0xcd,0x80,0x00,0x00,0x00,0x41,0x3a,
0x20,0x30,0x30,0x30,0x0a,0x00,0x2e,0x73,0x68,0x73,0x74,0x72,0x74,0x61,0x62,
0x00,0x2e,0x74,0x65,0x78,0x74,0x00,0x2e,0x64,0x61,0x74,0x61,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xb0,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xb0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd0,0x00,0x60,0x00,0x00,0x00,
0x00,0x00,0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00 };

int main()
{
	int value;
	char program[] = "123;exit;";

	char* p = strtok( program, ";" );
	while( p )
	{
		if( !strcmp( p, "exit" ) )
			break;

		value = atoi( p );
		p = strtok( NULL, ";" );
	}	

	out[ 211 ] = '0' + value / 100;
	out[ 212 ] = '0' + value / 10 % 10;
	out[ 213 ] = '0' + value % 10;

	ofstream( "b.out", ios::binary ).write( (char*) out, sizeof(out) );
}

компилятор для примитивного (но не такого как ты) «ЯП» в elf64, где тут интерпретация или симуляций?

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

где тут интерпретация или симуляций?

я думал ты спросишь где тут C++

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

Я уже пару страниц подозреваю, что вы просто демагог и софист — спасибо, что подтвердили, а то бы я ещё время потратил.

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

Я уже пару страниц подозреваю, что вы просто демагог и софист — спасибо, что подтвердили,

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

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

и заметь я изначально придерживаюсь одного мнения: есть интерпретатор - есть VM, а ты делаешь прямо противоположные заявления

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

есть интерпретатор - есть VM,

То есть python у нас VM, а C# и Java (на x86) — не VM, раз там JIT? И VirtualBox тоже не VM, да? Я вообще обсуждал тезис товарища, что якобы LLVM по определению говно, раз там некое VM.

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

а C# и Java (на x86) — не VM, раз там JIT?

JIT там лишь дополнительная возможность

И VirtualBox тоже не VM, да?

VM, т.к. симуляция - но это не имеет отношения к компиляторам, потому в предыдущем комментарии я пропустил ее

Я вообще обсуждал тезис товарища, что якобы LLVM по определению говно, раз там некое VM.

он не прав

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

он не прав

А, то есть вам просто хотелось поиграться терминами и побыть формалистом, я понял ))

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

.NET сразу был с JIT и только с ним.

не знал, спасибо за информацию

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