Re[16]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 09:59
Оценка:
Здравствуйте, Don Reba, Вы писали:

D>>Java и scala — статически и сильно типизированные?


DR>Если не использовать JNI, то да.


Раз они строгие, то для них должно выполняться твоё утверждение
Автор: Don Reba
Дата: 23.01.12
: "В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом". Тем не менее, оно не выполняется. Следующую конструкцию компилятор схавает:
var s = "hello"
var i = s.asInstanceOf[Int]
Re[15]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 10:04
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Строгий язык тебе в принципе не позволит что-то заюзать "не с умом".


Ну насчёт "в принципе" это ты погорячился... См. рядышком, я тут пытаюсь додавить оппонентов на тему кастов.
Re[10]: wat
От: Eugeny__ Украина  
Дата: 23.01.12 10:06
Оценка:
Здравствуйте, Mamut, Вы писали:


M>Указатели позволяют прямую манипуляцию памятью, невзирая на тип объекта.


Угу.
((void(*)(void))0)();
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[15]: wat
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.12 10:09
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Здравствуйте, Don Reba, Вы писали:


DR>>В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом, а в слабо типизированном — нет.


D>Java и scala — статически и сильно типизированные?


Лучше чем плюсы, но всё равно нет.
Re[11]: wat
От: Eugeny__ Украина  
Дата: 23.01.12 10:10
Оценка:
Здравствуйте, dimgel, Вы писали:


M>>То есть (AnotherObject*)((void*)Object) прокатит и в С и в С++ на ура безо всякого контроля со стороны компилятора или рантайма.


D>Это также ИМХО не катит: на java/scala я могу написать точно такой же левый каст, они от этого не станут слабыми. А то, что этот каст вылетит (точнее, может вылететь) в рантайме — дык это уже динамика, а не статика. А я спрашиваю про слабую статику. Техническая возможность беспредельничать разнообразными способами, форсированно обходя контроль системы типов, не означает отсутствие этого контроля. Грубо говоря, если я получу адрес объекта и тупо забью его мусором через memset(), это как бы к системе типов отношения не имеет.


Ага, тока в жабе компилер не пропустит. И даже если ручками в байткоде написать — виртуалка не пропустит, обложили, демоны. А мемсета нету.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[15]: wat
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.12 10:14
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Строгий язык тебе в принципе не позволит что-то заюзать "не с умом".

J>Например, в строгом языке вот такая фигня будет:
J>
J>double pow(double);
J>pow(0.0); // OK
J>pow(0);   // won't compile - 0 is int
J>

J>что несколько неудобно. Так что у нестрогости есть свои преимущества.

На Хаскеле:

Prelude> let pow = (\x-> x*x) :: Double -> Double
Prelude> pow(0.0)
0.0
Prelude> pow(0)
0.0


правда тут суть в "перегруженных" литералах, "переменные" придётся явно приводить.
Re[17]: wat
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 23.01.12 10:18
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Раз они строгие, то для них должно выполняться твоё утверждение
Автор: Don Reba
Дата: 23.01.12
: "В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом". Тем не менее, оно не выполняется. Следующую конструкцию компилятор схавает:

D>
D>var s = "hello"
D>var i = s.asInstanceOf[Int]
D>


Несмотря на приведение типа, у компилятора остаётся гарантия, что если типы не совместимы, то во время исполнения будет выброшено исключение. В С++ подобной гарантии нет; в любом месте пользователь может написать *(*double)2501 = PI. Поэтому, в С++ более слабая типизация.
Ce n'est que pour vous dire ce que je vous dis.
Re[12]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 10:21
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Ага, тока в жабе компилер не пропустит.


Пропустит. Может, не буквально это, но фигню посложнее, подобную очччень часто встречающуюся вот такому безобразию, пропустит на ура (пишу в псевдокоде, ближе к scala, т.к. оно короче):

[coode]
class A
class B extends A
class C extends A { def c() { ... } }
def f(a: A, ...) {
if (мы ну просто абсолютно твёрдо уверены, что a всегда типа B)
a.asInstanceOf[C].c()
}
[/code]

E__>И даже если ручками в байткоде написать — виртуалка не пропустит, обложили, демоны. А мемсета нету.


А виртуалка к статике никакого отношения не имеет. Повторяюсь: мой исходный вопрос — примеры слабой статики.
Re[18]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 10:26
Оценка:
Здравствуйте, Don Reba, Вы писали:

D>>Раз они строгие, то для них должно выполняться твоё утверждение
Автор: Don Reba
Дата: 23.01.12
: "В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом". Тем не менее, оно не выполняется. Следующую конструкцию компилятор схавает:

D>>
D>>var s = "hello"
D>>var i = s.asInstanceOf[Int]
D>>


DR>Несмотря на приведение типа, у компилятора остаётся гарантия, что если типы не совместимы, то во время исполнения будет выброшено исключение.


Гы. "Однако, даже не знаю, что ответить, — говорит песец." (с) Ну например, так: у компилятора нет гарантий даже того, что скомпилированный код будет вообще хоть раз запущен. Какое отношение имеет компилятор к рантайму? Откуда ему знать, какая имплементация рантайма будет выполнять сгенерированный им код? В общем, какое отношение рантайм имеет ко времени компиляции?
Re[16]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 10:31
Оценка:
Здравствуйте, Курилка, Вы писали:

DR>>>В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом, а в слабо типизированном — нет.


D>>Java и scala — статически и сильно типизированные?


К>Лучше чем плюсы, но всё равно нет.


Хм. А что мешает? Ну generics на java кривые. Ещё этот typecast и рефлексия всю малину портят. Про JNI вот Don Reba упомянул. Если это всё убрать, они станут таковыми? Что ещё? А бывают вообще статические сильно типизированные языки?
Re[13]: wat
От: Mamut Швеция http://dmitriid.com
Дата: 23.01.12 10:32
Оценка:
E__>>Ага, тока в жабе компилер не пропустит.

D>Пропустит. Может, не буквально это, но фигню посложнее, подобную очччень часто встречающуюся вот такому безобразию, пропустит на ура (пишу в псевдокоде, ближе к scala, т.к. оно короче):


D>[coode]

D>class A
D>class B extends A
D>class C extends A { def c() { ... } }
D>def f(a: A, ...) {
D> if (мы ну просто абсолютно твёрдо уверены, что a всегда типа B)
D> a.asInstanceOf[C].c()
D>}
D>[/code]

E__>>И даже если ручками в байткоде написать — виртуалка не пропустит, обложили, демоны. А мемсета нету.


D>А виртуалка к статике никакого отношения не имеет. Повторяюсь: мой исходный вопрос — примеры слабой статики.


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


dmitriid.comGitHubLinkedIn
Re[19]: wat
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 23.01.12 10:41
Оценка:
Здравствуйте, dimgel, Вы писали:

D>Гы. "Однако, даже не знаю, что ответить, — говорит песец." (с) Ну например, так: у компилятора нет гарантий даже того, что скомпилированный код будет вообще хоть раз запущен. Какое отношение имеет компилятор к рантайму? Откуда ему знать, какая имплементация рантайма будет выполнять сгенерированный им код? В общем, какое отношение рантайм имеет ко времени компиляции?


Виртуальная машина гарантирует строгую типизацию, компилятор — статическую. Всё просто, по-моему.
Ce n'est que pour vous dire ce que je vous dis.
Re[20]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 10:47
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Виртуальная машина гарантирует строгую типизацию, компилятор — статическую. Всё просто, по-моему.


Хм... Звучит вроде разумно, но я уже запутался.
Re[17]: wat
От: Mamut Швеция http://dmitriid.com
Дата: 23.01.12 11:08
Оценка:
DR>>>>В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом, а в слабо типизированном — нет.

D>>>Java и scala — статически и сильно типизированные?


К>>Лучше чем плюсы, но всё равно нет.


D>Хм. А что мешает? Ну generics на java кривые. Ещё этот typecast и рефлексия всю малину портят. Про JNI вот Don Reba упомянул. Если это всё убрать, они станут таковыми? Что ещё? А бывают вообще статические сильно типизированные языки?


Haskell, по идее.

Естественно, 100% строгой типизации никто не даст, потому что иначе программировать станет очень затруднительно, но к этому можно стремиться и не позволять что-нибудь типа (int)((void*)SomeObject)/1.0 для обхода системы типов.


dmitriid.comGitHubLinkedIn
Re[18]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 11:17
Оценка:
Здравствуйте, Mamut, Вы писали:

D>>Хм. А что мешает? Ну generics на java кривые. Ещё этот typecast и рефлексия всю малину портят. Про JNI вот Don Reba упомянул. Если это всё убрать, они станут таковыми? Что ещё? А бывают вообще статические сильно типизированные языки?


M>Haskell, по идее.


Угу, уже увидел ниже по обсуждению
Автор: Курилка
Дата: 20.01.12
.

M>Естественно, 100% строгой типизации никто не даст, потому что иначе программировать станет очень затруднительно,


А хорошо, что я забыл добавить "И кому они нужны?" Это замечание собственно больше к предыдущей строке относится.
Re[19]: wat
От: Mamut Швеция http://dmitriid.com
Дата: 23.01.12 11:19
Оценка:
M>>Естественно, 100% строгой типизации никто не даст, потому что иначе программировать станет очень затруднительно,

D>А хорошо, что я забыл добавить "И кому они нужны?" Это замечание собственно больше к предыдущей строке относится.


Кому нужны кто/что?


dmitriid.comGitHubLinkedIn
Re[18]: wat
От: Курилка Россия http://kirya.narod.ru/
Дата: 23.01.12 11:21
Оценка:
Здравствуйте, Mamut, Вы писали:

DR>>>>>В статически и сильно типизированном языке во время компиляции можно гарантировать, что работа будет вестить только с правильным типом, а в слабо типизированном — нет.


D>>>>Java и scala — статически и сильно типизированные?


К>>>Лучше чем плюсы, но всё равно нет.


D>>Хм. А что мешает? Ну generics на java кривые. Ещё этот typecast и рефлексия всю малину портят. Про JNI вот Don Reba упомянул. Если это всё убрать, они станут таковыми? Что ещё? А бывают вообще статические сильно типизированные языки?


M>Haskell, по идее.


Ну с требованием полной статической гарантии он не справится — к примеру, может сфейлиться ПМ, ну и unsafe тоже никуда не девается. Возможно требуемым критериям мог бы удовлетворять язык дающий total functional programming, только вроде таких так и не сделали толком.
Т.е. получается, что в любом случае часть проверок строгости переводится в рантайм (вплоть до почти полной динамики для динамических языков).
Re: wat
От: antonio_banderas Россия  
Дата: 23.01.12 15:04
Оценка: +2 :)
Здравствуйте, Mamut, Вы писали:


M>Люди саркастически издеваются над нашими любимыми языками программирования:


M>https://www.destroyallsoftware.com/talks/wat


Я хочу про С++.
(руби и яваскрипт я всё равно не знаю)
Re[2]: wat
От: dimgel Россия https://github.com/dimgel
Дата: 23.01.12 15:13
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

_>Я хочу про С++.

_>(руби и яваскрипт я всё равно не знаю)

Плюсую! Но по другой причине: тут как надо статику обосрать, туже на C++ кивают. Не язык, а терпила в натуре, за всю статику отдувается. Так что просьба закономерна и логична.
Re[14]: wat
От: Eugeny__ Украина  
Дата: 23.01.12 16:08
Оценка:
Здравствуйте, Mamut, Вы писали:

E__>>>Ага, тока в жабе компилер не пропустит.


D>>Пропустит. Может, не буквально это, но фигню посложнее, подобную очччень часто встречающуюся вот такому безобразию, пропустит на ура (пишу в псевдокоде, ближе к scala, т.к. оно короче):


D>>[coode]

D>>class A
D>>class B extends A
D>>class C extends A { def c() { ... } }
D>>def f(a: A, ...) {
D>> if (мы ну просто абсолютно твёрдо уверены, что a всегда типа B)
D>> a.asInstanceOf[C].c()
D>>}
D>>[/code]

E__>>>И даже если ручками в байткоде написать — виртуалка не пропустит, обложили, демоны. А мемсета нету.


D>>А виртуалка к статике никакого отношения не имеет. Повторяюсь: мой исходный вопрос — примеры слабой статики.


M>Приведенный выше пример только показывает, что в Жаве типизация строже, раз такие извороты надо делать


И то, это не джава — это скала. В джаве так не извратиться — компилер сходу завернет это дело.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.