LINUX.ORG.RU

Сообщения metadeu5

 

Триумф фунциональщины и сдвиг парадигмы?

Форум — Talks

Наблюдается активное внедрение функциональщины повсеместно, даже в таких, казалось бы, захолустьях как C++ и Java. Функциональные языки активно переманивают разработчиков в привычных средств (Scala), а то и целиком захватывают целые направления (Erlang). Языка без поддержки хотя бы базовых элементов функциональщины уже и не найти.

В связи с этим несколько вопросов:

1. Как видно, преимущества функциональщина имеет и без чистоты. Ждет ли нас ползучее проникновение чистоты в языки или этот барьер не будет преодолен?

2. Заметно сращивание чистых языков и систем доказательства теорем, что дало толчок этому процессу — зависимые типы?

3. Может нам уже пора писать на Idris и Agda, минуя Haskell и т.п.?

4. Ждут ли нас статически типизируемые макросы на AST?

5. Ну и в качестве легкого троллинга: сколько усилий нужно, чтобы написать на чистом языке (с зависимыми типами или без) что-то типа Qt, нужно ли оно и сколько будет компилироваться?

 

metadeu5
()

Нужен язык для Crypto, GUI, Web

Форум — Development

Есть желание реализовать опердень в которой будет использоваться криптография, сетевой сервис (в том числе, возможно, веб) и GUI к ней. Нужно, чтобы продукт был в виде статически слинкованного бинарника, с минимальным футпринтом по памяти и максимальным быстродействием. Хотелось бы ещё удобство разработки в виде всяких GC, модульности и прочего, но тут уже противоречия начинаются. Что посоветуете? C++ предлагать в последнюю очередь.

UPD: Немного добавлю из того, что смотрел:

- D2: давно его не трогал, насколько он там заматерел? Судя по количеству изменений в последней версии он все ещё игровая площадка для Александреску?

- Go: что там с GUI?

UPD2: И да, желательно кроссплатформенно, вместе с гуем.

 , ,

metadeu5
()

Netty и ab не грузят CPU на 100%

Форум — Web-development

Что-то не пойму в чем проблема: есть HTTP-сервер на Netty 3.2.6:

public class HttpServer
{
    private final String name;
	private final int port;
    private Channel channel;
    private InetSocketAddress socketAddress;

    public HttpServer(String name, int port)
    {
        this.name = name;
		this.port = port;
	}

    public void run(int selectorThreadCount, ThreadPoolConfig threadPoolConfig)
        throws BackEndException
	{
        ServerBootstrap bootstrap =
            new ServerBootstrap(new NioServerSocketChannelFactory(
                Executors.newFixedThreadPool(selectorThreadCount),
                new ThreadPoolExecutor(threadPoolConfig.getCorePoolSize(),
                    threadPoolConfig.getMaximumPoolSize(),
                    threadPoolConfig.getKeepAliveTime().to(TimeUnit.SECONDS),
                    TimeUnit.SECONDS, new SynchronousQueue<Runnable>())));
		bootstrap.setOption("child.tcpNoDelay", true);
        bootstrap.setOption("child.keepAlive", true);
        bootstrap.setOption("tcpNoDelay", true);
        bootstrap.setOption("keepAlive", true);
        bootstrap.setOption("receiveBufferSize", 1048576);
        bootstrap.setOption("backlog", 1000);
        bootstrap.setPipelineFactory(new HttpServerPipelineFactory());
        socketAddress = new InetSocketAddress(port);
        channel = bootstrap.bind(socketAddress);        
    }
}

public class HttpServerPipelineFactory implements ChannelPipelineFactory
{
	
    protected final HttpServerHandler handler = new HttpServerHandler();

	@Override
	public ChannelPipeline getPipeline() throws Exception {
		ChannelPipeline pipeline = Channels.pipeline();
		
        pipeline.addLast("decoder", new HttpRequestDecoder());
        pipeline.addLast("endcoder", new HttpResponseEncoder());		
        pipeline.addLast("handler", handler);
		
		return pipeline;
	}

}

public class HttpServerHandler extends SimpleChannelUpstreamHandler
{   
	@Override
	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception
    {
        HttpRequest request = (HttpRequest)e.getMessage();
        boolean keepAlive = HttpHeaders.isKeepAlive(request);
        // Build the response object.
        HttpResponse response =
            new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
        response.setContent(ChannelBuffers.copiedBuffer(
            "Hello from ServerHandler!", CharsetUtil.UTF_8));
        response.setHeader(HttpHeaders.Names.CONTENT_TYPE,
            "text/plain; charset=UTF-8");
//        HttpRequest request = (HttpRequest)message;        

        if (keepAlive)
        {
            // Add 'Content-Length' header only for a keep-alive connection.
            response.setHeader(HttpHeaders.Names.CONTENT_LENGTH,
                response.getContent().readableBytes());
            // Add keep alive header as per:
            // - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
            response.setHeader(HttpHeaders.Names.CONNECTION,
                HttpHeaders.Values.KEEP_ALIVE);
        }

        ChannelFuture future = e.getChannel().write(response);

        if (!keepAlive)
        {
            future.addListener(ChannelFutureListener.CLOSE);
        }
	}	
}

в общем проще некуда. Есть Apache ab, который запускаю с параметрами: ab -n 10000 -c 10 http://localhost:8087/

Есть машина: под офтопиком 7 x64, Core i7-3770 4 ядра + HT(?), 16ГБ ОЗУ, Java(TM) SE Runtime Environment (build 1.6.0_45-b06).

Проблема: при нагрузке не грузит CPU на 100% независимо от параметров ab и Executors pool для Netty. Максимально удалось получить около 1000 запросов/сек, при этом CPU был загружен процентов на 25%, причем половина ядер явно совсем простаивала. При увеличении уровня конкурентности в ab растет время ответа и немного падает количество запросов/сек, CPU все так же отдыхает. Если запустить несколько копий ab, то увеличивается нагрузка на CPU (максимум до 80%), растет время ответа, но общая производительность серверной части остается той же судя по всему.

Что я упустил и как такое может быть?

 , ,

metadeu5
()

Посоветуйте платформу для генерации кода Java

Форум — Development

Вконец жаба доканала, но, к сожалению, других вариантов в текущей области применения пока нет. Посоветуйте подход/набор средств для генерации кода на Java. Пока из известных платформ языков рассматриваю следующие: - из Лиспа (CL, Racket) - из Скалы (компиляция в JVM Скалы не подойдет, скорее всего, ибо нужен Ведроид) - через EMF/Xtext - из Haskell/Ocaml (опыта мало; включил скорее для полноты)

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

 , , , xtext,

metadeu5
()

RSS подписка на новые темы