185 похожих чатов

Ну.. в общем не спалось мне и почитал я всё,

что тут написали - на самом деле действительно дело с массивами в луа обстоит так-себе. Заявления о том, что там всё внутри как настоящий массив сложно проверить т.к. луа не умеет печатать свои массивы - это просто указатель на table, а что там внутри - хз. Можно к примеру выше добавить a[2] = nil и все принтилки, что я нашёл в интернете скажут, что у этого массива нет второго элемента т.е. там то, что Макс назвал дыркой (свечку над памятью VM не держал, но дело мутное) . А как массив будет реагировать на добавление новых элементов - видимо же расширяться? Значит это уже не просто массив, а типа слайс или аррейлист. Что ещё там скрыто интересного? table ведь может быть расширен, операторы перегружены т.е. по обращению по скобочкам может вызываться наша ф-я - а значит это уже не просто взятие элемента из памяти - это диспетчеризация, это вызов ф-и, короче... если там есть массив - то где-то очень глубоко.
Касаемо же самого концепта - дать абсолютно минимальный набор структур данных - вот тут уже точно скажу, что это бред. Структуры данных не просто так идут всегда вместе в книжках с алгоритмами т.к это суть одно и то-же - оптимальный способ оперирования данными, через структуру ли, или через действия над ними. Так вот, банить какую-то структуру данных - это то же, что банить алгоритмы - хз, что тут можно найти хорошего, это просто жёсткое ограничение выразительности и производительности. Знаю только одно разумное такое ограничение - иммутабильность, но и тут всё неоднозначно, и не просто так большинство языков до сих пор мутабельны. Если же речь только про простоту для программиста, мол в голове будет хорошо укладываться, можно будет сложные системы строить и не ошибаться - то это заблуждение. В Scheme тоже всё сведено до одних списков - много сложных систем на scheme видели? К тому-же на практике там всегда есть массивы - их добавляют те, кто делает реализацию, хоть их и нет в описании языка т.к. п*деть, как говорится - не мешки ворочать, и придумать язык с интересной идеей это совсем не то же самое, что потом на нём писать. Из таких "простых" языков, за счёт ограничения кол-ва используемых средств отмечу ещё брейнфак - так то проще уже некуда, но что-то проще от этого не стало. А дело всё вот в чём - есть такое понятие, как инварианты - ты видишь структуру данных и понимаешь, что в ней удовлетворяются какие-то обязательные условия, в ней не может что-угодно быть. И эти инварианты какраз делают систему проще, а когда массив - он же мапка, он же объект хз какого класса - проще от этого может быть только создателю языка (какая элегантная идея! и всего одно правило надо прописать в компиляторе!), но не пользователю языка.

1 ответов

33 просмотра

В Си++ "пришли с противоположного конца" - решили всё разнообразие структур данных (точнее - контейнерных) свести к одному (или похожему) интерфейсу и локационным типам, чтобы работать из одних и тех же "алгоритмов". В результате - опять "зоопарк" получился. Только теперь - из "описаний нюансов", оговорок, частных случаев и "особенностей"... "Нет счастия в жизни!"

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта