Преимущества React Hooks над Vue Composable API крайне сомнительны. Во Vue реализована настоящая модель реактивности, а хуки — эрзац-версия, в которой пересчёт костыльно прикручен к рендер-циклу.
QBasic потому и был урезанным, что содержал только интерпретатор, а компиляция в QuickBasic была вроде настоящей, с промежуточной генерацией объектных файлов и линковкой, а не просто заворачиванием промежуточного кода в рантайм.
В «теоретически возможном плане» возможно всё, но изменение в ядре никакого переполнения стека не произведёт. Там выделение одной лишней переменной. До переполнения там очень сильно далеко. Фраза про «очень близко к этому» не означает «близко к исчерпанию стека». Более того, выделенный участок стека освобождается при выходе из функции, поэтому на некие программы, использующие стек по максимуму, это тоже не повлияет. Но выделять много памяти на стеке и рассчитывать на это — тоже неправильно, если только речь не про прошивку микроконтроллера, которая самостоятельно распоряжается всей доступной памятью.
Так а как выполнение контрактов связано с работой софта?
Речь о контрактах в программировании, это не про юридические контракты, а про API, ABI и документированность поведения. Изменение не портит аллоцированную память, а то, что игра пытается интерпретировать значения из неинициализированной памяти, так это неопределённое поведение, и любой студент-айтишник скажет, что так нельзя. Здесь полностью вина Rockstar, что они аллоцировали память, не проинициализировали её дефолтными значениями, а также проигнорировали возвращаемое функцией sscanf количество проинициализированных переменных.
Или я упускаю важности контрактов в контексте не работы софта, не спроста она же жирным выделена?
Нет, речь идёт о том, что внутренние функции Windows вправе использовать неаллоцированную память как посчитают нужным, а программисты не вправе рассчитывать на те значения, которые будут лежать в аллоцированной ими, но непроинициализированной памяти. Это и есть контракт.
Грубая аналогия произошедшего такая: идёт урок в классе, преподаватель пишет что-то на доске. Затем урок заканчивается, и все уходят (память освобождена). На следующий день преподаватель и студенты возвращаются (снова аллоцировали память), но они не вправе считать, что всё ранее записанное на доске, сохранится как было. Может быть занятий в аудитории не было или были, но на доске ничего не писали, или писали только на части доски. Соответственно, они не должны продолжать работать с тем, что там уже записано (неопределённое поведение), а следует стереть всё с доски и записать заново (проинициализировать память).
Там нет переполнения стека, скорее всего они просто добавили в функцию одну новую переменную. В плане совместимости игра в целом работает, и в этом они контрактов не нарушили.
Так в том и дело, что в Турции — это разные буквы. В Турции uppercase("i") == "İ", а lowercase("I") == "ı".
Проблема же в том, что работы ссылки на файл, сделанной в другом регистре, будет зависеть от системной локали, что рано или поздно приведёт к проблемам.
Так система не перетирает актуальный стек, там легальное поведение. Просто одна из процедур ядра стала класть в стек на 4 байта больше (int32), чем модифицировала в памяти значение, которое будет (грубо говоря) прочитано из неинициализированной переменной (на самом деле — из ячейки памяти, в которую перед чтением sscanf ничего не положит).
Basic. Который тянула ms виде VB и VBA , пока не поменяла его на Visual Basic .NET, где от оригинала осталось уже совсем мало. Язык ещё более древний чем паскаль, и в изначальном виде архаичный. Кто начинал с УКНЦ и Спектрума вспомнят нумерацию строк,GO TO (привет Дейкстре) и прочие особенности, которые в 21 веке уже выглядят совсем странными.
Но уже в конце 80-х (то есть до Delphi) Microsoft выпустил гораздо менее архаичный QuickBasic, практически приблизив его к Pascal. В итоге, как мне кажется, Visual Basic .NET и помог победить Delphi.
Не так. Должно быть: — А откуда взялся авиаконструктор? — Мы не знаем, поэтому считаем, что его никто не создал, он всемогущий, существовал всегда и будет существовать вечно.
Во вью для такого хитрого кейса есть watchEffect
И чем же вьюшные
onMounted()
/onUnmounted()
менее удобны? Они даже более наглядны в данном случае.Ну и что же они могут такого, что хуже реализуется во Vue?
Что же мешает во Vue пользоваться JSX? https://vuejs.org/guide/extras/render-function#jsx-tsx
Преимущества React Hooks над Vue Composable API крайне сомнительны. Во Vue реализована настоящая модель реактивности, а хуки — эрзац-версия, в которой пересчёт костыльно прикручен к рендер-циклу.
QBasic потому и был урезанным, что содержал только интерпретатор, а компиляция в QuickBasic была вроде настоящей, с промежуточной генерацией объектных файлов и линковкой, а не просто заворачиванием промежуточного кода в рантайм.
И чем же React + MobX лучше, чем Vue?
Vuex мёртв, но комментатор имел в виду, что стейт-менеджер может в принципе не понадобиться.
Для большинства крупных проектов даже на $mol пришлось бы разрабатывать свой UI Kit, чтобы соответствовать брендбуку и дизайн-макетам.
Такой подход был у джобсовского NeXTSTEP, в частности у Interface Builder. И в Photoshop такой же многооконный интерфейс применялся.
Так QBasic, поставлявшийся вместе с DOS, — и был урезанной версией. А полный QuickBasic даже умел компилировать в exe.
В «теоретически возможном плане» возможно всё, но изменение в ядре никакого переполнения стека не произведёт. Там выделение одной лишней переменной. До переполнения там очень сильно далеко. Фраза про «очень близко к этому» не означает «близко к исчерпанию стека». Более того, выделенный участок стека освобождается при выходе из функции, поэтому на некие программы, использующие стек по максимуму, это тоже не повлияет. Но выделять много памяти на стеке и рассчитывать на это — тоже неправильно, если только речь не про прошивку микроконтроллера, которая самостоятельно распоряжается всей доступной памятью.
Речь о контрактах в программировании, это не про юридические контракты, а про API, ABI и документированность поведения. Изменение не портит аллоцированную память, а то, что игра пытается интерпретировать значения из неинициализированной памяти, так это неопределённое поведение, и любой студент-айтишник скажет, что так нельзя. Здесь полностью вина Rockstar, что они аллоцировали память, не проинициализировали её дефолтными значениями, а также проигнорировали возвращаемое функцией sscanf количество проинициализированных переменных.
Нет, речь идёт о том, что внутренние функции Windows вправе использовать неаллоцированную память как посчитают нужным, а программисты не вправе рассчитывать на те значения, которые будут лежать в аллоцированной ими, но непроинициализированной памяти. Это и есть контракт.
Грубая аналогия произошедшего такая: идёт урок в классе, преподаватель пишет что-то на доске. Затем урок заканчивается, и все уходят (память освобождена). На следующий день преподаватель и студенты возвращаются (снова аллоцировали память), но они не вправе считать, что всё ранее записанное на доске, сохранится как было. Может быть занятий в аудитории не было или были, но на доске ничего не писали, или писали только на части доски. Соответственно, они не должны продолжать работать с тем, что там уже записано (неопределённое поведение), а следует стереть всё с доски и записать заново (проинициализировать память).
Там нет переполнения стека, скорее всего они просто добавили в функцию одну новую переменную. В плане совместимости игра в целом работает, и в этом они контрактов не нарушили.
Но компьютер не имеет особого понятия об алфавите IPA. Для него
uppercase("/bɔɪ/") == "/BƆꞮ/"
.Так в том и дело, что в Турции — это разные буквы. В Турции
uppercase("i") == "İ"
, аlowercase("I") == "ı"
.Проблема же в том, что работы ссылки на файл, сделанной в другом регистре, будет зависеть от системной локали, что рано или поздно приведёт к проблемам.
То есть на компьютере в России файлы istanbul.txt и Istanbul.txt будут одинаковыми, а в Турции — разными?
Так система не перетирает актуальный стек, там легальное поведение. Просто одна из процедур ядра стала класть в стек на 4 байта больше (int32), чем модифицировала в памяти значение, которое будет (грубо говоря) прочитано из неинициализированной переменной (на самом деле — из ячейки памяти, в которую перед чтением sscanf ничего не положит).
Но уже в конце 80-х (то есть до Delphi) Microsoft выпустил гораздо менее архаичный QuickBasic, практически приблизив его к Pascal. В итоге, как мне кажется, Visual Basic .NET и помог победить Delphi.
Тогда бы уже и на картинке попросить ИИ нарисовать хотя бы Fender Precision Bass, вместо стратокастера :)
Вот только это процессор для бас-гитары. Заголовок и КДПВ вводят в заблуждение.
Не так. Должно быть:
— А откуда взялся авиаконструктор?
— Мы не знаем, поэтому считаем, что его никто не создал, он всемогущий, существовал всегда и будет существовать вечно.