- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
void Assembler::divsd(XMMRegister dst, Address src) {
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
InstructionMark im(this);
simd_prefix(dst, dst, src, VEX_SIMD_F2);
emit_byte(0x5E);
emit_operand(dst, src);
}
void Assembler::divsd(XMMRegister dst, XMMRegister src) {
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2);
emit_byte(0x5E);
emit_byte(0xC0 | encode);
}
void Assembler::divss(XMMRegister dst, Address src) {
NOT_LP64(assert(VM_Version::supports_sse(), ""));
InstructionMark im(this);
simd_prefix(dst, dst, src, VEX_SIMD_F3);
emit_byte(0x5E);
emit_operand(dst, src);
}
void Assembler::divss(XMMRegister dst, XMMRegister src) {
NOT_LP64(assert(VM_Version::supports_sse(), ""));
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3);
emit_byte(0x5E);
emit_byte(0xC0 | encode);
}
void Assembler::emms() {
NOT_LP64(assert(VM_Version::supports_mmx(), ""));
emit_byte(0x0F);
emit_byte(0x77);
}
void Assembler::hlt() {
emit_byte(0xF4);
}
void Assembler::idivl(Register src) {
int encode = prefix_and_encode(src->encoding());
emit_byte(0xF7);
emit_byte(0xF8 | encode);
}
1. Процессорная архитектура
2. Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства
3. Протоколы управления этими самыми внешними устройствами.
Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, описав байткод жабы, автоматически сгенерировать через какую-то хитрую жопу некий код, который бы умел выполнять трансляцию байткодов жабы в машинный код целевого процессора, с учетом всех архитектурных особенностей ЭВМ. Т.е. фактически
1. Формально описываем архитектуру ЭВМ, ISA
2. Формально описываем жавовый байткод
3. Пишем код (x), который по декларативному описанию 1 и 2 сможет автоматически сгенерить код(y), который будет уметь переводить из 2 в 1 с полным сохранением семантики, и чтоб корректность трансляции из языка 2 в язык 1 была полностью формально доказана для любых возможных последовательностей жавового байткода. При этом нужно, чтобы была доказана корректность кода (x), и если корректность кода (x) доказана, то из его корректности вытекает и корректность кода (y), порождаемого им. Вообще, код (x) это очень охуительная штука, это чем-то напоминают третью проекцию Футамуры, только круче, это генератор компиляторов(трансляторов) из любого языка в любой другой по формальному описанию(спецификации) этих двух языков. Насчет проекций Футанарей Футамуры советую почитать например тут https://habrahabr.ru/post/47418/.
Жаба умеет в ring 0?
А затем доказать, что все инструкции описаны правильно (т.е. именно так, как они будут исполнены процессором).
Это я к тому, что код из топика написать и отревьювить всяко легче, чем твою универсальную систему + 2 универсальных описания байткодов. Даже для всех существующих процессоров.
Батенька, вам следует лечиться током. Никто в здравом уме не будет утверждать, что доказательство верно. Математики постоянно ошибаются, а трансформация "в лоб" - нет
Т.е. может например так оказаться, что теорема Пифагора является полной хуитой? Ну вообще в геометрии Лобачевского так и есть, но там уже аксиоматика другая. А для обычной геометрии эта теорема доказана железобетонно
Вполне возможно, а возможно и то, что она иногда верна, а иногда - нет
Батенька, а вы знаете, что возможно и то, что вы хуй, болтающийся у меня в трусах?
Вот я и решил туда в код заглянуть в поисках говна (покушать принес вам тут)
А как вы относитесь к C#/.NET?
http://sym.at.ua/blog/how_to_win_any_argument/2012-12-20-1
So you want to prove that "2+2=5"? Not so fast! First ask your opponent what proves "2+2=4" and watch the silly jerk trying to invoke his hollow schoolbook erudition. If he has PhD in math, then it will be worse for him, as he will present you some set theoretic definitions, based on very specific axiomatic presuppositions, which no one ought to accept "true", as there is no "objective truth", these math freaks masturbate at.
Next step would be doubting the concept of "truth" itself, because truth is subjective, so "2+2=4" has no reason to be true for everyone. Ask your opponent to define "truth" and counter any dictionary references the same way I shown you how to counter "2+2=4" argument: i.e. ask "what makes your definition of truth itself to be true?"
Во все существующие пруфчекеры предлагается только уверовать.
https://github.com/clarus/falso/blob/master/All.v (эпичный баг в Coq Gallina, позволявший доказать False, например)
https://avva.livejournal.com/2647325.html
https://inf.1september.ru/2000/5/art/turing.htm
Допустим что есть идеальная функция X(теорема, доказательство) которая для любой теоремы с корректным доказательством может всегда за конечное время правильно ответить, правильно ли доказательство этой самой теоремы (т.е. возвращает true если доказательство корректно, false если некорректно. Вернуть unknown(т.е. не смочь проверить, правильно ли доказательство) или зависнуть функция не может). Тогда берем эту самую функцию проверки доказательств, и приделываем к ней программу, перебирающую все возможные доказательства для какой-то там теоремы. Т.е. будет функция X1(теорема), а все возможные доказательства попросту брутфорсятся. Получается, что функция X1 возвращает true если есть корректное доказательство и зависает, если доказательства не существует. Ну а теперь по обычной схеме, т.е. через то же доказательство, что у проблемы останова, сделаем теорему T1 = "теорема о том, что X1 зависнет, проверяя теорему T1"
Делаем X1(T1) - получится так, что если доказательство теоремы T1 существует, то тогда X1(T1) должен зависнуть, а это значит что доказательства искомой теоремы не существует. Но раз мы это смогли понять, то функция X1 перебором должна суметь такое доказательство найти и доказать что X1(T1) зависнет, а если она сможет его доказать, то тогда она не должна зависать. Приходим к противоречию. Идеальный проверятель теорем может работать только на каких-то сверхтьюринговых машинах
На некоторых процессорах инструкция LOOP быстрее, чем цепочка DEC RCX; JNZ, на некоторых — наоборот. Таких примеров можно найти море.
Как описать оптимизацию под конкретный процессор?
P.S. Я ещё не упомянул, что уже у первого Пентиума было два конвейера (U-pipe и V-pipe) и оптимизацию нужно было делать с учётом, что не все инструкции пролезают во второй конвейер...
P.P.S. А ещё у некоторых процессоров были глюки... Например, после инструкции перехода иногда надо было вставлять NOP, чтобы предиктор чего-нибудь лишнего не засосал.
Это же по сути AST. Преобразования туда-обратно не особо нужны. По факту, нужен некий универсальный формат AST, в который можно преобразовать из любого (не слишком экзотерического) яп, и который уже будет использоваться для оптимизаций и генерации байткода унифицированными средствами. Это уже придумали и называется llvm.
В теории, можно все яп свести к трансляции в единый AST, который уже дальше будет унифицированно оптимизироваться и интерпретироваться или компилироваться в зависимости от задачи (заодно и парситься для синтаксической подсветки). Так можно заодно полностью стереть грань между интерпретируемыми и компилируемыми яп, и заодно между разными яп в рамках одного приложения.
Во-первых llvm говно (попробуй на нем Сетунь описать. llvm байткод предполагает, что мы имеем дело с битами, тогда как на деле это может быть совсем не так). Во-вторых такое было и до llvm.
Что же касается трансляции из любого ЯП в некий AST и потом из AST трансляция в любой язык - так против этого я ничего не имею. НО в LLVM используется LLVM-БАЙТКОД, это не AST! Байткод это может и неплохо, если например будет способ специализировать этот байткод, например чтоб можно было сделать легко свой байткод с тритами вместо битов и еще какой-нибудь хренью, почему бы и нет...
Мне вообще не нравится LLVM, в LLVM вообще нет ничего нового, никаких новых идей в LLVM нет.
Проблема недостаточной абстрагированности будет остро стоять когда у нас появятся альтернативные архитектуры общего пользования, причем не в виде лабораторных игрушек
LLVM сделали не для проверки новых идей, а чтобы распилить компилятор на реюзабельные компоненты. Монолитное говно вроде GCC тормозит прогресс.
</Stallman>
Пора бы уже законодательно (законодательство об авторском праве) запретить Public Domain и дискриминацию проприетарщины
на govnokod.ru, разумеется
Я вообще сплоиты разрабатываю.
И каким хуем это тебя спасёт от GPL? Будет несвободный сервис, дальше-то что?
У тебя ошибка: оставив только Microsoft Shared Source
Говно
https://www.linux.org.ru/forum/talks/12214511#comment-12215138
Если бы людям тогда объяснили, что под словом «прогресс» подразумевают облегчение выдrustывания кучи сырых говноязыков для анскильной школоты.
Думаю все бы скептически смотрели на это "распиливание" ...
Вон, ASD свой TS на нем пилит, а яблоко сделало "свифт"
Котлин нейтив (которым, правда, пользуется 0 человек) тоже использует LLVM
Такие благие цели декларировались. Изрекали такие пафосные вещи: «Монолитное говно», «тормозит прогресс».
А в итоге что? Получили обилие недоязыков и крики: «да я же как Сишка*»
* на -O0 при даунклокнутом процессоре
У него нет GC, а значит он не скриптуха)
База по-прежнему сишная (рантайм objective), компилятор на семантике крестов.
То есть вместо «прогресса» просто дальнейшие наслоения говн.
В смысле?
https://blog.regehr.org/archives/1467
https://bugs.swift.org/browse/SR-3016
Какой прогресс )))
Ну ок, но UB есть и в няшной
Но в Сишке о минах предупреждают заранее.
А в стандартах «swift», «rust» предупреждают про UB?
При случае передам Борманду с Гостом что у них в С++ со смартпоинтерами есть медленная и некорректная версия GC.
https://govnokod.ru/26439#comment528160
https://iacoma.cs.uiuc.edu/iacoma-papers/pact18.pdf
Garbage collection is the process of runtime monitoring the life-time of objects and freeing them once they are no longer necessary.
There are two main approaches to garbage collection: tracing [28] and reference counting (RC) [17].
Теперь интересно узнать про остальные вопросы
Островки циклических ссылок же.
> медленная
Тут спорно. Пусть CHayT развернёт что он имел ввиду.
В том, что она не реализует какую-то фишку, которая есть в другой системе?
Под контроллеры есть ОС, в которых никаких "дескрипторов" и "хендлеров" нет.
Та самая грань между ОС и библиотекой для переключения задач...
Дяденька Пи выше объяснил.
> приведи пример медленности
Требует атомарные операции в общем случае. Когда питушня выходит из скопа, происходит рекурсивный вызов деструкторов, что мало того, что небыстро, но может и стек пробить. Не умеет дефрагментировать кучу.
> define "версия GC"
Дяденька Пи выше объяснил.
GC это некорректная реализация RC, потому что вызов десктрутора в ней не детерменирован, и приходится использовать все эти Closable и Disposable
> Требует атомарные операции в общем случае. Когда питушня выходит > из скопа, происходит рекурсивный вызов деструкторов. Не умеет
> дефрагментировать кучу.
Существуют какие-то исследования, доказывающие что это всё медлеенее хорошего крепкого Major GC в джаве на секунду?
У меня в ``ФП'' никаких Closable и Disposable нет.
> что это всё медлеенее хорошего крепкого Major GC в джаве на секунду
ЙАЖА не нужна. У меня в ``ФП'' никаких секундных major GC нет.
Кстати, почему?
Но он вроде поляк, а не украинец
В Erlang есть даже подобие арен, когда питушню, которая много аллоцирует, выносят в отдельный worker процесс, который отработав дохнет, и тогда никакого GC не нужно.
Конечно, Полина Аксёнова с бормандом накрестушат более быстрые программы для частных случаев, но BEAM вылизывали для high I/O лет тридцать, и в общем случае она очень и очень хороша.
Хм, если вдуматься, то и Йажу тюнят больше 20 лет...
Хотя там в последних версиях начались подвижки: Shenandoah, ZGC.
Правда лично я их не пробовал, ибо потерял интерес к йажвм.
Но это всё не чинит проблем вроде отсутствия "тактически копирует память"
А чем ты сейчас увлекаешься?
А эту проблему и не починить пока у тебя есть мутабельные данные.
Эрлангу пофиг копия там или ссылка. Джаве не пофиг.
Нет уж, пусть жрут кактус.
> ма-тем-ати-чес-ки доказать
rust уже пробовал доказать корректность ма-тем-ати-чес-ки.
Правда llvm, на котором он стоит тут же всё это опроверг.
Как говорил один финский парень: Theory and practice sometimes clash. And when that happens, theory loses. Every single time.