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 ()

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

TestSplit.class

Товарищи, у меня есть результат:

//генерируем текстовый файл со строкой в 1000,000 слов:
$ seq -s " " 1000000 >1.txt

//тестируем жабоклассом:
$ java TestSplit
words: 1000000
time: 820

//тестируем стандартной сишной тулзой:
$ time wc -w 1.txt
1000000 1.txt

real 0m0.845s
user 0m0.836s
sys 0m0.004s

[b]как видим разница в пределах погрешности, жабокласс иногда быстрее [/b]


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

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;


public class TestSplit {

	public static void main(String[] args) throws FileNotFoundException, IOException {
        FileReader fileReader = new FileReader("1.txt");
        char[] buf = new char[8000000];
        fileReader.read(buf);
        String s = new String(buf);
        Date t0 = new Date();
        String[] words = s.split(" ");
        Date t1 = new Date();
        System.out.println("words: " + words.length);
        System.out.println("time: " + (t1.getTime() - t0.getTime()));
	}

}

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

>первый поток будет считать X*(X-1)*(X-2)...*(X/2), а второй (X/2 - 1)*(X/2 - 2)*...*2*1.

>а потом перемножить 2 получившихся числа

> Я тут использовал моск и подумал. У меня 4 ядра, в 2 потока на них считать - это неэффективно. А если бы было 4 процессора по 4 ядра? Это ж 16 потоков надо. А как разделить произвольное нечетное число на 16 равных долей? Никак

по большому счёту +/- одно умножение, ничего не сыграет. не придирайтесь. просто разбейте на 4 диапазона. по принципу a = 1/4, b = a+a, c = b+a, d = N -a-b-c. погрешность - где-то может накопиться число умножений на 1 меньше количества процессоров. но это ни на что не влияет.

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

> Пока там крестофилы вылижут все утечки и крэши из-за невалидных пойнтеров, ленивые эрлангеры по вечерам наваяют очередной твиттер,

Доо... вот прям таки на Эрланге, ага. Не на смеси Руби и Скалы %)

И кстати... не все в этом мире занимаются вебелью :)

> раскрутят его и продадут гуглю за миллиард.

А напомни мне, на чем написан Skype?

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

> раскрутят его и продадут гуглю за миллиард.
> А напомни мне, на чем написан Skype?


напомнило, что относительно недавно за тот же 1млрд был продан MySQL

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

> Доо... вот прям таки на Эрланге, ага. Не на смеси Руби и Скалы %)

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

> И кстати... не все в этом мире занимаются вебелью :)


Покажите мне пальцем, кто тут вебелью такого рода занимается?

> А напомни мне, на чем написан Skype?


Это башевый враппер над каким-нибудь лисповым сип-клиентом? Не?

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

вообще, начало XXI века принесло больше разочарований, чем ожидалось. ожидаемая чуть ли не с 2006 года Java 7 тоже не продвинула индусов далеко

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

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

То есть эрлангеры таки не претендуют на создание твиттера? :)

>> И кстати... не все в этом мире занимаются вебелью :)

> Покажите мне пальцем, кто тут вебелью такого рода занимается?

Ну ты зачем-то упомянул твиттер - типичную нафиг ненужную вебель.

>> А напомни мне, на чем написан Skype?

> Это башевый враппер над каким-нибудь лисповым сип-клиентом? Не?

Да. А унутре у него неонка^Wsbcl.core, которая мешает мирно спать Маккарти.

P.S. а вообще, базар про "написали <...> и продали за миллиард" - гниль и дешевка по определению. Вряд ли рядовым прогерам много перепало, и даже если перепало - мало какому прогеру повезет попасть в проект типа Твиттера или Скайпа. Но это безотносительно Си++, Явы, Эрланга и прочих инструментов.

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

> То есть эрлангеры таки не претендуют на создание твиттера? :)

А чего на Эрланге ещё писать-то? Числодробилку, которая в полторы тыщи раз хуже даже явы будет?

> Ну ты зачем-то упомянул твиттер - типичную нафиг ненужную вебель.


Твиттер не нужен. Дом в гористой местности и Вольво в гараже, купленные на часть вырученного баблоса с продажи твиттера - нужны %)

> P.S. а вообще, базар про "написали <...> и продали за миллиард" - гниль и дешевка по определению. Вряд ли рядовым прогерам много перепало, и даже если перепало - мало какому прогеру повезет попасть в проект типа Твиттера или Скайпа. Но это безотносительно Си++, Явы, Эрланга и прочих инструментов.


В удачно проданных стартапах даже рядовым программерам, которых наняли на дофикшивание багов и саппорт, денег по опционам тоже прилетает. Заманивать их как-то надо же? На среднюю з/п и тёмное будущее мало кто просто так клюнет.

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

>Мы все работаем на NASA, DARPA или Airbus.

Ну вот так всегда. Пока лучшие умы работают на NASA, Центризбирком не может найти программистов на C++ http://webplanet.ru/node/24269/print

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

> Но единицы из них упоминают то, что действительно мешает программистам на c++.

И что же действительно мешает программистам на с++?

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

> Закон Мура описывает количество транзисторов, а не быстродействие.

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

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

> Как видим, ни какого 10-кратного "сливания" близко не наблюдается
> это к вопросу


разве я там утверждал что Java в десять раз медленнее? меня спросили - быстро это как, я ответил - не больше чем в десять медленней С/С++, прочитайте внимательно ответы и вопросы

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

> перечитай топик, чтоб понять кого что напрягает ;)

Это намёк на то, что меня что-то напрягает? :] Бросьте, мне пофиг абсолютно. Языковые мегасрачи на лоре заводятся с целью обменяться интересной информацией и доводами. Тут тред скучный оказался, поучиться не у кого: крестовики несут стандартную неаргументированную чушь про медленность и ненужность GC; а что говорят более серьёзные парни я и так уже давно знаю. Пойти чтоль в Fan заглянуть, можеть хоть там...

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

> разве я там утверждал что Java в десять раз медленнее? меня спросили - быстро это как, я ответил - не больше чем в десять медленней С/С++,

И, заметьте, жабо не только выполнило ваш критерий; оно ещё и обработало строку в юникоде (точнее, UCS-2), да ещё и регэкспом. Т.е. алгоритм поуниверсальней плюсового будет.

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

>Мистика. У вас какая-то жабо просроченная.

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

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

> Даём. Заинтересовавшихся потом вербует агентура,

А как выйти на связь? Есть какой-то тайный знак, типа семи утюгов на подоконнике?

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

> Т.е. алгоритм поуниверсальней плюсового будет.

завтра уже попробую свой вариант прогнать, всем спокойной ночи

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

могу тогда лишь сказать вам, что я не утверждал что вы чтото утверждали, читайте внимательней =)

af5 ★★★★★
()

Я ф шоке. 15 страница треда,и?

Мочилово между жабакодерами и плюсофагами в самом разгаре, при условии ограниченного числа участвующих.

Наконец решена задача разбиения строки в массив элементов с опорой на пробелы! Как минимум курсач, по всем правилам и с защитой...

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

У меня попкорн кончился... И последняя просьба к участникам. Постарайтесь "не улетать с грешной земли". А то я с середины 14 страницы начинаю страдать провалами понимания. Не применяйте странные и непонятные среднему похапэшнику слова, такие как "эрланг". В википедию уже надоело бегать!

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

> Не применяйте странные и непонятные среднему похапэшнику слова, такие как "эрланг". В википедию уже надоело бегать!

Учись, студент. И у тебя будет дом в горах и Вольво, или что там выдают за знание Эрланга.

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

а у меня текила закончилась, тоже пойду спать.

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

>понял, как обходиться и без наследования вообще... Правда, не принял этот подход, так как часто при наследовании реально экономится многое. Но если когда-то у меня уровень наследования доходил нередко до 4-6 уровней, то сейчас обычно 2-3 уровня. При том, что, повторюсь, и код стал компактнее, и ошибки сложнее допустить :)

В ООП нужно ввести УРОВНИ наследования, сделать небольшое их количество (максимум 7). Это, с одной стороны, облегчит агрегирование графа классов и персистентность/сериализуемость, с другой стороны, приведёт в чувства программистов, которые строят гигантские иерархии наследования классов.

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

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

> Semicolons and parenthesis required

Помножим это на отсутствие наследования с возможным мультидиспатчингом, и получим... LISP

Гугль переизобретает LISP?

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

>> Semicolons and parenthesis required

> Помножим это на отсутствие наследования с возможным мультидиспатчингом, и получим... LISP

Дадада, и Питон - это тоже такой лисп %)

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

>Кроме того, мы говорим не обо мне, а о ТЫСЯЧАХ программистов, которые требуются индустрии. Вам так хочется тратить их ценное время и мозги на какую-то ерунду? Пусть лучше пишут логику приложения.

Логика современных приложений проще, чем олимпиадная задачка по поиску кратчайшего пути в ориентированном графе, вот у ТЫСЯЧ программистов и разжижились мозги до того уровня, даже пузырьковую сортировку осознать не могут.

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

> Помножим это на отсутствие наследования с возможным мультидиспатчингом, и получим... LISP

Ну, здрассссьте! Это где наследования нет, в CLOS, что ли?

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

>1) Проблемы с ручным управлением памяти бывают только при неграмотном программировании. Использование автоматического контроля за памятью удобно, но имеет оборотный эффект: выделение-освобождение памяти очень дороги, но Java-программисты про это обычно не знают.

Знаем. Они дороги в С++. В Java выделение памяти происходит очень быстро.

>2) Четкая стандартная библиотека. Насколько я понимаю, кол-во frameworks на Java уже к десятку подходит?

В Яве-то? Количество фреймворков в Java наверно за десятую тысячу перевалило...

>3) Вменяемая модульность. H-файл дает возможность быстро просмотреть функциональность модуля, не читая его код. Java в этом случае - шаг назад.

Для Java есть несколько IDE, чтобы быстро просмотреть код в тысячах файлов проекта простым кликом мышки по дереву мемберов.

>4) С++, по сравнению с C, дал возможность применить ООП, не замедляя результат и сокращая код.

С++ испортил "высокоуровневый ассемблер" C и принёс зло в индустрию программирования в виде ООП, которое на долгие годы затормозило отрасль программного обеспечения и привело к стагнации мысли по интенсивному, а не экстенсивному развитию железной составляющей компьютеров.

>Java, по сравнению с C++, увеличивает код, замедляет результат.

"Квадратные колёса лучше треугольных".

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

>мне вас жаль огорчать - но многое из 0х уже и реализовано в vc И именно поэтому ffmpeg в VC не компилируется...

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

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

Кстати, твоя поделка как себя поведет на файлах "от 8 мегабайт"? Прочитает первые 8M символов и выдаст некорректный результат?

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

>Это башевый враппер над каким-нибудь лисповым сип-клиентом? Не?

С экрана монитора на стол хлынули потоки ЖЫРА.

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

> С++ испортил "высокоуровневый ассемблер" C и принёс зло в индустрию программирования в виде ООП, которое на долгие годы затормозило отрасль программного обеспечения и привело к стагнации мысли по интенсивному, а не экстенсивному развитию железной составляющей компьютеров.

WOW! Забрал к себе в цитаты.

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

Код:

import java.io.*;
import java.util.*;

public class  TestSplit{
    public static void main(String[] args) throws FileNotFoundException, IOException {
        FileReader fileReader = new FileReader("1.txt");
        char[] buf = new char[500000];
        fileReader.read(buf);
        String s = new String(buf);
        Date t0 = new Date();
        String[] words = s.split(" ");
        Date t1 = new Date();
        System.out.println("words: " + words.length);
        System.out.println("time: " + (t1.getTime() - t0.getTime()));
    }
}
Результат:
> cd /usr/home/igor/tmp/
> javac TestSplit.java 
> java TestSplit
Exception in thread "main" java.io.FileNotFoundException: 1.txt (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at java.io.FileReader.<init>(FileReader.java:41)
	at TestSplit.main(TestSplit.java:6)
> touch 1.txt 
> java TestSplit
words: 1
time: 17
> dd if=/dev/random of=/usr/home/igor/tmp/1.txt count=1k
1024+0 records in
1024+0 records out
524288 bytes transferred in 0.121366 secs (4319891 bytes/sec)
> java TestSplit
words: 2088
time: 24
> dd if=/dev/random of=/usr/home/igor/tmp/1.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.020590 secs (50926304 bytes/sec)
> java TestSplit
words: 2092
time: 25
> dd if=/dev/random of=/usr/home/igor/tmp/1.txt bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes transferred in 0.330358 secs (31740594 bytes/sec)
> java TestSplit
words: 2110
time: 24
> java -version
java version "1.6.0_03-p4"
Java(TM) SE Runtime Environment (build 1.6.0_03-p4-igor_05_sep_2009_18_15-b00)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-p4-igor_05_sep_2009_18_15-b00, mixed mode)
> uname -a
FreeBSD rio.fire 8.0-RC1 FreeBSD 8.0-RC1 #0: Sat Sep 19 13:08:37 VOLST 2009     root@rio.fire:/usr/obj/usr/src/sys/RIO  amd64

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

вот небольшое еще уточнение

a2@nb:~$ time java TestSplit
words: 1000000
time: 763

real	0m0.984s
user	0m1.152s
sys	0m0.076s
a2@nb:~$ time wc -w 1.txt
1000000 1.txt

real	0m0.786s
user	0m0.784s
sys	0m0.000s
a2@nb:~$ 
и размер буфера поставил ближе к размеру файла

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

а вот на 2000,000 слов

a2@nb:~$ time wc -w 1.txt
2000000 1.txt

real	0m1.728s
user	0m1.704s
sys	0m0.012s
a2@nb:~$ time java TestSplit
words: 2000000
time: 1337

real	0m1.667s
user	0m1.904s
sys	0m0.244s
a2@nb:~$ 
жаба не отстаёт

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

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

af5 ★★★★★
()

Эй, кто там хотел посчитать факториал 10^157 за $5000?

$ calc

C-style arbitrary precision calculator (version 2.12.3.3)

Calc is open software. For license details type: help copyright

[Type "exit" to exit, or "help" for help.]

; n=10000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0

; trunc(n*log(n/exp(1))+1/2*log(2*pi()*n))+1

1565657055180967481722102756820148611273987894640679632976059380358669717717093 95203304435778250376673814121645696726775458472022025205672512849710392279477770 5

; quit

$ units

2450 units, 71 prefixes, 33 nonlinear units

You have: 5000 US$ - 1565657055180967481722102756820148611273987894640679632976059380358669717717093 95203304435778250376673814121645696726775458472022025205672512849710392279477770 5 * 4 bit * ( 3204 руб / gigabyte )

You want: US$

* -8.2575544e+151

/ -1.2110123e-152

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

kde4-hater
()

Надо мне здесь отметится тоже ;)

python рулит, а сабж ненужен!

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

>А чем им не угодило наследование?

+1 Присоединяюсь к вопросу.

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

>> НЕТ: * Любой статике * Наследованию (subclassing) * Примитивам

>Закапывайте.

Точно!

GladAlex ★★★★★
()
Ответ на: комментарий от kde4-hater

> 1565657055180967481722102756820148611273987894640679632976059380358669717717093 9520330443577825037667381412164569672677545847202202520567251284971039227947777 0 5

Не правильно!!!!. Даже перемножив толькак два числа: 10^157 * 10 ^156 = 10 ^ 313 и это гораздо больше твоего результата.

anonymous
()

Гугль написал Visual Basic 6.0

Без наследования, без статики, без шаблонов. И вообще [:||||||:]

keeper-andrew
()

seq -s " " 2000000 > 2.txt

/**********************************************************************************************/
int main( int argc, char **argv )
{
	clock_t start = clock();

	char* buf = (char*) calloc( 16500000, 1 );
	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;

		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 );

		fclose( file );
	}

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

у меня выполняется за 0.08сек

П.С. код писался по-быстрому, потому извиняйте за качество

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