Эквивалентность коллекций и классов потоков между Smalltalk, Perl, Python и Ruby - PullRequest
7 голосов
/ 25 августа 2011

У меня мало опыта работы с такими языками, как Python, Perl и Ruby, но я уже давно работал в Smalltalk.Есть несколько довольно простых классов Smalltalk, которые очень популярны и являются кросс-Smalltalk-реализацией:

FileStream
ReadWriteStream
Set
Dictionary
OrderedCollection
SortedCollection
Bag
Interval
Array

Какие классы будут эквивалентными или допустимыми семантическими заменами в Python, Perl и Ruby?Я нашел несколько страниц сравнения языков, сравнивающих синтаксис, но, похоже, мало что помогает в переводе базовых и базовых библиотек.

Мне также интересно, есть ли базовый или базовый класс в Python, Perlили Ruby, которого нет в Smalltalk или наоборот?

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

Perl

Я отвечу за Perl, так как я свободно владею как Perl, так и Smalltalk.

Словарь Smalltalk довольно близок к хеш-типу Perl.Словарь использует эквивалентность объектов для ключей.Perl использует простые строки для ключей, поэтому гибкость несколько ограничена.

OrteredCollection Smalltalk довольно близка к типу массива Perl.

FileStream Smalltalk чем-то напоминает дескрипторы файлов Perl в том смысле, что они представляютпоток данных во внешний файл или устройство.

И это все, поскольку в Perl есть только хэши, массивы и файловые дескрипторы.:)

4 голосов
/ 25 августа 2011

рубин

FileStream         -> File
ReadWriteStream    -> IO (or other things that duck type like it)
Set                -> require 'set', then use the Set class
Dictionary         -> Hash
OrderedCollection  -> Array
SortedCollection      nothing similar
Bag                   nothing similar
Interval           -> Range
Array                 Ruby has no fixed-length collection class.
2 голосов
/ 25 августа 2011

Python

FileStream -> file
ReadWriteStream -> file
Set -> set
Dictionary -> dict
OrderedCollection -> list
SortedCollection -> no equivalent object (must call sort on a list)
Bag -> no equivalent object (must implement using dict)
Interval -> no equivalent object (but a range() function exists for making lists)
Array -> no equivalent (tuple is read-only, fixed length.  list is variable length)

Следует отметить, что для Python 2.7 существует объект collection.Counter, эквивалентный Bag.

...