Linux.org.ru
Новости - Галерея - Форум - Трекер - Wiki - Поиск
[#]  
Bsd-un (фотография)

Google представляет Go

Go — экспериментальный язык програмирования, разработанный в Google. Основные разработчики языка — Роб Пайк и Кен Томпсон, также известные как разработчики unix и plan9.

Go предназначен в первую очередь для написания крупных серверных приложений и способен сократить время сборки с десятков минут до нескольких секунд (в сравнении с C++) за счет системы модулей и явного указания зависимостей.

В языке отсутствуют классы, исключения, метапрограммирование и ручное управление памятью, однако присутствуют указатели, сборщик мусора и goto. Также на уровне языка поддерживаются легковесные процессы (goroutines) и каналы (channels).

Можно использовать фигурные скобки и юникод в идентификаторах.

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

Метки: go, google, plan9, unix

Bsd-un *** (11.11.2009 3:31:15)
Проверено: hibou (11.11.2009 7:53:57)

[#] Ответ на: Google представляет Go от Karapuz 12.11.2009 19:43:31  

Google представляет Go

> Google нарушил патент, назвал язык аналогично уже существующему "Go!"

Причём тут патент? Имя может быть торговой маркой, но Фрэнк её нигде не зарегистрировал. Он только вежливо попросить может.

yk4ever * (13.11.2009 0:38:42)
[#] Ответ на: Google представляет Go от t184256 12.11.2009 21:24:07  

Google представляет Go

>Где еще какая трава?

+1

pazak (13.11.2009 11:31:56)
[#]  

Google представляет Go

Уже созрел юмор в тему:

http://domaingang.com/stories-and-manuals/yahoo-launches-new-programming-lang...

yk4ever * (13.11.2009 13:49:25)
[#]  
Adjkru (фотография)

Google представляет Go

Дельфи вот тоже славится быстрой компиляцией, и где оно? :)

Adjkru *** (13.11.2009 18:36:40)
[#] Ответ на: Google представляет Go от Adjkru 13.11.2009 18:36:40  

Google представляет Go

www.isdelphidead.com

Karapuz *** (13.11.2009 21:03:56)
[#] Ответ на: Re: Google представляет Go от pazak 11.11.2009 15:11:25  

Re: Google представляет Go

> Да вместо goto для выхода из 3-х вложеных циклов всегда можно использовать нечто боллее удобоваримое: [...] 2. сгенерировать исключение.

А для этого, несомненно: 1. определить класс исключений для выхода из вложенных циклов, наследованный от exception 2. заголовок класса разместить в отдельном h-файле, 3. создать пустой файл с расширением cpp (т.к. перекрытых методов нет, но для общности должен быть файл реализации), 4. созданный заголовок подключить во всех cpp-файлах, где требуется выход из вложенных циклов, 5. все вложенные циклы разместить в отдельном try/catch-блоке.

Завистники из клана C скажут, что тут слишком много работы для человека - но мы, поколение XXI века, выбираем IDE, способные полностью автоматически выполнить шаги 2, 3 и значительно помогут в шаге 5.

и Тогда невразумительное и малопонятное

 
for (i = 0; i < ai_len; i++) 
  for (j = 0; j < aj_len; j++) 
    for (k = 0; k < ak_len; k++) 
      if (sqrt(ai[i]*ai[i] + aj[j]*aj[j] + ak[k]*ak[k]) < R) 
        goto end; 
end: 

превращается в стройное и лаконичное

 
#include <exception> 
 
/* 
 * break_exception class 
 */ 
class break_exception: public std::exception 
{ 
  /* 
   * nothing here 
   */ 
} // break_exception 
 
//... 
 
/* 
 * try block 
 */ 
try 
{ 
  /* 
   * for loop 
   */ 
  for (i = 0; i < ai_len; i++) 
  { 
    /* 
     * for loop 
     */ 
    for (j = 0; j < aj_len; j++) 
    { 
      /* 
       * for loop 
       */ 
      for (k = 0; k < ak_len; k++) 
      { 
        /* 
         * if statement 
         */ 
        if (sqrt(ai[i]*ai[i] + aj[j]*aj[j] + ak[k]*ak[k]) < R) 
        { 
          // if the condition is true do the following 
          throw new break_exception(); 
        } // if (sqrt(ai[i]*ai[i] + aj[j]*aj[j] + ak[k]*ak[k]) < R) 
        else 
        { 
          // if the condition is false do the following 
          /* 
           * do nothing 
           */ 
        } 
      } // for (k = 0; k < ak_len; k++) 
    } // for (j = 0; j < aj_len; j++) 
  } // for (i = 0; i < ai_len; i++) 
} // try 
/* 
 * catch exceptions of type brake_exception 
 */ 
catch (const brake_exception &unused) 
{ 
  /* 
   * do nothing 
   */ 
} // catch (const brake_exception &unused) 

а уж если код цикла по i (например) был заключён в другой try/catch-блок (например, вместо aj_len использовалась функция, способная сгенерировать исключение), то радости нашей не будет границ - обработчик break_exception (повторно генерирующий то же усключение) появится и в нём.

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

Например, после каждой закрывающей фигурной скобки автоматически (как и сами фигурные скобки) вставлен фрагмент кода, её открывшего, благодаря чему не надо скроллить текст программы на несколько экранов назад, чтоб понять, какой оператор закрывает интересующая нас скобка. Полезность таких комментариев становится всё более актуальной в наше время ввиду того, что все современные IDE отображают на экране большое количество информации о коде (вывод компилятора, окна отладчика и профайлера, инструменты рефакторинга, браузер классов и т.п.) то на само окно редактирования остаётся 5-10 строк, что значительно снижает возможность охватить код взглядом без помощи комментариев.

З.Ы. Наболело :(

pv4 * (13.11.2009 23:42:54)
[#] Ответ на: Re: Google представляет Go от pv4 13.11.2009 23:42:54  

Google представляет Go

> а уж если код цикла по i

по j, конечно же

pv4 * (13.11.2009 23:45:24)
[#] Ответ на: Re: Google представляет Go от pv4 13.11.2009 23:42:54  
lester (фотография)

Google представляет Go

толсто

lester *** (13.11.2009 23:50:54)
[#] Ответ на: Re: Google представляет Go от pv4 13.11.2009 23:42:54  

Google представляет Go

> превращается в стройное и лаконичное

LOL! Стёб в тему, плюсую! :)

Casus ***** (14.11.2009 0:45:36)
[#] Ответ на: Google представляет Go от hexenlord 11.11.2009 12:14:54  
val-amart (фотография)

Google представляет Go

> Как это "some point in the future", "perhaps"? Это из разряда эзотерической стохастической Java, где-то читал про такую шутку. Создаётся впечатление, что ребята просто решили выбить из Гугла денежек, какбэ под перспективную разработку.

походу, ты даже про обычные треды не знаешь, не то что про coroutines...

val-amart ** (14.11.2009 21:39:28)
[#] Ответ на: Re: Google представляет Go от pv4 13.11.2009 23:42:54  

Google представляет Go

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

точно :-)

www_linux_org_ru ** (15.11.2009 1:04:24)
[#] Ответ на: Google представляет Go от pazak 12.11.2009 15:23:12  

Re: Google представляет Go

GC, Smart pointers, Stack, pools это разные способы распределения памяти. Удобно, когда можно выбирать под задачу, каким пользоваться.

Мне понравилось как это реализовано в D. Там есть выбор. Хочешь пользуйся GC, не хочешь - отключай на время или на совсем и делай по своему (а когда GC нет им уже не воспользуешься).

http://www.digitalmars.com/d/2.0/memory.html

Liosha_Syrnikov * (21.11.2009 17:29:49)

http://www.linux.org.ru/

Rambler's Top100 TopList