LINUX.ORG.RU

Вы бы еще про Lisp спросили, где у него списки :)

Думаю, то, что в Ruby называется массивом, например [1,2,3], реализовано как список. Или как в Питоне, что-то среднее между списком и массивом.

Kpoxman ★★
()
Ответ на: комментарий от Kpoxman

Гы. Как я понимаю то что назвается массивом (Array) должно быть массивом, т.е. обладать соответствующими временными и функциональными характеристиками. Аналогично со списками. Думаю создатели Ruby в курсе :)

Burbaka ★★
() автор топика
Ответ на: комментарий от Burbaka

Посмотрел реализацию Array в Ruby и list в python. Особо не въезжал, но как и ожидал - Array в Ruby это массив. Шокировало другое - list в python тоже реализован как массив :) Ужос, и нафига так измываться над сложившейся терминологией ?

Burbaka ★★
() автор топика
Ответ на: комментарий от Kpoxman

Я в питоне не секу вообще. Писал несколько хеловордов, да доку поперек просматривал, но если ты про "5.6 array -- Efficient arrays of numeric values " из Python Library Reference, то его необходимость вполне понятна. array хранит непосредственно значения, а list - указатели на PyObject-ы. Именно поэтому все элементы array должны быть одного типа, а list могут быть разного. Видимо у них и семантика оператора присваивания для элементов немного разная. Да и вообще list более медленный и более прожорливый по памяти.

Burbaka ★★
() автор топика
Ответ на: комментарий от Burbaka

Чем не список?

irb(main):001:0> require 'date'
=> true
irb(main):002:0> [1, 'foo', 'bar', Date.today].each {|value| puts value} 1
foo
bar
2007-08-23
=> [1, "foo", "bar", #<Date: 4908671/2,0,2299161>]

PartyZan ★★★
()
Ответ на: комментарий от PartyZan

> Чем не список?

Ну хотяб тем что операция добавления, вставки и удаления тут будут гораздо более ресурсоемкими, чем в обычном списке. Я понимаю, что при использовании Ruby за производительностью никто особо не гонится, но как-то неприято использовать массив, там где естественнее будет логичнее использовать список.

Burbaka ★★
() автор топика
Ответ на: комментарий от stassats

Массив указателей, как я понял. Вот такой http://www.brpreiss.com/books/opus7/html/page82.html

Ну и собственно реализация 

typedef struct {
    PyObject_VAR_HEAD
    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
    PyObject **ob_item;

    /* ob_item contains space for 'allocated' elements.  The number
     * currently in use is ob_size.
     * Invariants:
     *     0 <= ob_size <= allocated
     *     len(list) == ob_size
     *     ob_item == NULL implies ob_size == allocated == 0
     * list.sort() temporarily sets allocated to -1 to detect mutations.
     *
     * Items must normally not be NULL, except during construction when
     * the list is not yet visible outside the function that builds it.
     */
    Py_ssize_t allocated;
} PyListObject;


Burbaka ★★
() автор топика
Ответ на: комментарий от Begemoth

Да я уже понял. просто изначально не понял суть вопроса

PartyZan ★★★
()
Ответ на: комментарий от Begemoth

В Ruby примерно аналогичная. 

struct RArray {
    struct RBasic basic;
    long len;
    union {
	long capa;
	VALUE shared;
    } aux;
    VALUE *ptr;
};

Burbaka ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.