~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 73A80926EA9E2B0D85E2B264EED23997__1715928180 ✰
Заголовок документа оригинал.:
✰ Zig (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Зиг (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Zig_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/73/97/73a80926ea9e2b0d85e2b264eed23997.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/73/97/73a80926ea9e2b0d85e2b264eed23997__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:04:52 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 17 May 2024, at 09:43 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Зиг (язык программирования) — Википедия Jump to content

Зиг (язык программирования)

Из Википедии, бесплатной энциклопедии
Зиг
Парадигмы Мультипарадигма : императивная , параллельная , процедурная , функциональная.
Разработано Эндрю Келли
Впервые появился 8 февраля 2016 г .; 8 лет назад ( 08.02.2016 ) [1]
Предварительный выпуск
0.13.0 [2]  Отредактируйте это в Викиданных/ 6 июня 2024 г .; 9 дней назад ( 6 июня 2024 г. )
Дисциплина набора текста Статический , сильный , предполагаемый , структурный , общий.
Управление памятью Руководство
Платформа x86-64 , ARM64 , Веб-сборка
Уровень 2: ARM , IA-32 , RISC-V , MIPS64 , POWERPC64 , SPARC64 , некоторые платформы уровня 2 имеют поддержку уровня 1 для автономных программ.
ТЫ Кроссплатформенность : Linux , FreeBSD , Windows.
Лицензия С
Расширения имен файлов .зиг, .зир
Веб-сайт зигланг .org
Под влиянием
C , C++ , LLVM IR , Go , Rust , JavaScript [ нужна цитата ]

Zig — это императивный , общего назначения, , статически типизированный разработанный компилируемый системный язык программирования Эндрю Келли. [3] Он задуман как преемник языка C с целью сделать его еще меньше и проще для программирования, но при этом предложить больше функций. [4] Это бесплатное программное обеспечение с открытым исходным кодом , выпущенное под лицензией MIT .

Улучшения в простоте языка касаются управления потоком, вызовов функций , импорта библиотек , объявления переменных и поддержки Unicode . Кроме того, язык не использует макросы или инструкции препроцессора . Функции, заимствованные из современных языков, включают добавление универсальных типов времени компиляции , позволяющих функциям работать с различными данными, а также небольшой набор новых директив компилятора , обеспечивающих доступ к информации об этих типах с помощью отражения .

Еще один набор дополнений к Zig призван повысить безопасность кода. Как и C, Zig не включает сборку мусора , а обработка памяти осуществляется вручную. Чтобы устранить потенциальные ошибки, возникающие в таких системах, он включает типы опций и простой синтаксис для их использования. среда тестирования В язык также встроена .

Описание [ править ]

Цели [ править ]

Основная цель Zig — стать лучшим решением тех задач, которые в настоящее время решаются с помощью C. Основная проблема в этом отношении — читаемость; Зиг пытается использовать существующие концепции и синтаксис везде, где это возможно, избегая добавления другого синтаксиса для аналогичных концепций. Кроме того, он спроектирован с учетом «надежности, оптимальности и ремонтопригодности», включая множество функций для повышения безопасности, оптимизации и тестирования. Небольшой и простой синтаксис — важная часть сопровождения, поскольку цель языка — дать возможность сопровождающим отлаживать код без необходимости изучать тонкости языка, с которым они, возможно, не знакомы. [5] Даже с этими изменениями Zig может компилироваться в существующий код C и против него; Заголовки C могут быть включены в проект Zig и вызывать их функции, а код Zig можно связать с проектами C, включая заголовки, созданные компилятором. [6]

В соответствии с общей философией проектирования, направленной на то, чтобы сделать код простым и легким для чтения, система Zig в целом также включает в себя ряд стилистических изменений по сравнению с C и другими C-подобными языками. Например, в языке Rust есть перегрузка операторов , что означает оператор типа a = b + cна самом деле может быть вызовом функции перегруженной версии оператора плюс. Кроме того, эта функция может вызвать панику, что может привести к вытеснению любого последующего кода. В Zig, если что-то вызывает функцию, это выглядит как вызов функции, если нет, то это не похоже на функцию. Если возникает ошибка, это явно указано в синтаксисе: [6] обработка ошибок осуществляется через типы ошибок и может обрабатываться с помощью catch или try.

Цели Zig отличаются от целей многих других языков, разработанных в тот же период времени, таких как Go , Rust , Carbon и Nim . Как правило, эти языки более сложны и содержат дополнительные функции, такие как перегрузка операторов , функции, маскирующиеся под значения (свойства), и многие другие функции, предназначенные для помощи в создании больших программ. Подобные возможности имеют больше общего с подходом C++, и эти языки больше соответствуют этому языку. [6] Zig имеет более консервативное расширение системы типов, поддерживающее дженерики во время компиляции и допускающее форму утиной типизации с помощью comptime директива.

Работа с памятью [ править ]

Одним из основных источников ошибок в программах на языке C является система управления памятью , основанная на malloc . malloc выделяет блок памяти для использования в коде и возвращает ссылку на эту память в виде указателя . Не существует системы, гарантирующей освобождение памяти, когда она больше не нужна программе, что может привести к тому, что программы будут использовать всю доступную память, то есть к утечке памяти . Более распространенным является висячий указатель , который не ссылается на правильно выделенный объект памяти. [7]

Распространенным решением этих проблем является сборщик мусора (GC), который проверяет программу на наличие указателей на ранее выделенную память и удаляет все блоки, на которые больше ничего не указывает. Хотя это значительно уменьшает или даже устраняет ошибки памяти, системы GC относительно медленны по сравнению с ручным управлением памятью и имеют непредсказуемую производительность, что делает их непригодными для системного программирования . Другим решением является автоматический подсчет ссылок (ARC), который реализует ту же базовую концепцию поиска указателей на удаленную память, но делает это во время malloc, записывая количество указателей на этот блок, что означает, что нет необходимости выполнять исчерпывающий поиск. , но вместо этого добавляет время к каждой операции malloc и Release. [7]

Zig стремится обеспечить производительность, аналогичную или лучшую, чем C, поэтому GC и ARC не являются подходящими решениями. Вместо этого он использует современную версию по состоянию на 2022 год. , концепция, известная как типы опционов . Вместо того, чтобы указатель мог указывать на ничего или на ноль, используется отдельный тип для обозначения данных, которые могут быть пустыми. Это похоже на использование структуры с указателем и логическим значением, которое указывает, действителен ли указатель, но состояние логического значения невидимо управляется языком и не требует явного управления программистом. Так, например, когда указатель объявлен, ему присваивается значение «нераспределенный», а когда этот указатель получает значение от malloc, ему присваивается значение «выделенный», если malloc завершился успешно. [8]

Преимущество этой модели в том, что она имеет очень низкие или нулевые накладные расходы; компилятор должен создать код для передачи необязательного типа при манипулировании указателями, в отличие от простого указателя, но это позволяет ему напрямую выражать возможные проблемы с памятью во время компиляции без поддержки во время выполнения. Например, создание указателя с нулевым значением и последующая попытка его использования вполне допустимо в C, что приводит к ошибкам нулевого указателя. Напротив, язык, использующий необязательные типы, может проверять, что все пути кода пытаются использовать указатели только тогда, когда они действительны. Хотя это не устраняет всех потенциальных проблем, если проблемы возникают во время выполнения, ошибку можно более точно обнаружить и объяснить. [9]

Еще одно изменение в управлении памятью в Zig заключается в том, что фактическое выделение осуществляется через structописывает действие, а не вызов функций управления памятью в libc . Например, если вы хотите написать в C функцию, которая создает строку, содержащую несколько копий другой строки, эта функция может выглядеть так:

const   char  *   повтор  (  const   char  *   original  ,   size_t   times  ); 

В коде функция будет проверять размер original а затем маллок timesэту длину, чтобы выделить память для строки, которую она создаст. Этот malloc невидим для вызывающих его функций; если им позже не удастся освободить память, произойдет утечка. В Zig это можно сделать с помощью такой функции:

fn   повтор  (  распределитель  :   *  std  .  mem  .  Распределитель  ,   оригинал  :   []  const   u8  ,   times  :   useize  )   std  .   мем  .   Распределитель  .   Ошибка  !   []  константа   u8  ; 

В этом коде allocator переменной передается структура, описывающая, какой код должен выполнить выделение, а repeat функция возвращает либо результирующую строку, либо, используя необязательный тип, указанный в !, Распределитель.Ошибка. Непосредственно выражая распределитель как входные данные, выделение памяти никогда не «скрывается» внутри другой функции, оно всегда предоставляется API функцией, которая в конечном итоге вызывает выделение памяти. Zig никакие выделения не выполняются Внутри стандартной библиотеки . Далее, поскольку структура может указывать на что угодно, можно использовать альтернативные распределители, даже написанные в программе. Это может позволить, например, использовать распределители небольших объектов, которые не используют функции операционной системы , которые обычно выделяют целую страницу памяти . [10]

Необязательные типы — это пример языковой функции, которая предлагает общую функциональность, оставаясь при этом простой и универсальной. Их не обязательно использовать для решения проблем с нулевым указателем, они также полезны для любого типа значения, где подходящим ответом является «нет значения». Рассмотрим функцию countTheNumberOfUsers который возвращает целое число и целочисленную переменную, theCountedUsersкоторый сохраняет результат. Во многих языках магическое число помещается в theCountedUsers чтобы указать, что countTheNumberOfUsersеще не вызывался, хотя во многих реализациях ему просто присваивалось нулевое значение. В Zig это можно реализовать как var theCountedUsers: ?i32 = null который устанавливает для переменной четкое значение «не вызывалось». [10]

Еще одна более общая особенность Zig, которая также помогает решать проблемы с памятью, — это концепция defer, который отмечает некоторый код, который должен быть выполнен в конце функции, независимо от того, что произойдет, включая возможные ошибки во время выполнения. Если определенная функция выделяет некоторую память, а затем избавляется от нее после завершения операции, можно добавить строку для отсрочки выполнения операции. free чтобы гарантировать, что он будет выпущен, что бы ни случилось. [10]

Управление памятью Zig позволяет избежать скрытых выделений. Распределение не управляется непосредственно в языке. Вместо этого доступ к куче осуществляется явно в стандартной библиотеке . [11]

Прямое взаимодействие с C [ править ]

Zig продвигает эволюционный подход к использованию языка, который объединяет новый код Zig с существующим кодом C. Для этого он стремится сделать взаимодействие с существующими библиотеками C максимально простым. Zig импортирует свои собственные библиотеки с помощью @import директива, обычно следующим образом:

const   std   =   @import  (  "std"  ); 

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

стандарт  .   отладка  .   print  (  "Привет, мир!  \n  "  ,   .{}); 

Для работы с кодом C достаточно просто заменить @import с @cImport:

const   c   =   @cImport  (  @cInclude  (  "soundio/soundio.h"  )); 

Код Zig теперь может вызывать функции в библиотеке soundio, как если бы они были собственным кодом Zig. Поскольку Zig использует новые типы данных, которые явно определены, в отличие от более общих типов C. int и floatдля перемещения данных между типами C и Zig используется небольшое количество директив, в том числе @intCast и @ptrCast. [10]

Кросс-компиляция [ править ]

Зиг рассматривает кросс-компиляцию как первоклассный вариант использования языка. Это означает, что любой Zig-компилятор может компилировать работоспособные двоичные файлы для любой из своих целевых платформ, а их десятки. К ним относятся не только широко используемые современные системы, такие как ARM и x86-64 , но также PowerPC , SPARC , MIPS , RISC-V и даже IBM z/Architectures (S390). Инструментарий может скомпилироваться для любой из этих целей без установки дополнительного программного обеспечения. Вся необходимая поддержка находится в базовой системе. [10]

Комптайм [ править ]

С помощью comptimeключевое слово, программист может явно заставить Zig оценивать разделы кода во время компиляции , а не во время выполнения . Возможность запуска кода во время компиляции позволяет Zig использовать функции макросов и условной компиляции без необходимости использования отдельного языка препроцессора . [12]

Во время компиляции типы становятся первоклассными гражданами . во время компиляции Это позволяет осуществлять утиную типизацию , и именно так Zig реализует универсальные типы. [13]

Например, в Zig общий тип связанного списка может быть реализован с помощью такой функции:

fn   LinkedList  (  comptime   T  :   type  )   type  ; 

Эта функция принимает некоторый тип Tи возвращает пользовательский struct определение связанного списка с этим типом данных.

Происхождение названия [ править ]

Сообщается, что имя «Зиг» было выбрано в результате процесса, включающего сценарий Python , который случайным образом комбинировал буквы, начиная с буквы «Z» и сопровождаемой гласной или «Y», для создания четырехбуквенных слов. Несмотря на запланированную длину, трехбуквенное слово «Зиг» в конечном итоге было выбрано из различных комбинаций, созданных сценарием. [14]

Другие особенности [ править ]

Zig поддерживает времени компиляции дженерики , отражение и оценку, кросс-компиляцию и ручное управление памятью . [15] Основная цель языка — улучшить C. язык [12] [16] а также черпая вдохновение из Rust , [17] [6] среди других. Zig имеет множество функций для низкоуровневого программирования , в частности упакованные структуры (структуры без заполнения между полями), целые числа произвольной ширины. [18] и несколько типов указателей. [13]

Zig — это не просто новый язык: он также включает в себя компилятор C/C++ и может использоваться с одним или обоими языками.

Версии [ править ]

Начиная с версии 0.10 компилятор Zig (новый по умолчанию) написан на языке программирования Zig, т. е. это самостоятельный компилятор , и это основная новая функция этой версии. Старый устаревший компилятор начальной загрузки , написанный на C++, по-прежнему доступен, но его не будет в версии 0.11. При компиляции с помощью нового компилятора Zig используется гораздо меньше памяти и компиляция происходит немного быстрее. Более старый, теперь уже устаревший компилятор на основе C++ использует в 3,5 раза больше памяти.

Серверной частью Zig по умолчанию для оптимизации по-прежнему является LLVM . [19] а LLVM написан на C++. Компилятор Zig с LLVM занимает 169 МБ, а без LLVM — 4,4 МБ. Более быстрый исполняемый код обычно компилируется с помощью нового компилятора на основе Zig-lang, его генерация кода LLVM лучше и исправлено множество ошибок, но в версии 0.10 также есть улучшения для старого устаревшего компилятора. Автономный компоновщик тесно связан с автономным компилятором. В новой версии также добавлена ​​некоторая экспериментальная (уровень 3) поддержка графических процессоров AMD (есть также незначительная поддержка графических процессоров Nvidia и PlayStation 4 и 5).

Старый компилятор начальной загрузки («stage1») написан на Zig и C++ с использованием LLVM 13 в качестве серверной части. [20] [21] поддерживая многие из своих местных целей. [22] Компилятор является бесплатным программным обеспечением с открытым исходным кодом, выпущенным под лицензией MIT . [23] Компилятор Zig предоставляет возможность компилировать C и C++ аналогично Clang с помощью команд zig cc и zig c++, [24] предоставление множества заголовков, включая стандартную библиотеку C (libc) и стандартную библиотеку C++ (libcxx) для множества различных платформ, что позволяет Zig cc и c++ подкоманды, которые действуют как кросс-компилятор . по умолчанию [25] [26]

Плюс официально поддерживаемые (и документированные) операционные системы (в основном настольные), (минимальные) приложения могут и были созданы для Android (с помощью Android NDK ), а также возможно программирование для iOS .

До версии 0.11.0 у Zig не было менеджера пакетов , но в 0.11.0 была выпущена экспериментальная версия, которая была расширена в версии 0.12.0. нет Официального репозитория пакетов ; вместо этого пакет — это просто URL-адрес, указывающий на сжатый файл , который в несжатом виде включает стандартный файл build.zig (который компилятор Zig по соглашению использует для компиляции исходного кода) и, в идеале, файл build.zig.zon, который используется для определения имени и версии пакета.

Разработка Zig финансируется Zig Software Foundation (ZSF), некоммерческой корпорацией под руководством Эндрю Келли, которая принимает пожертвования и нанимает несколько штатных сотрудников. [27] [28] [29]

Примеры [ править ]

Привет, мир [ править ]

const   std   =   @import  (  "std"  ); 

  паб   fn   main  ()   !   пустота   { 
     const   stdout   =   std  .   ио  .   getStdOut  ().   писатель  (); 
      попробуйте   стандартный вывод  .   print  (  "Привет, {s}!  \n  "  ,   .{  "мир"  }); 
  } 

Общий связанный список [ править ]

const   std   =   @import  (  "std"  ); 
  константный   стандартный вывод   =   стандартный  .   ио  .   getStdOut  ().   писатель  (); 

  fn   LinkedList  (  comptime   T  :   type  )   type   { 
     return   struct   { 
         const   Self   =   @This  (); 
          pub   const   Node   =   struct   { 
             next  :   ?*  Node   =   null  , 
             data  :   T  , 
         }; 

          первый  :   ?*  Node   =   null  , 

         pub   fn   prepend  ( 
             list  :   *  Self  , 
             new_node  :   *  Node  , 
         )   void   { 
             new_node  .   следующий   =   список  .   первый  ; 
              список  .   первый   =   новый_узел  ; 
          } 
         pub   fn   Формат  ( 
             список  :   Self  , 
             comptime   fmt  :   []  const   u8  , 
             параметры  :   std  .  fmt  .  FormatOptions  , 
             out_stream  :   Anytype  , 
         )   !   void   { 
             попробуйте   out_stream  .   writeAll  (  (  ) 
             var   it   =   list.first  ,  fmt  ; 
             while   (  it  )   |  node  |   :   (  it   =   node.next  )  ,  )   { 
                 try   std.fmt.formatType  (  1  ,  ;  " 
                     node.data  , 
                     , 
                     options  out_stream 
                    
                    
                 " ; 
                 попробуйте   out_stream.writeAll  out_stream.writeAll  "  (  "  } 
             попробуйте 
              )  (  "  ;  "  ) 
          } 
     }; 
  } 

 паб   fn   main  ()   !   void   { 
     const   ListU32   =   LinkedList  (  u32  ); 
     вар    список   =   ListU32  {}; 
      вар   узел1   =   ListU32  .   Узел  {   .   данные   =   1   }; 
      вар   узел2   =   ListU32  .   Узел  {   .   данные   =   2   }; 
      вар   node3   =   ListU32  .   Узел  {   .   данные   =   3   }; 
      список  .   добавить  (  &  node1  ); 
      список  .   добавить  (  &  node2  ); 
      список  .   добавить  (  &  node3  ); 
      попробуйте   стандартный вывод  .   print  (  "{}  \n  "  ,   .{  list  }); 
      попробуйте   стандартный вывод  .   print  (  "{b}  \n  "  ,   .{  list  }); 
  } 
выход
( 3 2 1 ) 
( 11 10 1 )
 

Повторение строки с помощью распределителя [ править ]

const   std   =   @import  (  "std"  ); 

  fn   повтор  ( 
     распределитель  :   *  std  .  mem  .  Распределитель  , 
     оригинал  :   []  const   u8  , 
     times  :   useize  , 
 )   std  .   мем  .   Распределитель  .   Ошибка  !   []  const   u8   { 
     var   buffer   =   попробовать   распределитель  .   alloc  ( 
         u8  , 
         original.len  *   раз   ,  ) 
     ; 

      для   (  0  ..  раз  )   |   я  |    { 
         станд  .   мем  .   copyForwards  ( 
             u8  , 
             буфер  [(  оригинал  .  len   *   i  )..], 
             оригинал  , 
         ); 
      } 

     вернуть   буфер  ; 
  } 

 паб   fn   main  ()   !   пустота   { 
     const   stdout   =   std  .   ио  .   getStdOut  ().   писатель  (); 

      вар   арена   =   станд  .   куча  .   Аренааллокатор  .   init  ( 
         std  .  heap  .  page_allocator  , 
     ); 
      отложить   арену  .   деинит  (); 

      вар   распределитель   =   арена  .   распределитель  (); 

      const   original   =   "Привет"  ; 
      const   повторено   =   попробуйте   повторить  ( 
         &  распределитель  , 
         оригинал  , 
         3  , 
     ); 

      // Печатает «Привет, привет, привет» 
     try   stdout  .   print  (  "{s}  \n  "  ,   .{  повторено  }); 
  } 

выход

Здравствуйте Здравствуйте Здравствуйте
 

Проекты [ править ]

См. также [ править ]

Ссылки [ править ]

Цитаты [ править ]

  1. ^ Келли, Эндрю. «Введение в язык программирования Zig» . andrewkelley.me . Проверено 8 ноября 2020 г.
  2. ^ «Релиз 0.13.0» .
  3. ^ «Снимаем бородавки с C, с Эндрю Келли, создателем языка программирования Zig» . Исходный график . 19 октября 2021 г. Проверено 18 апреля 2024 г.
  4. ^ «Зиг обладает всей элегантной простотой C, за исключением всех способов выстрелить себе в ногу» . JAXenter . 2017-10-31. Архивировано из оригинала 1 ноября 2017 г. Проверено 11 февраля 2020 г.
  5. ^ Элизабет 2017 .
  6. ^ Перейти обратно: а б с д Йегулалп 2016 .
  7. ^ Перейти обратно: а б «ARC против GC» . Элементы .
  8. ^ «Руководство по Java 8 (дополнительно)» . 28 ноября 2022 г.
  9. ^ «Ржавчина: Управление памятью» .
  10. ^ Перейти обратно: а б с д Это «Распределители» . 11 сентября 2023 г.
  11. ^ Тайсон, Мэтью (9 марта 2023 г.). «Знакомьтесь, Зиг: современная альтернатива C» . InfoWorld.com .
  12. ^ Перейти обратно: а б Дорога к Зигу 1.0 — Эндрю Келли . Колесницы. 09.05.2019 – через YouTube .
  13. ^ Перейти обратно: а б "Документация" . Зигланг.org . Проверено 24 апреля 2020 г.
  14. ^ Андрерк (13 марта 2024 г.). «происхождение названия языка программирования zig. автор @andrewrk» . Проверено 13 марта 2024 г.
  15. ^ «Язык программирования Zig» . Зигланг.org . Проверено 11 февраля 2020 г.
  16. ^ «Язык программирования Zig» . Зигланг.org . Проверено 11 февраля 2020 г.
  17. ^ Компания Sudo Null. «Sudo Null — IT-новости для вас» . СудоНулл . Проверено 11 февраля 2020 г.
  18. ^ Тим Андерсон 24 апр 2020 в 09:50. «Хотите использовать _ExtInt? Компилятор LLVM Clang добавляет поддержку целых чисел произвольной ширины» . www.theregister.co.uk . Проверено 24 апреля 2020 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  19. ^ Новая версия LLVM 15, устаревшая версия Zig использует версию 13.
  20. ^ «Ответ на _The Road to Zig 1.0_» . www.gingerbill.org . 13 мая 2019 г. Проверено 11 февраля 2020 г.
  21. ^ «зигланг/зиг» . Гитхаб . Язык программирования Zig. 11 февраля 2020 г. Проверено 11 февраля 2020 г.
  22. ^ «Язык программирования Zig» . Зигланг.org . Проверено 11 февраля 2020 г.
  23. ^ «зигланг/зиг» . Гитхаб . Проверено 11 февраля 2020 г.
  24. ^ «Примечания к выпуску 0.6.0» . Зигланг.org . Проверено 19 апреля 2020 г.
  25. ^ « 'zig cc': мощная замена GCC/Clang - Эндрю Келли» . andrewkelley.me . Проверено 28 мая 2021 г.
  26. ^ «Zig заставляет Go кросс-компиляцию просто работать» . Сообщество разработчиков . 24 января 2021 г. Проверено 28 мая 2021 г.
  27. ^ «Якуб Конка в Твиттере» . Твиттер . Архивировано из оригинала 10 апреля 2022 г. Проверено 28 мая 2021 г.
  28. ^ «Объявление о создании Zig Software Foundation» . Зигланг.org . Проверено 28 мая 2021 г.
  29. ^ «Спонсор ЗСФ» . Зигланг.org . Проверено 28 мая 2021 г.

Библиография [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 73A80926EA9E2B0D85E2B264EED23997__1715928180
URL1:https://en.wikipedia.org/wiki/Zig_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
Zig (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)