LINUX.ORG.RU
Ответ на: комментарий от VirRaa

Ты два подчёркивания добавь :). А я ночью написал декоратор @private :).

Но не уверен что буду его использовать. Лучше действительно стандартизировать API и добавить врапперов в нужных местах. А код на костылях, увы, часто падает в неожиданных местах.

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

где-то тут от тебя должен быть пример кода, который у меня, с моими табами, будет смотреться ровно так же, как у тебя с твоими.

я что-то пропустил?

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

Обязательная запятая в конце списка

Не встречал

Это он видать краем глаза прочитал про синтаксис tuple с одним элементом. Кстати, мне этот момент тоже не нравится.

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

У тебя два высказывания:

1) Табы и пробелы мешают только мудаки.

2) Надо пользоваться только пробелами.

Из этого, очевидно (учитывая факт невозможности пользования одними табами), следует:

3) Табами пользуются только мудаки.

Вывод — ты неадекват.

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

синтаксис tuple с одним элементом.

угу, тоже так подумал. А список с 1 элементом нормально.

Кстати, мне этот момент тоже не нравится.

да

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

Надо пользоваться только пробелами.

Ну всегда ведь в редакторе в настройках ставишь, чтоб на клавишу таб индент, а стандартный отступ 4 пробела...

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

Это в питоне. PEP8, все дела. Для остального я использую отступы табами. Просто есть куча знакомых программеров, у которых отступы в IDE настроены на 2 символа, у многих 3, а есть даже 1. Чтоб не трепать друг-другу нервы, табы — лучшее решение.

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

уже можно стучать лысиной по паркету и хаять С++ - там даже внятной реализации private нету!

ну так через какой-нибудь reflection в java примерно так сделать можно

class ReflectHack{
    private int Val=100;
    public int getVal(){
        return Val;
    }
}

public class Main {
    public static void main(String[] args){
        ReflectHack H=new ReflectHack();
        System.out.println(H.getVal());
        try{
            Field F=H.getClass().getDeclaredField("Val");
            F.setAccessible(true);
            F.setInt(H, 123);
        }catch (Throwable e){
            e.printStackTrace();
        }
        System.out.println(H.getVal());
    }
}

и результат

100
123

Думаю и в C# так можно и в Scala и в D и в ещё каких-нибудь ruby. Эт чего получается, нету языков с нормальным private? Как страшно жить

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

А я ночью написал декоратор @private :)

Что-то я не могу представить как потом этот же метод вызвать из своего класса.

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

snaked

Извини, что надоедаю, но я там тебе пачечку багрепортов отослал где-то месяц назад, ответь что-нибудь (:

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

Чорт, совсем забыл. Хотел по-быстрому пофиксить, поэтому сразу не отписался. Если завтра не подвезут мебель, то у меня наконец будут свободные выходные и обязательно займусь.

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

Как потом этот же метод вызвать из своего класса.

Без проблем :). Проверка идёт только в момент создания дочернего класса через метакласс. Вот так оно работает:

class PrivateFactory(type):
    def __init__(self, cls_name, bases, namespace):
        for field_name in namespace.keys():
            for base in bases:
                try:
                    base_field = getattr(base, field_name)
                    is_private = base_field.__private__
                except AttributeError:
                    continue
                if is_private:
                    raise Exception("Derived class cannot override private fields")

        super(self.__class__, self).__init__(cls_name, bases, namespace)
true_admin ★★★★★
()
Ответ на: комментарий от VirRaa

а это - «a = Test», создаёт дополнительное имя для класса, а не производит объект

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

работает, пока виртуальных методов нету )

нате Вам

#include <stdio.h>

class A{
	int x;
public:
	virtual int get_x(){ return x; }
};

int main( int argc, const char** argv ) {
	A a;
	printf("%i\n", a.get_x() ); 
	*(int*)((char*)&a+8) = 123;
	printf("%i\n", a.get_x() ); 
	return 0;
}
AIv ★★★★★
()
Ответ на: комментарий от AIv

Да, для 32х бит (все время забываю что еще остались такие мастодонты) надо добавлять 4, а лучше добавлять sizeof(char*) или что то вроде того.

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

Дарю идею реализации: разносим поля класса по псевдослучайным смещениям, получаемым хитрой функцией из имени класса. Взломаешь так же легко? )

А если не POD, то вообще простор открыт для жонглирования.

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

Это он видать краем глаза прочитал про синтаксис tuple с одним элементом. Кстати, мне этот момент тоже не нравится.

Ну это очевидно, чтобы отличать инициализацию последовательности от расстановки приоритета, т.е.

(2+3)*4

число, а

(2+3,)*4

последовательность. А как по-другому?

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

Ну это я понимаю, и по-другому, видимо, никак, раз уж выбрали круглые скобки для этого дела.

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

Ну вот ты сам и ответил. :-) На сях надо больше напрягаться.

Ох, молодец. Из цепочки комментов выдернул один, а из него - кусок фразы. :)

Как будто я против питона...

Я же здесь, в этом треде писал уже, что при необходимости автоматизировать последовательность простых операций напишу скрипт на баше. Если операции посложнее, и нужен гуй, и всё это нужно «прям щас», то напишу на питоне (заметь!). А для специфических задач возьму С (или С++). Могу и какую-нибудь scheme привлечь.

А насчёт «на сях надо больше напрягаться» - этот этап я проходил лет 20 назад. Сейчас уже как-то «полегчало»...

OldFatMan
()
Ответ на: комментарий от baverman

Чтоб не трепать друг-другу нервы, табы — лучшее решение.

стандарт кодирования для команды, вот лучшее решение.

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

долбишь по клавише пробел?)) Привязать 4 пробела на клавишу таб это дикий жуткий костыль назначение которого трудно понять. Не проще делать таб->пробелы редактором после написания кода?

Существуют всякие IDE вроде Eclipse. Но это так, между нами, по секрету.

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

Взломаешь так же легко?

Если есть ф-я, то чего там ломать? И вообще, это была иллюстрация к плачу Ярославны об отсуствии private

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

Vala. По синтаксису похож на .NET (и соответственно относительно низкий порог вхождения), но по быстродействию на C (точнее равен ему, потому что на промежуточном этапе компиляции программа на Vala преобразуется в программу на Си). Компилируемый. Тесная интеграция с Glib, GObject и GTK.

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

Все языки, как и си, кроме байткодовых без jit и интерпретируемых, компилируются в машинный код целевой архитектуры. Но по быстродействию они отнюдь не равны си.

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

вот что действительно поражает — mono отстает всего-лишь в два раза.

смею предположить, что java или .net должны показывать результаты близкие к vala в этой бенчмарке(по скорости, конечно).

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

И что ты этим хотел сказать?? Про то что повесить 4 пробела на таб я писал. Хотя да, автоотступ сильно помогает. Чем плох таб? Надо поставил его размер на два и отступы небольшие, надо поставил размер на 8 и отступы гигантские. А пробелы натыкал везде 8 штук а другому хочется меньше и он должен 4 пробела удалить нажатием 4 раза на клавишу бекспейс(удалить таб одно нажатие)

RA
()
Ответ на: комментарий от Rastafarra

Чтоб не трепать друг-другу нервы, табы — лучшее решение.

стандарт кодирования для команды, вот лучшее решение.

Разумный стандарт, учитывающий предпочтения людей. Т.е. tabs + spaces,

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

> Кстати, тот же Дийкстра и о басике высказывался нелицеприятно, насчет безнадёжно испорченных мозгов студентов, его изучающих.

Если у человека есть мозги — испортить их можно ягуаром, пивом и разными веществами в школе. Но никак не бейсиком

Rzhepish
()
Ответ на: комментарий от RedPossum

Думаю и в C# так можно и в Scala и в D и в ещё каких-нибудь ruby. Эт чего получается, нету языков с нормальным private?

Haskell же :) Если модуль чего-то не экспортирует, то вне этого модуля это что-то использовать никак не получится (исключая возможность reverse engineering с binary patching).

Ну и вообще, инкапсуляция данных должна обеспечиваться системой модулей (пространствами имён, пакетами и т.п.), а не самими данными (классами, ADT, структурами и т.п.).

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

Дийкстра и о басике высказывался нелицеприятно, насчет безнадёжно испорченных мозгов студентов, его изучающих.

Если у человека есть мозги — испортить их можно ягуаром, пивом и разными веществами в школе. Но никак не бейсиком

Да что вообще этот Дейкстра понимал в программировании!

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

Что Таненбаум, что Дейкстра со своими тараканами в голове. Но мы то знаем, как на самом деле (С)

Rzhepish
()
Ответ на: комментарий от RA

И что ты этим хотел сказать?? Про то что повесить 4 пробела на таб я писал. Хотя да, автоотступ сильно помогает. Чем плох таб? Надо поставил его размер на два и отступы небольшие, надо поставил размер на 8 и отступы гигантские. А пробелы натыкал везде 8 штук а другому хочется меньше и он должен 4 пробела удалить нажатием 4 раза на клавишу бекспейс(удалить таб одно нажатие)

для всего этого есть IDE :)

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

Медленновопрос

нужно что-то типа gevent, но с доступом к event loop

Хм, а что мешает хакнуть тот же gevent или хотя бы отправить авторам фичреквест? Или оно там принципиально нереализуемо?

pevzi ★★★★★
()
Ответ на: Медленновопрос от pevzi

Хм, а что мешает хакнуть тот же gevent или хотя бы отправить авторам фичреквест? Или оно там принципиально нереализуемо?

Да вот думаю как лучше сделать. Возможно что я сгустил краски и с использованием событий и очередей всё прекрасно делается. Признаться, я в первый раз взялся писать программу с таким гигантский кол-вом событий. Поживём - увидим.

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

Да что вообще этот Дейкстра понимал в программировании!

Ну да. Я, вот, вообще начинал программировать с системы команд Б3-37. Но мозги мне позже испортил не Бейсик, а Форт :)

KRoN73 ★★★★★
()
30 октября 2012 г.
Ответ на: комментарий от AIv
#include <stdio.h>

class A{
	int x;
public:
	virtual int get_x(){ return x; }
};

int main( int argc, const char** argv ) {
	A a;
	printf("%i\n", a.get_x() ); 
	*(int*)((char*)&a+8) = 123;
	printf("%i\n", a.get_x() ); 
	return 0;
}

Этот код демонстрирует что-угодно, но только не существование / отсутствие private

«Access specifiers do not necessarily control visibility, in that even private members may be visible to client external code. In some languages, an inaccessible but visible member may be referred to at run-time (for example, by a pointer returned from a member function), but an attempt to use it by referring to the name of the member from client code will be prevented by the type checker»

И вообще, где в этом коде хоть намек на один из важнейших механизмов ООП, а именно наследование? Приватные методы необходимо рассматривать именно в контексте этого механизма. Да и все остальные спецификаторы доступа должны рассматриваться в контексте именно наследования, а не плясок с указателями.

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