The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Новая версия языка программирования Nim 0.18.0

03.03.2018 13:58

Представлен значительный релиз языка системного программирования Nim 0.18.0. Язык использует статическую типизацию и создан с оглядкой на Pascal, C++, Python и Lisp. Код проекта поставляется под лицензией MIT.

Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора (clang, gcc, icc, Visual C++), что позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора. По аналогии с Python в Nim в качестве разделителей блоков применяются отступы. Регистр написания символов в идентификаторах не учитывается. Поддерживаются средства метапрограммирования и возможности для создания предметно-ориентированных языков (DSL).

В новом выпуске отмечается ряд существенных новшеств и изменений, связанных с проведением чистки стандартной библиотеки перед релизом 1.0. Также внесена большая порция изменений, нарушающих обратную совместимость. Оператор индексирования "[]" теперь выдаёт ошибку, если запрошенный диапазон выходит за границы строки, вместо выдачи подпадающий под запрос части строки (например, var myString = "hello world"; myString[6 .. 45] теперь инициирует исключение IndexError). Также изменена логика обработки коллекций оператором "$" и прекращено приведение массивов array[x, char] к типу cstring. Спецсимвол "\n" теперь выводит только код перевода строки без кода возврата каретки.

Среди новшеств:

  • Добавлен модуль strformat, предоставляющий поддержку форматируемых строковых литералов, позволяющих определить строку, содержащую подстановки (например let name = "Fred"; doAssert fmt"My name is {name}."), в стиле "f"-строк Python 3.6;
  • В генератор документации добавлен макрос runnableExamples, позволяющий протестировать работу приводимых примеров кода;
  • Добавлен новый макрос mapLiterals, упрощающий создание массивов и последовательностей (например, "let x = mapLiterals([12, 34, 15, 1], uint32)");
  • Изменён алгоритм управления памятью. Новый алгоритм TLSF позволяет снизить фрагментацию памяти, ценой усложнения операций alloc и dealloc;
  • Серия изменений в модулях для асинхронного ввода/вывода. Представлена унифицированная реализация asyncdispatch и новая процедура getIoHandler, возвращающая дескриптор ввода/вывода или epoll/kqueue. В модуле asyncjs появилась новая реализация async await для бэкенда JavaScript;
  • Пакетный менеджер Nimble обновлён до версии 0.8.10, в которой появилась возможность размещения нескольких пакетов Nimble в одном репозитории Git или Hg;
  • Из stdlib в обособленные пакеты Nimble переведены библиотеки gentabs, libuv, polynumeric, pdcurses, romans, libsvm и joyent_http_parser. Объявлены устаревшими basic2d и basic3d, вместо которых следует использовать такие пакеты, как glm, arraymancer и neo.


  1. Главная ссылка к новости (https://nim-lang.org/blog/2018...)
  2. OpenNews: Новая версия языка программирования Nim 0.17.0
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/48186-nim
Ключевые слова: nim
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (56) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 21:58, 03/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > По аналогии с Python в Nim в качестве разделителей блоков применяются отступы.

    Зачем? Даже Гвидо признал что это было не лучшей идеей.

     
     
  • 2.2, пепе (?), 22:04, 03/03/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    а можно ссылку на это утверждение Гвидо?
     
     
  • 3.3, Аноним (-), 22:53, 03/03/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    http://www.yaml.org/faq.html

    > Tabs have been outlawed since they are treated differently by different editors and tools. And since indentation is so critical to proper interpretation of YAML, this issue is just too tricky to even attempt. Indeed Guido van Rossum of Python has acknowledged that allowing TABs in Python source is a headache for many people and that were he to design Python again, he would forbid them.

    Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3 было бы лучше всего - ведь это так сильно меняет программу, сколько пробелов в каждой строке ставить.

    p.s. Я до сих пор не могу найти лучшего кандидата на первое место в списке "самые идиотские решения в ЯП", чем задание синтаксической конструкции отступами.

     
     
  • 4.4, Аноним (-), 22:57, 03/03/2018 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Вы прочитали то, что процитировали? Он не против отступов, он против табуляций. Чтобы творческие личности могли в один отступ два пробела вставить, а в другой шесть. Пробелы хороши в функциональных языках - там всё равно нет отступов, лишь выравнивание. Но в императивных языках запрещать надо, скорее, пробелы, чем табуляции.
     
     
  • 5.5, анонимус (??), 00:00, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после первого непробельного символа разрешить только пробел. Один таб -один отступить и форматирование не разваливается при разном размере таба.
     
     
  • 6.10, Аноним (-), 02:11, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после
    > первого непробельного символа разрешить только пробел.

    А не логичней было бы сперва ознакомиться с мат.частью, а уж потом рассуждать на тему "как правильнее"?
    Обычно под «форматированием пробелами» понимаются только пробелы в начале строки. После первого непробельного символа - хоть трава не расти.

    >Один таб -один отступить и форматирование не разваливается при разном размере таба.

    Разный размер таба в одном файле?

     
     
  • 7.39, анонимус (??), 07:53, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >Обычно под «форматированием пробелами» понимаются только пробелы в начале строки.

    Это и есть глупость

    >После первого непробельного символа - хоть трава не расти.

    Если после непробельных символов используется таб, то форматирование разъедется при открытии файла в другом редакторе с другим размером таба.

    >Разный размер таба в одном файле?

    В разных редакторах у разных пользователей

     
     
  • 8.48, Аноним (-), 14:39, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, если авторитет опеннета так считает Самому компилятору интерпретатору это д... большой текст свёрнут, показать
     
     
  • 9.49, Аноним (-), 14:43, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    fix ... текст свёрнут, показать
     
  • 6.15, Ydro (?), 11:24, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +7 +/
    То есть кроме отступов, табуляций и пробелов вас двоих ни чего не беспокоит в Nim? :-)
     
  • 6.21, Аноним (-), 14:24, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Было бы логичней, как раз, в начале строки пользоваться табуляцией, а после
    > первого непробельного символа разрешить только пробел. Один таб -один отступить и
    > форматирование не разваливается при разном размере таба.

    Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.

     
     
  • 7.27, вапвап (?), 19:05, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    К отступам и пробелам чувствительна СКВ, поэтому, чтобы не париться с мержами конфликтов, я бы рекомендовал пользоваться автовыравнием, которое заточено под корпоративный стандарт.

    Зачем вообще париться над пробелами, если можно просто нажать "выровняйся всё само"?

    Меньше творчества в коде => меньше конфликтов => проще жизнь.

     
  • 7.36, Аноним (-), 21:44, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.

    Как раз пробелами пользуются только те, кто не понимает, что такое отступ. "Я тут накопипастил со стека и у меня код разъехался. Поэтому я больше не буду пользоваться табуляциями, а некорректное форматирование буду пробелом добивать до того, от чего глаза не вытекают."

     
  • 7.38, Аноним (-), 22:07, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Хорошо, что [...] пользуются пробелами.

    Можете привести пару (а лучше больше) объективных уважительных причин использовать пробелы в отступах вместо табуляций, пожалуйста?

     
  • 7.40, анонимус (??), 07:54, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Хорошо, что не все программисты школьники-дегенераты, и поэтому пользуются пробелами.

    Дегенераты как раз пользуются пробелами в начале строки

     
     
  • 8.52, sdkisik (?), 15:10, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Дегенераты вообще не пользуются форматированием кода, ни табуляциями, ни пробела... текст свёрнут, показать
     
  • 5.57, nich (ok), 18:53, 06/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Гвидо против табуляции, и правильно.  Все осходники, использующие табуляцию, рано или поздно (на практике очень рано) начинают выглядеть как гaвно.  Первое, что я делаю в не моем проекте, это заменяю все табы на пробелы.  Только после этого с исходниками можно нормально работать.  Разрабы, которые использовали там табы, даже ничего не замечают, потому что тем, кто использует табы, обычно положить, что их исходники выглядят как полное гaвно.
     
  • 4.6, Аноним (-), 00:12, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > p.s. Я до сих пор не могу найти лучшего кандидата на первое место в списке "самые идиотские решения в ЯП", чем задание синтаксической конструкции отступами.

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

     
     
  • 5.7, Аноним (-), 01:05, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю, как он, но спасибо что решили за всех, как им форматировать
     
     
  • 6.32, Аноним (-), 20:23, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В Golang, так любимом ненавистниками Python, форматирование тоже принудительное. С фигурными скобками, но отформатировать как тебе хочется не выйдет.
     
     
  • 7.42, angra (ok), 10:32, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В Golang, так любимом ненавистниками Python, форматирование тоже принудительное. С фигурными  скобками, но отформатировать как тебе хочется не выйдет.

    ЕМНИП оно принудительное только в паре мест, где нельзя перенести открывающую фигурную скобку на следующую строку. Связано это с парсингом, а не стилем. А так можно хоть однострочники писать:
    package main;import "fmt";func main() {fmt.Println("Hello, world")}

    Другое дело, что в сообществе Go принято пропускать исходник через gofmt. Но к этому никто не принуждает, просто правило хорошего тона.


     
  • 4.8, Онаним (?), 01:45, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3

    Оптимално по 2 ящетаю. Серьёзно.

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

    На деле Python используется ОЧЕНЬ широко и никто особо не переживает по поводу этих отступов, так что всё в порядке. Некоторые небольшие проблем ощущаются только в момент копипастинга кода и те PyCharm решает за секунду.

     
  • 4.9, Аноним (-), 02:04, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >> Indeed Guido van Rossum of Python has acknowledged that allowing TABs in Python source is a headache for many people and that were he to design Python again, he would forbid them.

    https://nim-lang.org/docs/manual.html
    > Indentation consists only of spaces; tabulators are not allowed.

    Все верно сделанно.

    > Но, возможно, он бы стал требовать просто по 4 пробела. Или нет, по 5. Хотя нет, по 3 было бы лучше всего - ведь это так сильно меняет программу, сколько пробелов в каждой строке ставить.

    Хоть 1, хоть 10. Главное, не поддаваться порывам творческой натуры и не менять количество пробелов в одном блоке.
    Кстати, обычно даже довольно простые текстовые редакторы вполне настраиваются на автозамену нажатия таба на определенное количество пробелов.


     

  • 1.11, Tita_M (ok), 04:53, 04/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >оглядкой на Pascal

    Что там от паскаля? Да и оберон уже давно есть.

     
     
  • 2.33, Аноним (-), 20:25, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну и пиши на своём Обероне. Много напишешь?
     
     
  • 3.37, Tita_M (ok), 21:44, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Имелось ввиду зачем ориентироваться на паскаль если можно было вдохновляться тем же обероном.
     

  • 1.12, leap42 (ok), 05:53, 04/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора

    а если ещё какие-нибудь не учитывать, то даже быстрее получится

    а если вообще никакие не учитывать, то все расчёты будут мгновенными

     
     
  • 2.19, Аноним (-), 13:07, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну GC там и вправду мало жрущий. К тому же легко отключается. Хоть полностью, хоть по частям.
     
  • 2.31, Аноним (-), 19:22, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора
    > а если ещё какие-нибудь не учитывать, то даже быстрее получится

    Хочешь - не учитывай, никто не мешает:
    https://nim-lang.org/docs/manual.html
    > Nim distinguishes between traced and untraced references. Untraced references are also called
    > pointers. Traced references point to objects of a garbage collected heap, untraced references
    > point to manually allocated objects or to objects somewhere else in memory.

     
  • 2.45, Аноним (-), 13:45, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> позволяет добиться производительности близкой к Си, если не учитывать затраты на выполнение сборщика мусора
    >а если ещё какие-нибудь не учитывать, то даже быстрее получится

    Ну так в случае с Java так и получается :)

     

  • 1.13, Anonymoustus (ok), 06:35, 04/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем полученный C/C++ код компилируется в исполняемый файл при помощи любого доступного компилятора

    Что за блажь такая — всё усложнять дважды делать одну работу? В чём фишка?

     
     
  • 2.14, juniper рулит (?), 07:45, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    обычное дело в эти дни, вы видимо имеете очень смутное представление об устройстве современных компиляторов
     
     
  • 3.16, Аноним (-), 11:25, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Почему только современных? И C++ изначально в C транслировался.
     
     
  • 4.46, Crazy Alex (ok), 14:27, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А потом как смогли - стали делать нормальные компиляторы. И по сей день продолжают.
     
  • 3.17, Anonymoustus (ok), 12:22, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > обычное дело в эти дни, вы видимо имеете очень смутное представление об
    > устройстве современных компиляторов

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

    Ещё раз вопрос к залу: зачем писать на каком-то третьем языке, чтобы затем это несколько раз последовательно транслировать в нижележащие уровни? У современных кодеров совсем уже нет мозгов писать сразу на каком-то одном языке, что надо придумывать по несколько надстроек друг над другом?

     
     
  • 4.18, Аноним (-), 13:04, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Анонимы опеннета, видимо, патологически неспособны понять написанное, а отсутствующее понимание компенсируют многозначительным гулом голосов из своей головы.
    > Ещё раз вопрос к залу: зачем писать на каком-то языке, чтобы затем это несколько раз последовательно транслировать в нижележащие уровни? У современных кодеров совсем уже нет мозгов писать сразу в машинных кодах, что надо придумывать по несколько надстроек друг над другом?

    Fixed*

     
  • 4.20, Аноним (-), 13:53, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Просто у Nim дико маленокое комьюнити и написать полноценный фасад к какому-нибудь LLVM они не осилили
     
     
  • 5.23, Аноним (-), 15:45, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Просто у Nim дико маленокое комьюнити и написать полноценный фасад к какому-нибудь
    > LLVM они не осилили

    Один чувак осилил, но Araq (создатель языка) сказал, что он добавит LLVM в главный репозиторий только если LLVM бекенд предоставит какие-то преимущества над C/C++.

     
     
  • 6.28, Аноним84701 (ok), 19:09, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Один чувак осилил, но Araq (создатель языка) сказал, что он добавит LLVM
    > в главный репозиторий только если LLVM бекенд предоставит какие-то преимущества над  C/C++.

    В чем-то он прав – обратная совместимость в LLVM довольно регулярно ломается, в отличие от.
    И поэтому просто портировать мало, нужно  еще и поддерживать.
    Так что понятно, что (максимум "полтора", если мне не сильно изменяет память) разработчика/автора дополнительный "чемодан без ручки" скорее всего не особо вдохновляет.

     
  • 4.25, DerRoteBaron (?), 18:12, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Аналогично, зачем писать на любом сколько-нибудь высокоуровневом языке, если все можно написать в машинных кодах? Или в байткоде llvm если нужна переносимость.
    Зачем транслировать язык X в язык Y? Например, затем, что реализация Y есть под платформу P и она популярна, при этом язык X предоставляет удобные абстрации для предметной области A и/или задачи T, которую надо решать.
    Если задачу T можно решить на языке Y, это еще не значит, что ее удобно решать на этом языке, а при решении не придется написать существенное количество велосипедов.
     
     
  • 5.35, Аноним (-), 20:30, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Не стоит метать бисер перед Anonymoustus. Он объявился в новостях недавно, а уже успел себя зарекомендовать.
     
  • 4.26, Василий Теркин (?), 19:03, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Компиляторы с/cpp есть практически под все известные платформы. Поэтому авторы ограничили свои усилия работой над самим ЯП и транслятором для него. Вполне разумно.
     
  • 4.34, Аноним (-), 20:27, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, и препроцессоры на C не нужны. Ъ-кодеры обходятся без них.
     
  • 2.41, анонимус (??), 07:59, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >>Исходный код на языке Nim компилируется в представление на C, C++ или JavaScript. В дальнейшем
    >Что за блажь такая — всё усложнять дважды делать одну работу? В чём фишка?

    Так Си и есть высокоуровневый ассемблер.


     

  • 1.22, Аноним (-), 15:29, 04/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Есть же Crystal. Прекрасный руби-подобный синтаксис, быстрый....


        Have a syntax similar to Ruby (but compatibility with it is not a goal)
        Statically type-checked but without having to specify the type of variables or method arguments.
        Be able to call C code by writing bindings to it in Crystal.
        Have compile-time evaluation and generation of code, to avoid boilerplate code.
        Compile to efficient native code.

     
     
  • 2.24, Аноним (-), 16:12, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Наркомания какая-то ваш кристал, лучше уж D
     

  • 1.29, Аноним (-), 19:12, 04/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А может проще сразу писать на C/C++
     
     
  • 2.30, Аноним (-), 19:16, 04/03/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > А может проще сразу писать на C/C++

    Так они тоже транслируются.
    Поэтому для любителей истинной простоты есть hex-редакторы.
    В них и машкод и микрокод под задачу написать можно.

     
     
  • 3.51, XYZ (?), 15:05, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так hex-код тоже транслируется в нули и единицы. А вообще проще всего взять батарейку, две иголки и сраду подавать нужное напряжение в нужных участках материнской платы.
     

  • 1.43, adolfus (ok), 13:31, 05/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    "язык системного программирования" и "сборщик мусора" -- взаимноисключающие параграфы
     
     
  • 2.47, Crazy Alex (ok), 14:29, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Давно нет. Разве что вы под "системным" понимаете исключительно ядро и драйверы. Впрочем, язык всё равно пришибленный.
     
  • 2.50, Аноним (-), 14:52, 05/03/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > "язык системного программирования" и "сборщик мусора" -- взаимноисключающие параграфы

    Т.е. ЯП, в которых есть подключаемый сборщик мусора -- не системные?
    http://www.hboehm.info/gc/
    A garbage collector for C and C++


     
     
  • 3.53, Анонс (?), 07:51, 06/03/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Чукча не видит разницу между покдлючаемым гц и по умолчанию.
     
     
  • 4.56, Аноним (-), 14:38, 06/03/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Чукча не видит разницу между покдлючаемым гц и по умолчанию.

    Чего - "по умолчанию", о великий знаток?
    Или ты пользуешься обычными указателями и дергаешь alloc/dealloc ручками или используешь указатель на GC-объект.

    https://nim-lang.org/docs/manual.html
    > Nim distinguishes between traced and untraced references.
    > Traced references point to objects of a garbage collected heap, untraced references
    > point to manually allocated objects or to objects somewhere else in memory.
    > Traced references are declared with the ref keyword, untraced references are declared with the ptr keyword. In general, a ptr T is implicitly convertible to the pointer type.

    Интересно, какие принципы и обеты не позволяют экспертам перед комментированием даже поверхностно ознакомиться с темой?

     
  • 2.54, Аноним (-), 09:35, 06/03/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > взаимноисключающие

    Как ни загляну в комменты — обязательно узнаю новое слово. Что означает?

     

  • 1.55, Ын (?), 10:34, 06/03/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    только BASIC из zx spectrum 48 самый понятный и запоминающийся
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру