Re[32]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Дарней Россия  
Дата: 06.10.05 03:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Я же сказал, что еще можно добавить 20 страниц Language support library.


даже есди добавить 20, то все равно не хватит

>> C>Экспорт шаблонов — это не сверхсуперсложная фича, просто для ее

>> C>реализации приходилось менять само ядро компилятора.
>> ну да, ввести четвертую стадию обработки кода — прелинкер.
>> всего навсего

C>Так и делают.


я знаю, что делают. А еще слышал, что реализация этой фичи потребовала огромных трудозатрат. А ты говоришь — не сложная
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[29]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: ironwit Украина  
Дата: 06.10.05 05:14
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, ironwit, Вы писали:


Д>>>Да я вот и сравнил. C# 2.0 — 115 страницы, C++ — 776 страниц. Спека по C++ к тому же далеко не самая свежая. И где ты тут усмотрел, что у C# она "не меньше"?

I>>а кто подскажет откуда можно с++ спецификацию посл. скачать? так сказать почитать на сон грядущий

L>Не проснуться не боишься?

неа у меня организм странный, когда бы не лег всегда меня поднимает в 06:25 или 06:30
... << RSDN@Home 1.2.0 alpha rev. 618>>
Я не умею быть злым, и не хочу быть добрым.
Re[17]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.10.05 05:39
Оценка: 5 (1)
Здравствуйте, AVC, Вы писали:

E>>Алексей, статическая/динамическая и строгая/слабая типизация -- это ортогональные понятия, как это хорошо объяснил _vovin вот здесь: Re[25]: Типизация
Автор: _vovin
Дата: 04.03.05
и здесь: Re[27]: Типизация
Автор: _vovin
Дата: 04.03.05
.


AVC>Евгений,


AVC>это очень интересная тема.

AVC>Насколько я вижу, ты всерьез увлекся возможностями динамических языков программирования.

Да, Алексей, тема очень интересная. Но я бы сказал, что это динамические языки (в частности Ruby) увлекли меня своими возможностями. Настолько, что вскоре наши с VladD2 споры будут идти не о C# vs C++, а о Ruby vs C#

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

AVC>Мое возражение тебе (возможно, недостаточно хорошо продуманное) состоит в следующем: использование динамической типизации не требует отказа от статической типизации.


Чесно говоря, я вообще слабо себе представляю, как динамическая типизация может уживаться со статической. Разве что, как в C++ шаблонах. Но там мы не можем выйти за рамки того, что определили во время компиляции.

AVC>Такие языки, как Смолток, создаются во время горячего увлечения новой идеей.

AVC>Все старое и хорошо проверенное выкидывается как "старый хлам".
AVC>Как эксперимент (видимо, именно это Вирт называет academic exсersize) это очень интересно.

Возможно, в случае со Смолтолком так и было. Но тогда вообще была эра "Дикого Запада" -- языки с революционными идеями появлялись и имели возможность урвать для себя часть программистов. Нужно заметить, что Smalltalk-у и Lisp-у это вполне удалось. Поэтому они как-то здравствуют и поныне. Хотя их синтаксис, конечно, очень уж непревычен для меня. Возможно, синтаксис таких языков, как C, Pascal и производных от них так удобен именно потому, что их авторам не навился синтаксис Smalltalk/Lisp.

Однако, мир не стоит на месте. Тот же Ruby вобрал в себя очень много из того, что было в Smalltalk (фактически, все пункты, которые перечислил _vovin). Но при этом он имеет очень похожий на C/Perl/Python синтаксис и допускает программирование в стиле C/Perl, что очень облегчает вхождение в Ruby. Тем не менее, Ruby создавался не как реализация очередной академической идеи, а как прагматический язык для прагматических задач. Именно благодоря этому Ruby уже больше десяти лет, а его популярность в последние годы увеличивается. Так что, имхо, обкатаные в Smalltalk идеи были с успехом востребованны в более удобном (для меня), современном языке.

Дальше я попробую сравнивать твои и _vovin доводы с Ruby (т.к. Smalltalk я не знаю, да к тому же, "всяк кулик свое болото хвалит").
А вообще-то странно, ты сравниваешь Smalltalk и Oberon, а я C++ и Ruby Но мы именно здесь не столько об Oberon vs Smalltalk, сколько о статическая типизация vs динамическая типизация.

AVC>Но давай посмотрим, а правда ли это дает такие преимущества?


AVC>

AVC>В чем я вижу преимущества динамической типизации на примере
AVC>Lisp/Smalltalk (многие перечисленные преимущества являются следствием
AVC>предыдущих):

AVC> * Маленькое количество правил языка, простой, но очень гибкий и
AVC> выразительный синтаксис

AVC>Ну что же, Оберон вполне подходит. Только он не в пример читабельнее Смолтока.

Давай я объеденю этот пункт с еще одним:

AVC>

AVC> * Более высокий уровень абстракции, благодаря чему можно на самом
AVC> языке можно создавать domain-specific languages

AVC>Интересно, в чем заключается "высота" абстракции в данном случае?
AVC>Я, например, использую в приложениях "специфические" АТД. Это ведь тоже абстракция?

Думаю, что в Ruby все же не такой простой синтаксис, как в Smalltalk или Pascal. Хотя бы потому, что это line-oriented язык. Т.е. в нем
def hello
    puts "hello"
end

не может быть просто переписано в одну строку:
# Это не правильно!
def hello puts "hello" end

Нужно самому имитировать переводы строк:
def hello; puts "hello"; end


Так же можно припомнить, что скобки при вызове функций или объявлении Hash-ей можно опускать. Например, следующие записи эквивалентны:
def f(a); a.inspect; end

f :a => 3, :b => 4, :c => 5
f( :a => 3, :b => 4, :c => 5 )
f( { :a => 3, :b => 4, :c => 5 } )


В результате можно строить фактический собственные синтаксические конструкции средствами самого языка. Например, цикл loop в Ruby -- это на самом деле метод. А такая возможность определения собственных конструкций очень востребована при создании DSL-ей. Вот пара примеров.

c.field :name => :source_addr_ton,
                :type => "oess_1::uchar_t",
                :bit_mask => 0x1,
                :default => 0

(взято из Re: Использование метаданных в программах на языке C++
Автор: eao197
Дата: 08.09.05
).
Этот код является описанием поля source_addr_ton с типом oess_1::uchar_t и начальным значением 0, для которого нужно сгенерировать порцию C++ кода. При этом я могу писать значения :name, :type, :bit_mask в произвольном порядке.

while line = gets.chop
    if "quit" == line
        break
    elsif line =~ REQUIRE_REGEX
        exception_guard do
            require REQUIRE_REGEX.match( line )[ 1 ]
        end
    elsif line =~ CALL_METHOD_REGEX
        exception_guard do
            m = t.method( CALL_METHOD_REGEX.match( line )[ 1 ] )
            m.call
        end
    elsif line =~ EVAL_REGEX
        exception_guard do
            eval EVAL_REGEX.match( line )[ 1 ]
        end
    end

    print "=>"
end

(взято из Re[14]: Следующий язык программирования
Автор: eao197
Дата: 04.10.05
).
Что такое exception_guard? Похоже на специальную синтаксическую конструкцию, вроде try/catch. На самом деле -- это штатный вызов обычной функции:
def exception_guard
    begin
        yield
    rescue StandardError => x
        puts x
    end
end


Более подробно о возможностях Ruby для метапрограммирования и построения DSL см. Re: Следующий язык программирования
Автор: eao197
Дата: 26.09.05
. В частности меня поразило, как в Ruby on Rails используют метапрограммирование для поддержки ORM:
class Project < ActiveRecord::Base
    belongs_to              :portfolio
    has_one                 :project_manager
    has_many                :milestones
    has_and_belongs_to_many :categories
end

Сомневаюсь, что на Oberon можно достигать подобного уровня абстракции.

AVC>

AVC> * Нет необходимости писать много лишнего кода для многократного
AVC> указания типов

AVC>Здесь, конечно, Оберон "уступает" Смолтоку: он требует указания типа.
AVC>Но посмотрим с другой стороны: (1) указание типа повышает читабельность программы; (2) велика роль опечаток; (3) типы — не хлам, а строительные конструкции.

Здесь так же, имхо, нужно объеденить два пункта.

AVC>

AVC> * Отсутствие статического контроля типов волей-не-волей *вынуждает*
AVC> задумываться о хорошем покрытии тестами. Как показывает практика, такое
AVC> покрытие столь же необходимо и для статических языков вроде Java. Но там
AVC> о нем задумываются позже, потому что создается ложная уверенность, что
AVC> компилятор позволяет избежать большинства ошибок

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

Во-первых, _vovin даже не делал намека на то, что типы -- это хлам. Важность типов в динамических языках ничуть не меньше, чем в статически-типизированных языках. Просто указание типов нужно делать гораздо меньше. Что не может не радовать. Вот есть у меня код на С++:
void f()
{
    std::auto_ptr< Some_Class > my_object( new Some_Class() );
}

или же:
std::auto_ptr< Some_Class >
create_object()
    {
        return std::auto_ptr< Some_Class >( new Some_Implementation_Class() );
    }

Аналогичные конструкции можно привести и в C#, и в Java, и в Oberon (поправь меня, если по поводу Oberon я не прав).
А как бы это выглядело на динамически типизированном языке?
def f
    my_object = Some_Class.new
end

def create_object
    return Some_Implementation_Class.new
end

Поначалу мне так же казалось, что запись на статически типизированном языке понятнее
Теперь я так не думаю.

Но самое удивительное открытие для меня было в том, что хоть переменные могут в динамике менять свой тип (скажем my_object может затем стать и Array, и Hash, и String), но проблем это не вызывает. Потому что, как оказалось, работа с такими "нетипизированными" переменными происходит в локальных контекстах (малых по объему методах), поэтому легко запомнить или увидеть тип каждой из них. А малый объем методов как раз достигается выразительной мощью языка и высоким уровнем абстракции.

Ну а на случаи ошибок действительно есть тесты. Тестов должно быть гораздо больше, чем для программы на статически типизированном языке. Это как раз главная причина, из-за которой я все еще мало программирую на Ruby. Но, если смотреть на это с другой стороны, тестирование не бывает избыточным. Если благодоря динамической типизации мы имеем возможность писать код быстрее, то у нас появляется возможность написать больше тестов. А увеличение количества тестов только увеличивает качество программы. Вот такой парадокс -- в Ruby запуская программу на выполнения я даже не уверен, что в ней нет синтаксических ошибок. Из-за этого я вынужден так гонять ее и в хвост, и в гриву на тестах, что начинаю быть уверенным в ее работоспособности даже больше, чем в случае с C++.

И еще одна штука о тестировании. Я еще не проверял ее на практике, но кажется, что так и есть. В C++ мне часто приходиться отлаживать объекты, которые очень сложно представить отдельно от остальных частей системы. Эти объекты встраиваются в сложный фреймворк, попают в нужное мне состояние по сложной траектории (через некоторую цепочку действий) и затем должна выпасть определенная комбинация условий, чтобы проверить работоспособность объекта. Для чего приходится создавать не менее сложные имитационные стенды. А все из-за того, что объект очень жестко связан со своим окружением. В динамически типизированных языках, где возможно использование Duck Typing
Автор: eao197
Дата: 15.09.05
, как мне кажется, гораздо легче поместить тестируемый объект в искуственное окружение (sandbox) и в этом окружении дергать его как хочешь.

AVC>

AVC> * Широкии возможности интроспекции/рефлекшна

AVC>Есть в Обероне.

Интересно, а можно пример? Вот в Ruby можно так:

irb(main):014:0> a = {}
=> {}
irb(main):015:0> a.class.name
=> "Hash"
irb(main):016:0> a.instance_variables
=> []
irb(main):017:0> a.class.instance_methods
=> ["reject", "[]=", "send", "object_id", "value?", "size", "singleton_methods", "to_hash", "__send__",
"member?", "equal?", "taint", "find", "frozen?", "instance_variable_get", "each_with_index",
"each_pair", "kind_of?", "delete_if", "merge!", "instance_eval", "require", "to_a", "replace",
"collect", "merge", "all?", "entries", "type", "store", "protected_methods", "extend", "detect", "eql?",
"values", "zip", "instance_variable_set", "hash", "is_a?", "empty?", "default", "map", "to_s", "any?",
"class", "sort", "tainted?", "private_methods", "default=", "default_proc", "key?", "min", "f",
"require_gem_with_options", "untaint", "find_all", "keys", "reject!", "invert", "each", "id",
"has_key?", "inject", "inspect", "delete", "==", "indexes", "===", "sort_by", "clone", "public_methods",
"fetch", "each_value", "max", "values_at", "respond_to?", "display", "index", "select", "freeze",
"shift", "update", "clear", "length", "has_value?", "__id__", "rehash", "partition", "=~", "methods",
"require_gem", "method", "indices", "nil?", "grep", "dup", "each_key", "instance_variables", "include?",
"[]", "instance_of?"]


Затем я могу по имени метода получить объект типа Method и вызвать его (пример показан выше, внутри одного из блоков exception_guard).

Про closures, continuations и green threads ничего не скажу, т.к. сам не владею терминологией Smalltalk-а.

AVC>

AVC> * Хорошие инструменты для работы с кодом, браузеры, интерактивные
AVC> отладчики, возможность писать любой код во время отладки программы,
AVC> запускать отдельные участки кода практически из любого места среды
AVC> * Наличие среды разработки, написанной на самом языке с доступом ко
AVC> всем исходным текстам. Это позволяет на ходу подстраивать среду под себя
AVC> и на ее примере изучать строение серьезных программ.

AVC>Все это есть (и было с самого начала) в Обероне.
AVC>Сохранилось и в Компонентном Паскале.
AVC>При наличии статической типизации.

А вот есть ли в Oberon возможность менять типы прямо по ходу выполнения программы? Посмотри на пример, который я приводил в Re[14]: Следующий язык программирования
Автор: eao197
Дата: 04.10.05
. Это ведь простейший случай, когда программа модифицируется прямо по ходу работы. Возможно ли такое в Oberon? В C++ точно не возможно.

AVC>Главное — все хорошо: и статическая типизация, и динамическая типизация, и использование утверждений (программирование по контракту).

AVC>Все это есть в Обероне.

А можно примеры того, что ты считаешь проявлениями динамической типизации в Oberon?

AVC>А вот в Смолтоке меня насильно лишают статической типизации, которая является для меня важным рабочим инструментом.


Вообще-то да, переход от статической типизации к динамической не прост. Первое время преследует чувство полной незащищенности, кажется, что капканы разбросанны на каждом шагу. Но оказывается, что это не так.

Disclamer: Алексей, не нужно думать, что я стал адептом динамически типизированных языков. Основную работу я все равно выполняю на C++. Но сейчас мне кажется, что лучше всего сочетать в работе оба подхода. Хотя бы на уровне использования в проекте двух языков. А то и написание основного каркаса на динамически типизированном языке, а наиболее ответственные/ресурсоемкие части -- на компилируемом статически типизированном.

Ну и напоследок анекдот, который, имхо, очень в тему:

Разговаривают католический священник и иудейский раввин.
Священник спрашивает:
-- Вот вам нельзя свинину есть, так неужели вы никогда ее не пробовали?
-- Ну был в молодости такой грех, пробовал. А вот вы давали обед безбрачия, неужели вы никогда не были с женщиной?
-- Ну был в молодости такой грех, пробовал.
-- Так вы мне и скажите, что лучше?


... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 06.10.05 07:25
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Если хотите, множественное наследование интерфейсов было в винде в COM тыщу лет уж как.


Во-первых далеко не тысячу лет (вспомним сколько лет винде — всего 10). Во-вторых, в COM интерфейсы множественно не наследуются. Один объект может реализовывать много интерфейсов, но каждый из этих интерфейсов может иметь не более одного непосредственного (интерфейсного) предка.

То есть конструкция:
interface A: B, C
{
}

в которой интерфейс A наследуется от интерфейсов B и C в COM недопустима.
Re[33]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: alexeiz  
Дата: 06.10.05 07:34
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>я знаю, что делают. А еще слышал, что реализация этой фичи потребовала огромных трудозатрат. А ты говоришь — не сложная


И что? То что у кого-то это потребовало столько времени не значит, что у всех оно будет требовать столько же. Просто не было опыта в реализации этой фичи, да и требует она немного другого подхода к компиляции, нежели тот на который заточены существующие компиляторы C++. Кстати, сами разработчики EDG изменили своё мнение насчет экспорта после того, как он был реализован. А предложение Саттера сделать экспорт deprecated не было поддержано коммитетом.
Re[11]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.10.05 07:42
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

J>>Если хотите, множественное наследование интерфейсов было в винде в COM тыщу лет уж как.


СГ>Во-первых далеко не тысячу лет (вспомним сколько лет винде — всего 10).


Всего 10 -- это если с Win95 считать?
А предыдущие почти 10 лет как же?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Справка
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 06.10.05 07:43
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Тогда С — это объектно-ориентированый язык. В нем можно организовать

C>полиморфизм с помощью vtable'ов (что и делается в COM, кстати).

Возможность реализовывать один лишь только динамический полиморфизм не достаточно для того чтобы называть язык ОО-языком.

Разница между Си и Обероном с точки зрения ООП состоит в том, что:

1) Наследование: В Си тип struct расширять нельзя, а в Обероне тип RECORD расширять можно.
2) RTTI: Коль скоро в Обероне есть механизм расширения типов, то есть и (эффективный) механизм динамического определения типа
IF obj IS SomType THEN obj(SomType).field := 2.718 END


Еще следует добавить, что Оберон строго типизированный язык. Попытки заведомо не правильного приведения типов пресекаются еще на стадии компиляции. А в языке Си компилятор так сильно за типами не следит.
Re[34]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Дарней Россия  
Дата: 06.10.05 07:53
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>И что? То что у кого-то это потребовало столько времени не значит, что у всех оно будет требовать столько же.


Ну да. Остальные вообще решили, что овчинка выделки не стоит
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[18]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: AVC Россия  
Дата: 06.10.05 07:53
Оценка: 1 (1)
Здравствуйте, eao197, Вы писали:

Евгений,

с интересом читал твой пост.
Конечно, мне нужно его обдумать. Когда человек с большим опытом увлекается какой-то идеей, это "ж-ж-ж" неспроста ((c) Винни-Пух ). Значит, здесь есть что-то действительно ценное.
Все же попытаюсь сразу ответить на некоторые реплики, зная, что мое "раздумье" иногда затягивается на много дней.

AVC>>Мое возражение тебе (возможно, недостаточно хорошо продуманное) состоит в следующем: использование динамической типизации не требует отказа от статической типизации.


E>Чесно говоря, я вообще слабо себе представляю, как динамическая типизация может уживаться со статической. Разве что, как в C++ шаблонах. Но там мы не можем выйти за рамки того, что определили во время компиляции.


ИМХО, если бы динамическая типизация не могла ужиться со статической, то мы не имели бы статически-типизированных ОО-языков.
Собственно, в литературе полно подобных утверждений: "Переменная x имеет статический тип T и динамический тип T1."

ИМХО, главные удобства динамически-типизированных языков основаны не на отказе от статической типизации, а на поддержке run-time system (RTS). Не зря же большинство из них (по крайней мере, в начале своего пути) — интерпретируемые языки.
Интерпретатор и выполняет роль RTS.
Пока статически-типизированные компилируемые языки были "голыми", без run-time поддержки, как Си и Паскаль, динамически-типизированные языки имели огромное преимущество в гибкости.
Но как только статически-типизированные языки стали опираться на помощь продуманной небольшой RTS (как Оберон, например), это преимущество стало значительно меньше, в то время как помощь статической системы типов в профилактике ошибок переоценить трудно.

E>И еще одна штука о тестировании. Я еще не проверял ее на практике, но кажется, что так и есть. В C++ мне часто приходиться отлаживать объекты, которые очень сложно представить отдельно от остальных частей системы. Эти объекты встраиваются в сложный фреймворк, попают в нужное мне состояние по сложной траектории (через некоторую цепочку действий) и затем должна выпасть определенная комбинация условий, чтобы проверить работоспособность объекта. Для чего приходится создавать не менее сложные имитационные стенды. А все из-за того, что объект очень жестко связан со своим окружением. В динамически типизированных языках, где возможно использование Duck Typing
Автор: eao197
Дата: 15.09.05
, как мне кажется, гораздо легче поместить тестируемый объект в искуственное окружение (sandbox) и в этом окружении дергать его как хочешь.


Вот я приводил подобные примеры, когда говорил об удобстве написания и отладки программы в обероновской среде.
А меня только ругали.
А основана эта фича в основном на динамической загрузке модулей "по запросу". (Но модуль — не тип.)

AVC>>А вот в Смолтоке меня насильно лишают статической типизации, которая является для меня важным рабочим инструментом.


E>Вообще-то да, переход от статической типизации к динамической не прост. Первое время преследует чувство полной незащищенности, кажется, что капканы разбросанны на каждом шагу. Но оказывается, что это не так.


Вот этот бы аргумент Павлу Кузнецову!
Он утверждал, что использование обобщенного контейнера без шаблонов обязательно приведет к долгой и мучительной отладке.
А я этого что-то не замечаю...

E>Disclamer: Алексей, не нужно думать, что я стал адептом динамически типизированных языков. Основную работу я все равно выполняю на C++. Но сейчас мне кажется, что лучше всего сочетать в работе оба подхода. Хотя бы на уровне использования в проекте двух языков. А то и написание основного каркаса на динамически типизированном языке, а наиболее ответственные/ресурсоемкие части -- на компилируемом статически типизированном.


Да, иногда использовать два (и более?) языка удобно.
Не всегда это статический и динамический языки.
Вот простой пример: когда пишется компилятор Си, то часто совместно используются Си и yacc (BNF), потому что это удобно.

E>Ну и напоследок анекдот, который, имхо, очень в тему:

E>

E>Разговаривают католический священник и иудейский раввин.
E>Священник спрашивает:
E>-- Вот вам нельзя свинину есть, так неужели вы никогда ее не пробовали?
E>-- Ну был в молодости такой грех, пробовал. А вот вы давали обед безбрачия, неужели вы никогда не были с женщиной?
E>-- Ну был в молодости такой грех, пробовал.
E>-- Так вы мне и скажите, что лучше?

E>)



Я до сих пор вспоминаю анекдот про воробья и орла ("куда мы летим?").

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[19]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 06.10.05 08:01
Оценка:
Здравствуйте, AVC, Вы писали:

E>>Вообще-то да, переход от статической типизации к динамической не прост. Первое время преследует чувство полной незащищенности, кажется, что капканы разбросанны на каждом шагу. Но оказывается, что это не так.


AVC>Вот этот бы аргумент Павлу Кузнецову!

AVC>Он утверждал, что использование обобщенного контейнера без шаблонов обязательно приведет к долгой и мучительной отладке.
AVC>А я этого что-то не замечаю...

А ты не поделишься ссылкой, где вы это обсуждали?

E>>Disclamer: Алексей, не нужно думать, что я стал адептом динамически типизированных языков. Основную работу я все равно выполняю на C++. Но сейчас мне кажется, что лучше всего сочетать в работе оба подхода. Хотя бы на уровне использования в проекте двух языков. А то и написание основного каркаса на динамически типизированном языке, а наиболее ответственные/ресурсоемкие части -- на компилируемом статически типизированном.


AVC>Да, иногда использовать два (и более?) языка удобно.

AVC>Не всегда это статический и динамический языки.
AVC>Вот простой пример: когда пишется компилятор Си, то часто совместно используются Си и yacc (BNF), потому что это удобно.

Да, но в некоторых языках, т.к. Lisp и Ruby удается делать удобный DSL прямо на этом языке. Вот в чем прелесть-то.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Mathematica
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 06.10.05 08:03
Оценка: 1 (1)
Здравствуйте, eao197, Вы писали:

E>Disclamer: Алексей, не нужно думать, что я стал адептом динамически типизированных языков. Основную работу я все равно выполняю на C++. Но сейчас мне кажется, что лучше всего сочетать в работе оба подхода. Хотя бы на уровне использования в проекте двух языков. А то и написание основного каркаса на динамически типизированном языке, а наиболее ответственные/ресурсоемкие части -- на компилируемом статически типизированном.


Кстати, а на Mathematica кто-нибудь пробовал профессионально программировать? Она ведь включает в себя некий вариант Lisp, некий вариант Си и всё в одной куче. Говорят в Японии уж больно любят на Mathematica программировать, чуть ли не первый язык у них. Просто когда заходит речь о Mathematica обычно вспоминают Maple или Mathlab и говорят, что они лучше чем Mathematica совершенно забывая о том, что Mathematica — это не столько пакет для аналитических вычисления сколько новый язык программирования, в то время как Maple или Mathlab полноценных языков программирования не предоставляют.
Re[35]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: alexeiz  
Дата: 06.10.05 08:08
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, alexeiz, Вы писали:


A>>И что? То что у кого-то это потребовало столько времени не значит, что у всех оно будет требовать столько же.


Д>Ну да. Остальные вообще решили, что овчинка выделки не стоит


Остальные просто повелись на пропаганду.
Re[36]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Дарней Россия  
Дата: 06.10.05 08:10
Оценка:
Здравствуйте, alexeiz, Вы писали:

Д>>Ну да. Остальные вообще решили, что овчинка выделки не стоит


A>Остальные просто повелись на пропаганду.


какую пропаганду? где ты ее видел?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[37]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: alexeiz  
Дата: 06.10.05 08:14
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, alexeiz, Вы писали:


Д>>>Ну да. Остальные вообще решили, что овчинка выделки не стоит


A>>Остальные просто повелись на пропаганду.


Д>какую пропаганду? где ты ее видел?


Которую некоторые деятели вроде Саттера разводили в своих книжках. А потом оказалось, что аргумент про неколько человеко-лет был основан буквально на разговоре в пивной на багамах между Саттером и Вандевурде.
Re[38]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Дарней Россия  
Дата: 06.10.05 08:29
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Которую некоторые деятели вроде Саттера разводили в своих книжках. А потом оказалось, что аргумент про неколько человеко-лет был основан буквально на разговоре в пивной на багамах между Саттером и Вандевурде.


Насчет пропаганды Саттера вообще в первый раз слышу Наверно, проивзодители компиляторов тоже на нее купились, или все-таки они сами оценивали трудоемкость?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[20]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: AVC Россия  
Дата: 06.10.05 08:38
Оценка:
Здравствуйте, eao197, Вы писали:

AVC>>Вот этот бы аргумент Павлу Кузнецову!

AVC>>Он утверждал, что использование обобщенного контейнера без шаблонов обязательно приведет к долгой и мучительной отладке.
AVC>>А я этого что-то не замечаю...

E>А ты не поделишься ссылкой, где вы это обсуждали?


Давно уже было.
Кажется, это было где-то в инициированной мной ветке:
http://www.rsdn.ru/Forum/Message.aspx?mid=880496&amp;only=1
Автор: AVC1
Дата: 02.11.04


Указанное утверждение Павла Кузнецова было сделано им здесь:
http://www.rsdn.ru/Forum/Message.aspx?mid=892858&amp;only=1
Автор: Павел Кузнецов
Дата: 10.11.04

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[10]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: AVC Россия  
Дата: 06.10.05 09:04
Оценка: 3 (1) :)
Здравствуйте, Зверёк Харьковский, Вы писали:

E>> Я думаю, что полную историю этого дела будет знать Зверек Харьковский.


ЗХ>А то как же


ЗХ>

ЗХ>Эпиграф: Гослинг и его команда использовали C++ как руководство — чего нужно избегать.


(Выделение мое: AVC)

<...>

ЗХ>

ЗХ>Для разработчика, язык выглядел совершенно как C++. Но в душе Java взяла очень много от Smalltalk, Lisp и Pascal. Моя заслуга в том, что я смог их совместить. (Джеймс Гослинг)


Очень трогательно и оригинально. Сравним с Виртом:

Просто невозможно поблагодарить всех тех, кто так или иначе подпитывал своими идеями то, что
теперь называется Oberon. Большинство идей пришло от использования и изучения
существующих языков, таких как Modula-2, Ada, Smalltalk и Cedar, которые часто предостерегали
нас от того, как не надо делать.

(Выделение тоже мое.)

Что касется "заслуги" Гослинга в "совмещении языков", то это как решение задачки из школьного задачника.
В конце задачника есть ответ.
Оберон с 1988 года широко доступен: преподается, сразу после завершения работы над Обероном Вирт и Гуткнехт издали книгу о проекте (с объяснением всех решений и даже исходными текстами).
Гослинг не мог об этом не знать.
Тщательное изучение компилятора Оберона в Sun ни для кого не секрет.
И — ни слова!
Зато — "моя заслуга".
Ну-ну.

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[11]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: jazzer Россия Skype: enerjazzer
Дата: 06.10.05 09:50
Оценка: 22 (1) +1
Здравствуйте, AVC, Вы писали:

AVC>И почему же, по Вашему, разработчики Явы не ввели это замечательное свойство в свой язык?

AVC>Или они просто неисправимые халтурщики, и решили "сдать" язык с "недоделками". Мол, и так сойдет?

Именно так. Т.е. не халтурщики, а люди, которых сильно напрягли со сроками.
Java появилась на моих глазах и я читал о ней самые что ни на есть первоисточники (т.е. создателей языка).
Так вот то, что они рассказали про историю языка, и тот уровень аргументации, которую они приводили в пользу отсутствия тех или иных фич, которые есть в С++ (про перегрузку операторов там вообще просто песня была), оставила у меня именно такое впечатление: сроки поджимали, выпуск продукта больше задерживать было нельзя.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[11]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Зверёк Харьковский  
Дата: 06.10.05 10:31
Оценка: +2
Здравствуйте, AVC, Вы писали:

ЗХ>>

ЗХ>>Для разработчика, язык выглядел совершенно как C++. Но в душе Java взяла очень много от Smalltalk, Lisp и Pascal. Моя заслуга в том, что я смог их совместить. (Джеймс Гослинг)


[...]

AVC>Что касется "заслуги" Гослинга в "совмещении языков", то это как решение задачки из школьного задачника.


[...]

AVC>Тщательное изучение компилятора Оберона в Sun ни для кого не секрет.

AVC>И — ни слова!
AVC>Зато — "моя заслуга".
AVC>Ну-ну.

Виноват, это проблема моего перевода на ходу. В оригинале он выражается не так хвастливо: "What I do, was..." — то есть верный перевод — "Все что я сделал — просто объединил эти языки".

Приношу свои извинения.

Но про Оберон они действительно ни слова не говорят (что меня лично удивило, но обратите внимание на мою сноску об "относительной достоверности источников").

ЗЫ: а вообще — я бы не был так категоричен в отыскании корней. Идеи "носятся в воздухе" — обсуждаются, пересказываются, творчески перерабатываются, десятки раз изменяются и т.п. Попытка свести все к "такой-то увидел то-то и упер", как правило, слишком все упрощает.

Характерный пример: классическая версия происхождения GUI первого Мака — "Джобс съездил в Xerox PARC и все у них упер". В действительности (точнее, в том, о чем можно судить по документам), генезис первых гуев был существенно сложнее.
FAQ — це мiй ай-кью!
Re[11]: Мои впечатления о лекции Н. Вирта в ННГУ 26.09.2005
От: Cyberax Марс  
Дата: 06.10.05 10:50
Оценка:
Сергей Губанов wrote:

> J>Если хотите, множественное наследование интерфейсов было в винде в

> COM тыщу лет уж как.
> Во-первых далеко не тысячу лет (вспомним сколько лет винде — всего 10).

Для справки: Windows 1.0 появилась в 84 году. Еще одна справка: COM уже
был в Windows 3.11 в 92 году.

> Во-вторых, в COM интерфейсы множественно не наследуются.


Наследуются, просто наследование виртуальное (для cast'а к предку нужно
использовать QueryInterface).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.