LINUX.ORG.RU

Google разрабатывает язык Noop для замены Java

 ,


1

0

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

Noop говорит ДА:

  • Внедрению зависимостей в языке
  • Тестируем ост
  • Неизменяемости
  • Синтаксису направленному на улучшение читабельности кода
  • Никогда не устаревающей документации
  • Свойствам, сильной типизации и разумной современной библиотеке

Noop говорит НЕТ:

  • Любой статике
  • Наследованию (subclassing)
  • Примитивам
  • Ненужным шаблонам

Исходные коды доступны под Apache Licence 2.0

>>> Google urges developers to get in loop with Noop

★★☆☆

Проверено: Shaman007 ()
Ответ на: комментарий от lester

если мерять после чтения из файла - 0.015сек

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

g++ ./test.cpp -o ./test

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <vector>

/**********************************************************************************************/
int main( int argc, char **argv )
{
	char* buf = (char*) malloc( 16500000 );
	std::vector<char*> words;
	words.reserve( 2000000 );

	FILE* file = fopen( "2.txt", "r" );
	if( file )
	{
		size_t len = fread( buf, 1, 16500000, file );
		buf[ len ] = 0;
		char* sw = buf;

		clock_t start = clock();

		for( size_t i = 0 ; i < len ; ++i )
		{
			if( buf[ i ] == ' ' )
			{
				words.push_back( sw );
				buf[ i ] = 0;
				sw = buf + i + 1;
			}
		}

		if( sw < buf + len )
			words.push_back( sw );

		clock_t end = clock();
		float interval = 1.0f * ( end - start ) / CLOCKS_PER_SEC;
		printf( "Time: %f\n", interval );

		fclose( file );
	}

	return 0;
}
lester ★★★★
()
Ответ на: комментарий от af5

конечно, перед fclose( ну или выше - где удобней ), добавьте строку:

printf( "Count: %d\n", words.size() );

lester ★★★★
()

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

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

> По сравнению с Java, конечно, большой прогресс.

Разве что вывод типов.

> Но сабж отстаёт от Scala в развитии года на 3

Да не существует сабжа. Почитай его вики - там же дети, и идеи у них детские.

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

Ого, LOR bydlocoder contest «посчитай число слов»?

Запишите и меня.

gcc -Wall -O2 -pipe test.c -otest

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <errno.h>

void die(const char *msg)
{
    perror (msg);
    exit (EXIT_FAILURE);
}

char *read_file(const char *fname, unsigned *size)
{
    struct stat st;
    if (stat(fname, &st) == 0 && S_ISREG(st.st_mode)) {
        int fd = open (fname, O_RDONLY);
        if (fd != -1) {
            unsigned pos = 0;
            char *data = malloc (st.st_size);
            while (pos < st.st_size) {
                ssize_t bytes = read (fd, data+pos, st.st_size-pos);
                if (bytes == -1) {
                    if (errno == EAGAIN || errno == EINTR) continue;
                    close (fd);
                    free (data);
                    return NULL;
                }
                if (bytes == 0) break;
                pos += bytes;
            }
            *size = pos;
            return data;
        }
    }
    return NULL;
}

int main(int argc, char **argv)
{
    char *data;
    unsigned size = 0;
    struct timeval start, finish;
    if (argc < 2) {
        printf ("Missing filename\n");
        return 1;
    }
    gettimeofday (&start, NULL);
    data = read_file (argv[1], &size);
    if (data) {
        char *ptr = data, *end = data + size;
        int count = 0;
        while (ptr < end) {
            while (ptr < end && *ptr == 0x20) ptr++;
            if (ptr < end) {
                count++;
                while (ptr < end && *ptr != 0x20) ptr++;
            }
        }
        gettimeofday (&finish, NULL);
        printf ("%d\n", count);
        if (finish.tv_usec < start.tv_usec) {
            finish.tv_usec -= start.tv_usec - 1000000;
            start.tv_sec--;
        } else finish.tv_usec -= start.tv_usec;
        finish.tv_sec -= start.tv_sec;
        printf ("Time: %ld ms\n", (long)(finish.tv_sec*1000 + finish.tv_usec/1000));
        free (data);
    } else die("read_file");
    return 0;
}
linuxfan
()
Ответ на: комментарий от linuxfan

> "посчитай число слов"?

сразу видно кулпрогера, который пишет полное решение даже не поняв/прочитав условия :)

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

что означает, что его код объективно хуже - т.к. при той же скорости делает меньше, кулпрогеры такие кулпрогеры :)

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

> которые число слов читают

ты так и не прочитал условие? а ты упертый :)

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

>> По сравнению с Java, конечно, большой прогресс.

> Разве что вывод типов.

Ну ещё:

* final is the default, use the mutable keyword to make a variable which may change its reference.

* encourage functional style by having built-in predicate, filter, etc on collections, as well as convenient functions/blocks/closures/lambdas

* Avoid null, Types shouldn't allow null value by default

>> Но сабж отстаёт от Scala в развитии года на 3

> Да не существует сабжа. Почитай его вики - там же дети, и идеи у них детские.

Значит, отстают на 8 лет :)

Вобщем, и смотреть пока не на что, и новизны особой нет. Нет бы dependent types в массы вынести. :)

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

>вывод числа слов лишь проверка, а не цель

А, тебе нужно наглядное доказательство того, что джава медленнее нативно компилируемого кода? Тогда надо числодробилками заняться. Что-нибудь вроде подсчета дискриминанта достаточно больших матриц. Различие станет особенно сильном при использовании интеловского компилятора.

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

> Кстати, получишь симпаффку, если догадаешься, почему быстродействие почти одинаковое.

куда мне, быдлокодеру, гадать :) из того, что у меня некорректного - нет free( но он на скорость абсолютно не влияет - специально только что проверил ), а то что у тебя там криво работает - сам разбирайся

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

Не видать тебе симпы как своих ушей :)

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

Кстати, ты не Ъ крестокодер: malloc вместо std::vector<char> + vector::resize и printf вместо std::cout выдает в тебе... питонщика, наверное.

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

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

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

> Кстати, ты не Ъ крестокодер: malloc вместо std::vector<char> + vector::resize и printf вместо std::cout выдает в тебе... питонщика, наверное.

Бгг. Дружок, это скорее повадки сишника.

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

> это настолько ничтожная задача для современного железа

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

> Кстати, ты не Ъ крестокодер


никогда не претендовал на такое звание

> выдает в тебе... питонщика, наверное.


fail

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

> Настоящий сишник нафигачил бы статических массивов вместо malloc(const)

Много ты знаешь о настоящих сишниках...

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

> Настоящий сишник нафигачил бы статических массивов вместо malloc(const)

сколько раз повторять - быдлокодер я, не знаю толком ни С, ни С++, вот и пишу как попало :)

П.С. а то что у вас решение получилось медленное и вы не умеете читать - не переживайте, вы же Ъ, что вам такие мелочи

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

>Много ты знаешь о настоящих сишниках...

Да я void* в голодные девяностые ел! А "int main(int argc,char**argv)" вообще с молоком матери впитал!

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

ладно - поклоуничали и хватит, целью этого крайне примитивного примера было показать, что таки написание кода в сишном стиле( в том числе и в С++ ) - не такое уж и зло как представляют любители Java, Lisp и других языков, и может дать весомый прирост в скорости, на сим разрешите откланятся

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

>П.С. а то что у вас решение получилось медленное и вы не умеете читать - не переживайте, вы же Ъ, что вам такие мелочи

Ъ не ходят по ссылкам и особо не вникают в суть очередного флейма. Я увидел wc -w, я слепил подобие wc -w.

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

Мне при ковырянии в чужом коде больше нравится видеть короткий, явный и понятный split(" "), чем ахтунг с ручным закатом солнца и битьём строк по пробелу. Ситуаций, где в рилтайме надо крошить на слова мегабайты строк, не так уж и много, и там можно ещё шустрее сделать.

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

> чем ахтунг с ручным закатом солнца и битьём строк по пробелу.

если я вынесу этот код в отдельную функцию и назову ее split, вам станет легче?

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

>не такое уж и зло как представляют любители Java

Эти вообще не код пишут, а исключительно фреймворки используют.

>Lisp

Любое практическое написание кода в миллион раз сложнее, утомительнее и менее изящно, чем изотерическое программирование на гипотетическом DSL, которое проповедуют идеологи этой конфессии.

>и может дать весомый прирост в скорости

Ъ энтерпрайз достигает скорости за счет покупки более крутого железа, ведь это копейки по сравнению с возможными выплатами Ъ энтерпрайзному разработчику, повредившемуся в уме на рабочем месте при переводе алгоритма с bubble sort на quick sort.

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

> если я вынесу этот код в отдельную функцию и назову ее split, вам станет легче?

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

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

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

ну вот и договорились

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

>Мне при ковырянии в чужом коде больше нравится видеть короткий, явный и понятный split(" "), чем ахтунг с ручным закатом солнца и битьём строк по пробелу.

Я правильно понимаю, что для тебя любая задача, не укладывающаяся в конечное число последовательных выховов библиотечных функций с короткими и понятными именами -- это "ахтунг с ручным закатом солнца"? Тогда рекомендую тебе .NET и C# -- там даже язык меняют, чтобы тебе, не дай бог, не пришлось волокать подводную лодку по пескам пустыни Каракумы.

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

> ну неужели в жабе не существует уже такой функции?

это вопрос к тем кто пишет на Java и хорошо ее знает, т.е не ко мне

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

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

Именно! У меня умишко скудный, память плохая, много мелкого непонятного кода не усваиваю.

> Тогда рекомендую тебе .NET и C# -- там даже язык меняют, чтобы тебе, не дай бог, не пришлось волокать подводную лодку по пескам пустыни Каракумы.


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

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

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

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

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

> Я немедленно пишу (defmacro проволочь-подводную-лодку-по-пескам-пустыни-каракумы ...)

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

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

> целью этого крайне примитивного примера было показать, что таки написание кода в сишном стиле( в том числе и в С++ ) - не такое уж и зло как представляют любители Java, Lisp и других языков,

Ага. Тока ваш пример раза в три длиннее жабокода (при меньшей функциональности).

> и может дать весомый прирост в скорости,

Да никто не спорит. Только она не особо нужна, эта ваша скорость.

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

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

Defmacro nobiscum! =)

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

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

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

Починено во имя эзотерического программирования на LISP'е и мифических элитных NASA'овских лиспокодеров!

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

> Ага. Тока ваш пример раза в три длиннее жабокода

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

> Только она не особо нужна, эта ваша скорость.


против такого аргументов у меня нет :)

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

> по сравнению с возможными выплатами Ъ энтерпрайзному разработчику, повредившемуся в уме на рабочем месте при переводе алгоритма с bubble sort на quick sort.

А какая связь между алгоритмом сортировки и языком разработки?

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

>код действительно должен быть компактным и должен быть удобно разделен на функции

Когда я был юн и наивен, я тоже так думал. С тех пор я повзрослел, сменил пару мест работы и осознал, что в этом мире преобладает говнокод, размноженный с помощью Ctrl-C/Ctrl-V на тысячи строк. Компактный структурированный код видится мне чем-то из области изотерического программирования, но, увы, эта потаенная нирвана открывается лишь тем, кто сполна вкусил запретных скобочных веществ. Реальность же изобилует костыльным трудноподдерживаемым кодом, в который к тому же требуют еще и добавлять новые фичи.

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

>А какая связь между алгоритмом сортировки и языком разработки?

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

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

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

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

Угу. Но есть нюанс: в GC-языках легче вынести что-то в функцию. А в сях, если функция вернёт сложную структуру на куче, с ней надо будет обращаться очень, очень осторожно - чтобы не забыть почистить память и не снести лишнего.

Ну и, большой объём кода сложнее поддерживать.

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