• Понимание итераторов в Python
    0
    Про итераторы рассказал, а про модуль itertools — нет.

    Непорядок!
  • Универсальный DSL. Возможно ли это?
    0
    REBOL умер же, к нему на смену пришёл Red. Правда ещё немножко недопиленный.
  • Универсальный DSL. Возможно ли это?
    0
    Грамматика у него простая как три копейки: программа состоит из слов, которые следуют друг за другом.

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

    Например есть слова которые начинают какую-либо конструкцию и сответствующие им завершающие слова, типа : NAME ... ;, CODE name ... ENDCODE и управляющие конструкции, разве они в совокупности не образуют синтаксические конструкции?

    В добавок и лексическое строение в виде слов, разделяемых пробелами, нарушается уже стандартными словами для строковых литералов, комментариев и т.п. слов, захватывающих произвольную часть исходника, что уж говорить о пользовательских словах.
  • Универсальный DSL. Возможно ли это?
    +1
    Конечно можно, почему нет? Судя по всему вы спорите о том, чего не знаете.

    Как я уже сказал, в форте есть полный контроль над разбором текста прямо во время этого самого разбора, это слова:
    • SOURCE — адрес и длина текущей интерпретируемой строки;
    • >IN — переменная (доступна и для чтения и для изменения) хранящая смещение первого непросмотренного символа от начала строки;
    • REFILL — прочитать следующую строку из входного источника.


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

    В добавок есть слова для парсинга: WORD PARSE
    для создания словарей: WORDLIST VOCABULARY
    для поиска слов: FIND SEARCH-WORDLIST
    для управления контекстом поиска: GET-ORDER SET-ORDER ALSO ONLY PREVIOUS
  • Универсальный DSL. Возможно ли это?
    +1
    В форте семантика влияет на синтаксис. Форт не регулярный язык, его нельзя разобрать конечным автоматом.

    Пример попроще:
    ( это комментарий, транслятор его игнорирует, а вернее это делает слово "(" )
    : ( ;  \ переопределение слова "("
    ( такого синтаксиса для комментария у нас больше нет, никто ничего не пропустил, и интерпретатор попытается выполнить эти слова, и произойдёт ошибка)


    Вы сможете описать это хоть какой-нибудь грамматикой?
  • Универсальный DSL. Возможно ли это?
    +1
    У форта неограниченная грамматика: все части форт-системы (даже такие как интерпретатор и компилятор) являются самыми обычнымм определениями на равне с другими форт-словами и могут быть изменены, переопределены и вызваны в любой момент, также исходный текст программы и состояние интерпретатора доступны прямо во время исполнения для чтения и изменения. Возможно придумать любой синтаксис на какой только хватит фантазии программиста и памяти системы.

    Например здесь синтаксис зависит от введёного символа:
    : PARSE&TYPE  ( c "ccc<char>" -- c-addr u )
        ." PARSED: " PARSE TYPE CR ;
    
    : AAA ." AAA CALLED" CR ;
    : BBB ." BBB CALLED" CR ;
    
    \ ограничитель - символ '1'
    .( TEST 1:) CR
    CHAR 1 PARSE&TYPE AAA 1 BBB 2 CR
    
    \ ограничитель заранее не известен
    .( TEST 2:) CR
    KEY PARSE&TYPE AAA 1 BBB 2 CR
    .( TEST 3:) CR
    KEY PARSE&TYPE AAA 1 BBB 2 CR
    
    BYE
    

    Try it online!


    Форт также может быть сам себе препроцессором и так иногда делают, но часто проще сразу скомпилировать нужный код чем заниматься подстановкой текста.
  • Универсальный DSL. Возможно ли это?
    0
    Да, оксюморон получается. Но, наверное, к форту вполне это определение подходит, сам форт язык универсальный, но программирование на нём обычно сводится к определению новых слов и конструкций, специфичных для решения конкретной задачи.
  • «Замести следы и уйти на выходные»: как удалить себя из большинства популярных сервисов
    +2
    Лучший способ замести следы — это не оставлять их.
  • Fake News: как создаются фейковые новости и можно ли их распознать
    0
    ШОК! СЕКС-ИГРУШКИ ЗАБАСТОВКАМИ ДОБИЛИСЬ ПРАВА ВОДИТЬ АВТОМОБИЛЬ!

    ЧИТАТЬ ДАЛЕЕ >>>
  • Мышь, поставившая крест на проводных собратьях
    +3
    Не понимаю смысла беспроводной клавы, она почти всё время неподвижно стоит на столе. На кой чёрт ей быть беспроводной?
  • Публичные данные 1,2 млрд пользователей были обнаружены на открытом Elasticsearch-сервере
    +3
    О, господи! Кто-то собрал данные о нас, которые мы сами же и публиковали в интернетах!

    Что же тепепь делать? Как быть?
  • Розеттский код: измеряем длину кода в огромном количестве языков программирования, изучаем близость языков между собой
    0
    Тут и кроме пробелов остается довольно много символов:
    tokens[str_String]:=DeleteCases[StringSplit[str, Complement[Characters@FromCharacterCode[Range[1, 127]], CharacterRange["a", "z"], CharacterRange["A", "Z"], CharacterRange["0", "9"], {"."}]], ""];


    Подсчет токенов работает неправильно даже в вашем языке. Например здесь:
    tokenCount[str_String]:=Length[tokens[str]];

    ваш «токенизатор» насчитал 6 токенов. Это не токенизатор, он работает только как счетчик идентификаторов в Mathematica, и к другим языкам не применим.

    P.S. Еще как оказалось во многих решениях на APL и J представлен не только код, а копия команд из REPL'а и их результат. Так, например, транспонирование матрицы на J плюс вывод созданной матрицы размером 5 строк, плюс результат транспонирования размером 4 строки, превращается в 11 строк, при том что реального кода здесь 2 строки.
  • Как Яндекс научил меня собеседовать программистов
    0
    Очень жаль, что у вас такая каша в голове. Коллбэк не имеет никакого отношения к асинхронщине.

    Даже педивики говорит:
    Callback (англ. call — вызов, англ. back — обратный) или фу́нкция обра́тного вы́зова в программировании — передача исполняемого кода в качестве одного из параметров другого кода.


    Что мы делаем? Передаем исполняемый код (эту лямбду) в качестве параметра в другой код (в reduceRight). Подходит под определение выше?
  • Розеттский код: измеряем длину кода в огромном количестве языков программирования, изучаем близость языков между собой
    +3
    Насчет токенов. Вы считаете неправильно и нечестно, многие языки имеют совершенно разное лексическое строение. Например:
    • вы не учли знак подчеркивания в именах
    • вы не учли строки
    • многие си-подобные языки позволяют использовать знак доллара в идентификаторах
    • в перле у идентификаторов используются префиксы из спецсимволов, в старых бейсиках — суффиксы
    • в типичной программе на APL, J или K буквы встречаются не часто :)
    • кстати, сколько токенов ваш парсер насчитает в brainfuck'е?
    • в форте и ему подобных в словах используются любые печатаемые непробельные символы, и это только в простом случае, т.к. в форте программа может сама парсить свой текст в общем случае чтобы разбить его на токены его понадобиться выполнить
    • наконец на Rosetta Code часто можно встретить хорошо комментированный код, это немного портит и правильность подсчета строк и симолов
  • bear_hug: игры в ASCII-арте на Python3.6+
    0
    Все таки это не ASCII-арт, а просто псевдографика. В ASCII нет никаких рамочек и т.п.

    Но получилось красиво.
  • Как Яндекс научил меня собеседовать программистов
    0
    Какая асинхронщина? Вы о чем?

    Этот «кусок кода» — содержимое функции передаваемой в reduceRight. Функция, передаваемая в другую функцию для последующего вызова называется callback, если вы не в курсе.

    И да, я также считаю, что код трудночитаемый, но совсем не из-за r[0][0], а из-за вложенного тренарника и использования && для ветвления; вложенные условия человеку всегда тяжело анализировать, особенно если записать их в одно выражение. В добавок первое условие r.length (или, если более явно r.length != 0) выполняется только в первый раз, и можно было передать этот элемент вторым аргументом в reduceRight, а из массива его исключить. Когда читаешь код, обычно пытаешься мысленно его выполнить, а лишние условия только сбивают с толку.
  • Нескучный туториал по NumPy
    +1
    Кстати, существуют языки программирования изначально ориентированные на обработку массивов, например APL или J. Они еще и очень лаконичные, большинство ваших примеров можно записать в одну-две коротенькие строчки.

    Если интересно вот есть простой туториал по J.
  • Как Яндекс научил меня собеседовать программистов
    +1
    От ассемблера зависит. Как директива препроцессора наверное почти везде есть. На многих их можно реализовать на макросах. В форт-ассемблерах почти всегда есть высокоуровневые конструкции из форта.
  • Как Яндекс научил меня собеседовать программистов
    –1
    Здесь нет никаких магических чисел, r[0][0] это первый элемент первого массива результата предыдущих применений этого коллбэка. Это довольно очевидно.

    Или вы предлагаете ввести константу FIRST_ARRAY_ELEMENT?
  • Язык программирования моей мечты
    0
    В некоторых старых языках тоже позволяли пробелы в идентификаторах, и синтаксис от этого был немного запутанный. Из-за этого произошел даже знаменитый баг в программе на фортране, когда из-за поставленной точки вместо запятой (или наоборот, не помню точно) объявление цикла было принято за присваивание значения переменной.

    А, например, в Алгол-68 синтаксис более однозначный: между идентификаторами всегда либо ключевые слова, либо операторы, либо спецсимволы; а ключевые слова и операторы отличались от идентификаторров — не содержали пробелов и набирались в верхнем регистре, либо брались в кавычки, либо выделялись жирным шрифтом (например в печати).
  • Инициализация в современном C++
    0
    Синтаксис удобный, но конкретно в этом примере структура наверное лучше подойдет.

    Кстати интересно почему его не спешат в кресты добавлять, боятся усложнять парсер из-за неоднозначности с синтаксисом лямбд?
  • 9 лучших опенсорс находок за сентябрь 2019
    +2
    Нет, нету. tcc — компилятор, хоть у него и есть ключик -run, но tcc в этом случае просто запускает только что скомпилированную программу, bic же интерпретирует введенные строки одну за другой (хотя может там и есть промежуточная трансляция в байткод, или JIT какой-нибудь, я не смотрел, даже если да, то REPL'ом (Read Eval Print Loop) он быть не перестанет, в tcc же ничего такого нет).

    Еще есть, например CINT.

    Чем тут впечатляться я не знаю, С хоть местами запутанный, но довольно простой язык, разве что нужно немного изменить синтаксис чтобы разрешить строки с кодом на верхнем уровне.
  • Роскомнадзор начал монтаж оборудования для изоляции Рунета
    0
    Это вореции.
  • Разработка Unix подобной OS — Драйверы символьных устройств (8)
    0
    #define FILE struct io_buf_t

    Никогда не понимал, зачем использовать #define вместо typedef?
  • Разработка Unix подобной OS — Драйверы символьных устройств (8)
    0
    entry = clist_find(&file_list, file_list_by_name_detector, path, mod_rw);
        file = (struct file_t*)entry->data;
        if (entry != null) {
            return &file->io_buf;
        }
    Вы обращаетесь к данным по указателю до проверки на null.

    Почему вам не нравятся видеоуроки?

    Кмк, формат статьи более удобен, я могу свободно перемещаться по статье глазами и скроллить, если я вдруг не въехал, я могу просто перечитать предложение еще раз, без всяких лишних действий, вдобавок в случае кода его можно без проблем копипастить.
    Заголовок спойлера
    В добавок я не очень люблю людей и не собираюсь слушать чей-то там бубнеж. Извините.

    Формат видео очень похож на живую лекцию, но к сожалению он лишен главного ее преимущества, когда по ходу лекции можно задавать уточняющие вопросы или переспрашивать.
  • Делись, рыбка, быстро и нацело
    +3
    Это случайно не перевод? Уж слишком статья пестрит бессмысленными применениями английских терминов или даже фраз:
    можем получить Latency в 25-119 clock cycles, а reciprocal throughput — 25-120.

    Fraction часть числа B.

    умножению на truncating with rounding up 0.1

    Выглядит weird и unnaturaly.
    Особенно это:
    получение старших битов 64 битного произведения в C++ коде реализуется интринсиком (something like mulh)

  • Разработка Unix подобной OS — Виртуальное адресное пространство (6)
    0
    Или btr.
  • Разработка Unix подобной OS — Многозадачность и системные вызовы (7)
    0
    Конечно не весь, тут приводятся основные моменты. Кому нужны простыни кода? Например не приведен исходный код функций работающих со списком задач, типа clist_insert_entry_after, task_find_by_status и пр., по названию и так понятно, что они делают, а реализация интересна только для изучающих алгоритмы работы со связными списками и тут их приводить не нужно. Кому нужны подробности идут на гитхаб.
  • Виды компиляции в JVM: сеанс черной магии с разоблачением
    0
    Даже без .pyc файлов питон всегда сперва транслируется в байткод.

    А в PyPy в добавок есть JIT-компиляция.
  • Переосмысление deepClone
    +2
    function deepClone(source) {
    	return ({
    		'object': cloneObject,
    		'function': cloneFunction
    	}[typeof source] || clonePrimitive)(source)();
    }
    Боже, какой паттерн матчинг )))
  • Переосмысление deepClone
    +5
    ФП — это когда код запутанный и непонятный, вы не знали чтоли?
    </sarcasm>
  • И всё же C — низкоуровневый язык
    0
    Есть все, что нужно для работы с указателями: взятие адреса, разыменование, арифметика. Причем тут «скрытые приведения типов»?
  • Язык программирования Ü. Введение, мотивация к созданию, цели
    0
    Помнится, он был на Си. Зачем переписали?

    А я этот язык когда-то учил (наткнулся на интерпретатор на какой-то файлопомойке), это был мой первый си-подобный язык (си я тогда не осилил). Перестал заниматься, потому что проект мне показался заброшенным.
  • Язык программирования Ü. Введение, мотивация к созданию, цели
    +4
    Маскот.
  • Не попадайте в ловушку преждевременной оптимизации
    –1
    У меня в Palemoon нет никакого WebAssembly.
  • И всё же C — низкоуровневый язык
    0
    В паскале это не расширение какого-то одного конкретого компилятора, а стандарт.
  • И всё же C — низкоуровневый язык
    +1
    Мне в сях часто не хватает множеств, нормальных строк, нормального switch/case, вложенных функций и иногда возможности установить любой диапазон индексов у массива.

    Красиво же:
    const
      map: array ['A'..'F'] of byte = (10, 11, 12, 13, 14, 15);

    или
    if s[i] in ['a'..'f', 'A'..'F'] then ...
  • И всё же C — низкоуровневый язык
    0
    Статических массивов было достаточно разве что школьникам, когда в подпрограмму надо было передать массив заранее неизвестной длины передавали указатель, пока не появилось динамических массивов.
  • И всё же C — низкоуровневый язык
    +1
    В этом вашем Си, в отличие от Паскаля, нет самостоятельных перечислимых типов, диапазонов, множеств, вложенных функций, вдобавок паскалевые массивы и строки знают о своей длине.
  • И всё же C — низкоуровневый язык
    0
    И где же они там спрятаны? В ТП были вполне полноценные указатели, появилась арифметика указателей, были массивы для доступа в произвольное место памяти (Mem, MemW и MemL, синтаксис: Mem[segment:offset]), массивы для доступа к портам (Port, PortW) и даже директива inline для вставок машинного кода (не ассемблера, а именно машинного, в виде чисел).