LINUX.ORG.RU

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

 , , ,


0

0

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

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

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

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

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

★★★

Проверено: hibou ()

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

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

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

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

Да вместо 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 ★★
()
Ответ на: комментарий от pv4

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

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

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

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

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

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

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

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

val-amart ★★★★★
()
Ответ на: комментарий от pv4

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

точно :-)

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

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

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

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

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