Прочитал статью, хочется плюсик поставить, но нет - вашей кармы для этого действия недостаточно. Сейчас какой-то массовый наплыв мусорных статей на хабр...
Направление верное взяли. Фишка ручного разбора в том (а не готового генератора типа PLY/FLEX/YACC), что можно выдавать человекопонятные сообщения об ошибках (забытая скобка, или перменная) и за один проход находить не только первую ошибку, а несколько, например в разных функциях вашего языка.
Существовали ровно до той поры пока память была быстрее ЦПУ. БЭСМ-6 же не была микрокодированной, но с конвеером и небольшим кэшем данных на 8 слов (БРЗ и БРЧ) и кэшем команд на 6 слов, а вот в реализации МЭСМ-6 ничего такого нет, чтобы было просто и понятно.
Вот, да, достаточно взглянуть на какой-нибудь godbolt чтобы посмотреть как современные компиляторы оптимизируют код. Иногда программа которая содержит в 5 раз больше машинных команд работает в 2-3 раза быстрее такой вот компактной.
Да и в целом не ясно зачем может понадобиться работать с 8-ми вычислениями и ловить переполнения, когда есть широкие регистры?
Кодек — это сокращение от кодер/декодер, компрессор это и есть кодер.
Сжатие достигается путем отбрасывания младших бит у коэффициентов ДКП высокочастотных составляющих + дополнительное уменьшение числа бит на коф-т за счет кодирования методом Хаффмана (арифметическое сжатие).
Да, остальное сжимается без потерь.
Полученные коэффициенты после ДКП квантуются (вот тут как раз потери возникают) и потом сжимаются методом Хаффмана (который lossless) и укладываются в файл.
Там еще проблема с энергопотреблением. Одно дело когда числа дробить, там всё здорово и прекрасно параллелится, а вот когда управляющий код с условными переходами тогда настает пичаль — приходится считать несколько веток программы и потом отбрасывать невалидные по предикату, но ведь энергию не отбросить. Получилось что «в реальной жизни» выгоднее сделать более умный диспетчер загрузки исполнителей, нежели перенести его логику в компиляторы и т.п. Да и потому что статикой никогда не обуздаешь динамику. Программы зависят не только от сложности алгоритмов но и еще от входных данных в динамике, поэтому куда проще (выгоднее) добавить в процессор SMT/SIMD для эффективной загрузки вычислительных блоков и снижения энергопотребления. То что происходит на уровне процессора в диспетчере загрузок исполнителей (суперскалярность и OoO) сейчас стали переносить в программы, которые во время исполнения собирают данные по ветвлениям прямо на ходу и специализируют себя увеличивая производительность кода программы на конкретных данных еще больше. По сути специализаторы времени выполнения, JIT
JVM это как игрушечный Smalltalk. Ява была сделана одними из авторов Smalltalk которых выкупил Sun в начале 90-х. Smalltalk, как известно, это и была ОС.
А вот по теме статьи как раз, лучше сравнить Erlang(Elixir) на OTP — вот уж точно замена докеру с кубером, мало того что там управление ресурсами есть между потоками и взаимодействие при помощи сообщений, так еще можно прозрачно процессы между нодами перекидывать + встроенный supervisord. Отлажено уже всё это 10-ти летиями. ;)
Зря там ниже на картинке Котлин обидели. Конечно, когда вы из котлина вызываете Ява-библиотеки, то вам может прийти оттуда null и необходимы будут ручные проверки. В Котлине для этого есть сахар.
Но, если вы не покидаете экосистему Котлин, то никаких танцев с бубном не будет.
В Котлин null это часть языка которая помогает, а не мешает. elizarov.medium.com/null-is-your-friend-not-a-mistake-b63ff1751dd5
Добрый день! А есть ли возможность для старых легаси сервисов, которые пишут логи в non-utf8 (iso, cp866 и cp1251) через промтейл/локи увидеть их в читаемом виде?
Посмотрел в исходники промтейла и не нашел там ключа для перекодировки. У локи тоже не нашел…
Заранее спасибо.
После подачи питания на ПЛИС, там нет reg_name, он появится потом, когда будет загружена конфигурация. После загрузки конфигурации, он появится и будет = 1.
Что касается второй части Вашего комментария, Вы хотели сказать моделируют, а синтезируют — компиляторы и роутеры :) И да, синтезировать целый процессор можно, но он никогда не будет работать с той частотой к которой мы привыкли.
Чем ПЛИС не железо? На ПЛИС работает. Автор же код не для ASIC делает.
Да и не в ASIC даже дело. Раз уж речь про «железо» так память и кеш никто не синтезирует сейчас из верилог.
Возможные конфигурации блоков памяти (из PDF про блоки памяти M9K на Макс 10): 8192 × 1
4096 × 2
2048 × 4
1024 × 8
1024 × 9
512 × 16
512 × 18
256 × 32
256 × 36
Но даже если вы попросите 48-бит или 64-ре то компилятор за вас объединит несколько в один блок.
Для старта очень полезно смотреть что же там нагородил компилятор в Technology Map и тогда будет например четко видно в чем разница в использовании блокирующего и не блокирующего присваивания в блоке always с posedge.
Прочитал статью, хочется плюсик поставить, но нет - вашей кармы для этого действия недостаточно. Сейчас какой-то массовый наплыв мусорных статей на хабр...
Направление верное взяли. Фишка ручного разбора в том (а не готового генератора типа PLY/FLEX/YACC), что можно выдавать человекопонятные сообщения об ошибках (забытая скобка, или перменная) и за один проход находить не только первую ошибку, а несколько, например в разных функциях вашего языка.
Существовали ровно до той поры пока память была быстрее ЦПУ. БЭСМ-6 же не была микрокодированной, но с конвеером и небольшим кэшем данных на 8 слов (БРЗ и БРЧ) и кэшем команд на 6 слов, а вот в реализации МЭСМ-6 ничего такого нет, чтобы было просто и понятно.
Вот, да, достаточно взглянуть на какой-нибудь godbolt чтобы посмотреть как современные компиляторы оптимизируют код. Иногда программа которая содержит в 5 раз больше машинных команд работает в 2-3 раза быстрее такой вот компактной.
Да и в целом не ясно зачем может понадобиться работать с 8-ми вычислениями и ловить переполнения, когда есть широкие регистры?
Сжатие достигается путем отбрасывания младших бит у коэффициентов ДКП высокочастотных составляющих + дополнительное уменьшение числа бит на коф-т за счет кодирования методом Хаффмана (арифметическое сжатие).
Полученные коэффициенты после ДКП квантуются (вот тут как раз потери возникают) и потом сжимаются методом Хаффмана (который lossless) и укладываются в файл.
А вот по теме статьи как раз, лучше сравнить Erlang(Elixir) на OTP — вот уж точно замена докеру с кубером, мало того что там управление ресурсами есть между потоками и взаимодействие при помощи сообщений, так еще можно прозрачно процессы между нодами перекидывать + встроенный supervisord. Отлажено уже всё это 10-ти летиями. ;)
Но, если вы не покидаете экосистему Котлин, то никаких танцев с бубном не будет.
В Котлин null это часть языка которая помогает, а не мешает.
elizarov.medium.com/null-is-your-friend-not-a-mistake-b63ff1751dd5
Посмотрел в исходники промтейла и не нашел там ключа для перекодировки. У локи тоже не нашел…
Заранее спасибо.
Что касается второй части Вашего комментария, Вы хотели сказать моделируют, а синтезируют — компиляторы и роутеры :) И да, синтезировать целый процессор можно, но он никогда не будет работать с той частотой к которой мы привыкли.
Да и не в ASIC даже дело. Раз уж речь про «железо» так память и кеш никто не синтезирует сейчас из верилог.
8192 × 1
4096 × 2
2048 × 4
1024 × 8
1024 × 9
512 × 16
512 × 18
256 × 32
256 × 36
Но даже если вы попросите 48-бит или 64-ре то компилятор за вас объединит несколько в один блок.
Для старта очень полезно смотреть что же там нагородил компилятор в Technology Map и тогда будет например четко видно в чем разница в использовании блокирующего и не блокирующего присваивания в блоке always с posedge.