Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложности перевода с английского, PerlGuts Illustrated 
:(
    Опции темы
ginnie
Дата 10.10.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемые коллеги!

Надеюсь, что не  smile 

В очередной раз решил попиарить свой блог традиционным методом выкладывания перевода чужого труда. Под руку попалась статья PerlGuts Illustrated, русского варианта не нашел (наверное, плохо искал  smile)
Начал переводить и... увяз в следующем предложении (выделено жирным):

The internal relationship between the Perl data types is really object oriented. Perl relies on using C's structural equivalence to help emulate something like C++ inheritance of types. The various data types that Perl implement are illustrated in this class hierarchy diagram.

Надеюсь на вашу помощь!  smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
shurf
Дата 10.10.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Просто программист



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 19.7.2007
Где: Чернигов

Репутация: нет
Всего: нет



IMHO: Perl рассчитывает на использование эквивалентности структурам языка C, чтобы достичь
такого же наследования типов, как и в C.
PM MAIL WWW ICQ Skype Jabber   Вверх
Данкинг
Дата 10.10.2008, 23:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 1
Всего: 130



В эмулировании, например, наследования типов С++ Перл опирается на структурное равенство С.

ЗЫ: Perl'а не знаю, это просто перевод. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
sir_nuf_nuf
Дата 11.10.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



ginnie, попробуйте перевести по смыслу:

Это попытка адекватного перевода
Код

Для эмуляции наследования данных (как в С++) Perl использует вложенные структуры языка С.


А это лучше написать от себя
Код

При этом структура "подкласса" должна первым полем содержать в себе структуру данных "суперкласса".


P.S. кстати это не только в перле.. в ядре линукса тоже есть. Еще где-нть наверняка =)

Это сообщение отредактировал(а) sir_nuf_nuf - 11.10.2008, 15:15


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ginnie
Дата 13.10.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



sir_nuf_nuf, спасибо за помощь!

Чтобы перевести по смыслу, надо его понять. В предложении автор использовал structural equivalence (структурная эквивалентность типов), про которую я ничего не знал smile
Если писать много от себя, то это будет не перевод, а пересказ  smile 

Цитата

При этом структура "подкласса" должна первым полем содержать в себе структуру данных "суперкласса".


sir_nuf_nuf, что Вы подразумеваете под "первым полем"?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
sir_nuf_nuf
Дата 13.10.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



ginnie, с си знакомы ? "наследование" реализуют так:

Код

/* pure C, not C++ !! */
struct SuperData {
    int length;
    char *buff;
};

typedef SuperData *Super;

struct ChildData {
    struct SuperData parent_data;   /* структура суперкласса - первым полем */
    int child_data;
};

typedef ChildData *Child;

void
do_smthing_with_super(void *ptr) {
    Super s = (Super) ptr;
    s->length++;
}

int
main(int argc, char *argv) {
    Child child = (Child) zalloc (sizeof(ChildData));  /* cоздали объект потомок */
    do_smthing_with_super(child);  /* ага, тут вся фишка, функция написанная для суперкласса будет работать и с потомком */
    return 0;
}


под "структурной эквивалентостью" здесь понимают то, что 
s->length - будет ссылаться на нужные данные, не зависимо от того структуру супер-класса или структуру потомка передали.
Но это только при условии, что структура суперкласса - первое поле в структуре потомка.

P.S.не компилировал =)

 

Это сообщение отредактировал(а) sir_nuf_nuf - 13.10.2008, 13:02


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.