- 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
Python: What if everything was a dict?
Java: What if everything was an object?
JavaScript: What if everything was a dict *and* an object?
C: What if everything was a pointer?
APL: What if everything was an array?
Tcl: What if everything was a string?
Prolog: What if everything was a term?
LISP: What if everything was a pair?
Scheme: What if everything was a function?
Haskell: What if everything was a monad?
Assembly: What if everything was a register?
Coq: What if everything was a type/proposition?
COBOL: WHAT IF EVERYTHING WAS UPPERCASE?
C#: What if everything was like Java, but different?
Ruby: What if everything was monkey patched?
Pascal: BEGIN What if everything was structured? END
C++: What if we added everything to the language?
C++11: What if we forgot to stop adding stuff?
Rust: What if garbage collection didn't exist?
Go: What if we tried designing C a second time?
Perl: What if shell, sed, and awk were one language?
Perl6: What if we took the joke too far?
PHP: What if we wanted to make SQL injection easier?
VB: What if we wanted to allow anyone to program?
VB.NET: What if we wanted to stop them again?
Forth: What if everything was a stack?
ColorForth: What if the stack was green?
PostScript: What if everything was printed at 600dpi?
XSLT: What if everything was an XML element?
Make: What if everything was a dependency?
m4: What if everything was incomprehensibly quoted?
Scala: What if Haskell ran on the JVM?
Clojure: What if LISP ran on the JVM?
Lua: What if game developers got tired of C++?
Mathematica: What if Stephen Wolfram invented everything?
Malbolge: What if there is no god?
Уже сейчас для поклонников этого чудесного языке не действует ограничение в 2к символов.
except byte, short, int, long, float, double, boolean?
Хорошо что в .NET этой проблемы нет)
а в чем разница между примитивами в объектами в java? с c# byte, int, etc это структуры, и они в стеке не хранятся например, и иммутаббельныые, ну и другие хитрости есть.
Примитивы передаются по значению, объекты — по ссылке. В общем, это примерно как структуры в C#, только их всего 8 и новые объявлять нельзя.
> они в стеке не хранятся например, и иммутаббельныые
Подозреваю, что всё же хранятся, и композитные структуры всё-же мутабельные по-умолчанию.
В C#, на самом деле, почти тоже самое, просто у valuetypes там есть методы (это сахар), и wrap/unwrap делается куда прозрачнее.
Так что лохыч в лужу газирнул немнтго
в принципе этого достаточно.
>Подозреваю, что всё же хранятся, и композитные структуры всё-же мутабельные по-умолчанию.
если я правильно вкурил доку, то не совсем так. структуры не хранятся в управляемой куче, они хранятся в стеке и если ты меняешь значение поля, то он создает новую структуру на месте старой.
например, если создать ListL<> моих структур, и через foreach их менять, то он выдаст тебе тебе ошибку компиляции. работает только последний пример.
но вообще, в принципе, структуру можно загнать в кучу.
если я напишу то тут он упакует мою структуру, и поместит ее в памяти как ссылочный тип, а если я приведу ее обратно к ее типу, то он распакует ее, и вернет копию.
короче, есть профит использования структур по части производительности и потребления памяти, но с этим надо уметь работать.
Это какие-то листопроблемы. С массивом всё работает.
с массивом в foreach тоже не работает. все дело в том, массив хранит значения структур, а когда они упаковываются в объект, то в стеке создается новый объект, при распаковке которого возвращается копия объекта, а не сам объект.
в принципе, если так разобраться, то это тупо обертка для массива.
Ну это и ежу понятно, ты же пишешь foreach (A a in myarray). Цикл копирует значения объектов в a и ты меняешь переменную цикла.
Т.е. структуры всё-же мутабельные, надо просто постараться, чтобы не сделать лишних копий.
так в том-то и прикол, что когда это структуры, то он тебе возвращает копию, а когда классы, то ссылку на объект в куче.
You don't say?
>> Примитивы передаются по значению, объекты — по ссылке. В общем, это примерно как структуры в C#
лолшто
fixed