- 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);
}
j123123 29.08.2017 19:43 # 0
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/.
j123123 29.08.2017 19:43 # +1
bormand 29.08.2017 19:48 # 0
Жаба умеет в ring 0?
j123123 29.08.2017 19:50 # 0
subaru 29.08.2017 19:55 # 0
bormand 29.08.2017 19:58 # +1
А затем доказать, что все инструкции описаны правильно (т.е. именно так, как они будут исполнены процессором).
j123123 29.08.2017 20:07 # +1
bormand 29.08.2017 20:14 # +1
Это я к тому, что код из топика написать и отревьювить всяко легче, чем твою универсальную систему + 2 универсальных описания байткодов. Даже для всех существующих процессоров.
d_fomenok 29.08.2017 19:59 # +1
Батенька, вам следует лечиться током. Никто в здравом уме не будет утверждать, что доказательство верно. Математики постоянно ошибаются, а трансформация "в лоб" - нет
j123123 29.08.2017 20:06 # 0
Т.е. может например так оказаться, что теорема Пифагора является полной хуитой? Ну вообще в геометрии Лобачевского так и есть, но там уже аксиоматика другая. А для обычной геометрии эта теорема доказана железобетонно
d_fomenok 29.08.2017 20:08 # 0
Вполне возможно, а возможно и то, что она иногда верна, а иногда - нет
j123123 29.08.2017 20:11 # 0
d_fomenok 29.08.2017 20:13 # +2
Батенька, а вы знаете, что возможно и то, что вы хуй, болтающийся у меня в трусах?
j123123 29.08.2017 20:18 # 0
d_fomenok 29.08.2017 20:20 # 0
j123123 29.08.2017 20:22 # 0
Вот я и решил туда в код заглянуть в поисках говна (покушать принес вам тут)
d_fomenok 29.08.2017 20:42 # 0
А как вы относитесь к C#/.NET?
j123123 29.08.2017 21:00 # −2
subaru 29.08.2017 20:16 # 0
j123123 29.08.2017 20:17 # 0
bormand 29.08.2017 20:01 # +3
j123123 29.08.2017 20:09 # 0
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?"
j123123 29.08.2017 20:15 # 0
Antervis 29.08.2017 20:29 # 0
MacFerden 30.08.2017 06:41 # 0
j123123 30.08.2017 07:15 # 0
Antervis 30.08.2017 08:45 # 0
j123123 30.08.2017 08:49 # 0
subaru 03.02.2018 19:46 # −1
g0_1494089156986 03.02.2018 20:05 # +1
subaru 03.02.2018 21:34 # −1
g0_1494089156986 03.02.2018 21:56 # +1
CHayT 30.08.2017 01:12 # +2
Во все существующие пруфчекеры предлагается только уверовать.
https://github.com/clarus/falso/blob/master/All.v (эпичный баг в Coq Gallina, позволявший доказать False, например)
j123123 03.02.2018 19:06 # +1
CHayT 03.02.2018 19:25 # +2
j123123 03.02.2018 21:06 # 0
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) зависнет, а если она сможет его доказать, то тогда она не должна зависать. Приходим к противоречию. Идеальный проверятель теорем может работать только на каких-то сверхтьюринговых машинах
inkanus-gray 29.08.2017 20:39 # 0
На некоторых процессорах инструкция LOOP быстрее, чем цепочка DEC RCX; JNZ, на некоторых — наоборот. Таких примеров можно найти море.
Как описать оптимизацию под конкретный процессор?
P.S. Я ещё не упомянул, что уже у первого Пентиума было два конвейера (U-pipe и V-pipe) и оптимизацию нужно было делать с учётом, что не все инструкции пролезают во второй конвейер...
P.P.S. А ещё у некоторых процессоров были глюки... Например, после инструкции перехода иногда надо было вставлять NOP, чтобы предиктор чего-нибудь лишнего не засосал.
Antervis 29.08.2017 21:03 # +1
j123123 29.08.2017 21:18 # +1
123123123 29.08.2017 22:42 # +2
j123123 29.08.2017 23:00 # 0
Antervis 29.08.2017 21:00 # −1
Это же по сути AST. Преобразования туда-обратно не особо нужны. По факту, нужен некий универсальный формат AST, в который можно преобразовать из любого (не слишком экзотерического) яп, и который уже будет использоваться для оптимизаций и генерации байткода унифицированными средствами. Это уже придумали и называется llvm.
В теории, можно все яп свести к трансляции в единый AST, который уже дальше будет унифицированно оптимизироваться и интерпретироваться или компилироваться в зависимости от задачи (заодно и парситься для синтаксической подсветки). Так можно заодно полностью стереть грань между интерпретируемыми и компилируемыми яп, и заодно между разными яп в рамках одного приложения.
j123123 29.08.2017 21:19 # 0
Во-первых llvm говно (попробуй на нем Сетунь описать. llvm байткод предполагает, что мы имеем дело с битами, тогда как на деле это может быть совсем не так). Во-вторых такое было и до llvm.
Antervis 30.08.2017 05:22 # 0
j123123 30.08.2017 05:43 # +1
Что же касается трансляции из любого ЯП в некий AST и потом из AST трансляция в любой язык - так против этого я ничего не имею. НО в LLVM используется LLVM-БАЙТКОД, это не AST! Байткод это может и неплохо, если например будет способ специализировать этот байткод, например чтоб можно было сделать легко свой байткод с тритами вместо битов и еще какой-нибудь хренью, почему бы и нет...
Мне вообще не нравится LLVM, в LLVM вообще нет ничего нового, никаких новых идей в LLVM нет.
Antervis 30.08.2017 06:56 # 0
Проблема недостаточной абстрагированности будет остро стоять когда у нас появятся альтернативные архитектуры общего пользования, причем не в виде лабораторных игрушек
roman-kashitsyn 30.08.2017 11:52 # +5
LLVM сделали не для проверки новых идей, а чтобы распилить компилятор на реюзабельные компоненты. Монолитное говно вроде GCC тормозит прогресс.
CHayT 30.08.2017 18:27 # +3
</Stallman>
d_fomenok 30.08.2017 18:35 # +1
Пора бы уже законодательно (законодательство об авторском праве) запретить Public Domain и дискриминацию проприетарщины
j123123 30.08.2017 21:48 # +3
defecate-plusplus 30.08.2017 22:39 # +2
roman-kashitsyn 30.08.2017 23:16 # +4
на govnokod.ru, разумеется
j123123 30.08.2017 23:28 # 0
Я вообще сплоиты разрабатываю.
CHayT 30.08.2017 23:35 # +2
123123123 30.08.2017 23:43 # 0
j123123 30.08.2017 23:48 # 0
123123123 30.08.2017 23:16 # 0
vistefan 31.08.2017 10:51 # 0
И каким хуем это тебя спасёт от GPL? Будет несвободный сервис, дальше-то что?
subaru 31.08.2017 19:28 # −1
Antervis 31.08.2017 13:53 # 0
123123123 31.08.2017 14:01 # +2
d_fomenok 31.08.2017 11:23 # 0
У тебя ошибка: оставив только Microsoft Shared Source
j123123 31.08.2017 19:16 # +3
Говно
j123123 31.08.2017 19:13 # 0
https://www.linux.org.ru/forum/talks/12214511#comment-12215138
3.14159265 11.08.2021 17:59 # 0
Если бы людям тогда объяснили, что под словом «прогресс» подразумевают облегчение выдrustывания кучи сырых говноязыков для анскильной школоты.
Думаю все бы скептически смотрели на это "распиливание" ...
MAKAKA 11.08.2021 18:39 # 0
Вон, ASD свой TS на нем пилит, а яблоко сделало "свифт"
Котлин нейтив (которым, правда, пользуется 0 человек) тоже использует LLVM
3.14159265 11.08.2021 18:41 # 0
Такие благие цели декларировались. Изрекали такие пафосные вещи: «Монолитное говно», «тормозит прогресс».
А в итоге что? Получили обилие недоязыков и крики: «да я же как Сишка*»
* на -O0 при даунклокнутом процессоре
MAKAKA 11.08.2021 18:41 # 0
У него нет GC, а значит он не скриптуха)
3.14159265 11.08.2021 18:48 # 0
База по-прежнему сишная (рантайм objective), компилятор на семантике крестов.
То есть вместо «прогресса» просто дальнейшие наслоения говн.
MAKAKA 11.08.2021 18:49 # 0
В смысле?
3.14159265 11.08.2021 18:51 # 0
https://blog.regehr.org/archives/1467
https://bugs.swift.org/browse/SR-3016
Какой прогресс )))
MAKAKA 11.08.2021 18:56 # 0
Ну ок, но UB есть и в няшной
3.14159265 11.08.2021 18:59 # 0
Но в Сишке о минах предупреждают заранее.
А в стандартах «swift», «rust» предупреждают про UB?
MAKAKA 11.08.2021 19:01 # 0
j123123 11.08.2021 19:02 # 0
Desktop 11.08.2021 18:53 # 0
CHayT 11.08.2021 18:51 # 0
MAKAKA 11.08.2021 18:54 # +2
При случае передам Борманду с Гостом что у них в С++ со смартпоинтерами есть медленная и некорректная версия GC.
3.14159265 11.08.2021 18:57 # 0
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].
MAKAKA 11.08.2021 19:00 # 0
Теперь интересно узнать про остальные вопросы
3.14159265 11.08.2021 19:02 # 0
Островки циклических ссылок же.
> медленная
Тут спорно. Пусть CHayT развернёт что он имел ввиду.
MAKAKA 11.08.2021 19:05 # +2
В том, что она не реализует какую-то фишку, которая есть в другой системе?
j123123 11.08.2021 20:47 # 0
Под контроллеры есть ОС, в которых никаких "дескрипторов" и "хендлеров" нет.
MAKAKA 11.08.2021 22:14 # 0
bormand 12.08.2021 09:35 # +2
Та самая грань между ОС и библиотекой для переключения задач...
CHayT 11.08.2021 19:07 # 0
Дяденька Пи выше объяснил.
> приведи пример медленности
Требует атомарные операции в общем случае. Когда питушня выходит из скопа, происходит рекурсивный вызов деструкторов, что мало того, что небыстро, но может и стек пробить. Не умеет дефрагментировать кучу.
> define "версия GC"
Дяденька Пи выше объяснил.
MAKAKA 11.08.2021 19:10 # +2
GC это некорректная реализация RC, потому что вызов десктрутора в ней не детерменирован, и приходится использовать все эти Closable и Disposable
> Требует атомарные операции в общем случае. Когда питушня выходит > из скопа, происходит рекурсивный вызов деструкторов. Не умеет
> дефрагментировать кучу.
Существуют какие-то исследования, доказывающие что это всё медлеенее хорошего крепкого Major GC в джаве на секунду?
CHayT 11.08.2021 19:13 # +1
У меня в ``ФП'' никаких Closable и Disposable нет.
> что это всё медлеенее хорошего крепкого Major GC в джаве на секунду
ЙАЖА не нужна. У меня в ``ФП'' никаких секундных major GC нет.
MAKAKA 11.08.2021 19:15 # +1
CHayT 11.08.2021 19:16 # +4
Desktop 11.08.2021 19:19 # +3
CHayT 11.08.2021 19:21 # 0
bootcamp_dropout 11.08.2021 19:34 # 0
MAKAKA 11.08.2021 19:43 # +2
bootcamp_dropout 11.08.2021 19:45 # 0
j123123 11.08.2021 19:49 # +3
bootcamp_dropout 11.08.2021 19:51 # 0
MAKAKA 11.08.2021 19:54 # 0
Кстати, почему?
j123123 11.08.2021 20:18 # +5
CHayT 11.08.2021 20:34 # 0
bootcamp_dropout 11.08.2021 20:43 # 0
CHayT 11.08.2021 20:49 # 0
bootcamp_dropout 11.08.2021 20:52 # 0
j123123 11.08.2021 20:53 # +1
CHayT 11.08.2021 20:55 # +1
MAKAKA 11.08.2021 21:09 # 0
Но он вроде поляк, а не украинец
CHayT 11.08.2021 21:23 # 0
В Erlang есть даже подобие арен, когда питушню, которая много аллоцирует, выносят в отдельный worker процесс, который отработав дохнет, и тогда никакого GC не нужно.
Конечно, Полина Аксёнова с бормандом накрестушат более быстрые программы для частных случаев, но BEAM вылизывали для high I/O лет тридцать, и в общем случае она очень и очень хороша.
3.14159265 11.08.2021 21:41 # 0
Хм, если вдуматься, то и Йажу тюнят больше 20 лет...
Хотя там в последних версиях начались подвижки: Shenandoah, ZGC.
Правда лично я их не пробовал, ибо потерял интерес к йажвм.
MAKAKA 11.08.2021 22:05 # 0
Но это всё не чинит проблем вроде отсутствия "тактически копирует память"
А чем ты сейчас увлекаешься?
bormand 12.08.2021 10:10 # 0
А эту проблему и не починить пока у тебя есть мутабельные данные.
Эрлангу пофиг копия там или ссылка. Джаве не пофиг.
j123123 29.08.2017 22:49 # −1
roman-kashitsyn 29.08.2017 22:01 # +2
Нет уж, пусть жрут кактус.
inkanus-gray 29.08.2017 22:26 # +1
3.14159265 11.08.2021 18:36 # 0
> ма-тем-ати-чес-ки доказать
rust уже пробовал доказать корректность ма-тем-ати-чес-ки.
Правда llvm, на котором он стоит тут же всё это опроверг.
Как говорил один финский парень: Theory and practice sometimes clash. And when that happens, theory loses. Every single time.