LINUX.ORG.RU

30 игровых скриптов, которые можно написать на языке PHP

 , игровые скрипты


0

0

Часть 1. Создание десяти скриптов базового уровня. В части 1 анализируется 10 фундаментальных скриптов, которые могут применяться в играх различного типа. Прилагаемый к данной статье архив программного кода (далее – Архив) содержит полный исходный текст для каждого описываемого в ней скрипта.

Часть 2. Разработка 10 скриптов средней сложности. Во второй части рассматриваются скрипты предназначенные для игр следующих трех типов: ролевые игры, азартные игры и игры в слова.

Часть 3. Создание 10 скриптов повышенной сложности В этой статье мы построим скрипты для системы управления запасами и для ведения заметок в ролевых играх, а также займемся повышением интерактивности наших PHP-скриптов. Мы также построим основанный на работе с изображениями генератор удостоверений личности и подробнее ознакомимся с тем, как манипулировать изображениями с помощью PHP. Мы создадим «оценщика рук» при игре в покер и генератор для слот-машины, что позволит вам попрактиковаться с несколько более сложной PHP-логикой. Мы увеличим сложность наших скриптов для игр со словами – мы будем работать с более сложной логикой, строить сложные генераторы анаграмм, дешифровщики и т.д.

>>> Подробности

★★★

Проверено: hibou ()
Ответ на: комментарий от crono

> В своей практике ни разу не приходилось иметь дело с сайтами на питоне.
У яндекса что-то есть на питоне.
А вообще, на сайте django и на http://webpy.org есть внушительные списки сайтов на питоне.

solid
()
Ответ на: комментарий от azure

> ...например: ....
1) ООП. Его там нет. То, что там есть использовать невозможно.
Я не могу серьезно относиться к ООП-языку, где стандартные функции и библиотеки - не объектно-ориентированные.
2) Процедурная парадигма. Какого, например, хрена, функции работы с базами данных могут не принимать в качестве аргумента коннект с базой? Куда они это попрятали? Что за быдлокодерский подход? Каждая, блжад, операция с дескрипторами обязана принимать дескриптор как аргумент.

А сейчас туда еще и лямбда-функции прикручивают. Для вида.

Кстати, где в php модульность? Ну, например, я хочу иметь возможность называть функции и классы в своих либах так, чтобы они не пересекались с другими, внешними функциями. И получать к ним доступ через имя модуля. Как мне это сделать?

Ах да, php язык для веб-разработки. Кхм, а как там с fastcgi дела обстоят, не подскажете? Никак же.

Мне продолжить?

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

Ололо, был так раздражен, что аж знаки пунктуации пропускал.

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

> 1) ООП. Его там нет. То, что там есть использовать невозможно.

давно с анабиоза? в 5.1.х все капитально перепилили, сейчас уже вполне можно пользоваться.

> Какого, например, хрена, функции работы с базами данных могут не принимать в качестве аргумента коннект с базой?


чочо??

http://ru.php.net/mysql_query :

resource mysql_query ( string $query [, resource $link_identifier ] )

link_identifier

The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If by chance no connection is found or established, an E_WARNING level error is generated.


> Ах да, php язык для веб-разработки. Кхм, а как там с fastcgi дела обстоят, не подскажете? Никак же.


и что же там "никак"? работает и жрать не просит.

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

>> Ах да, php язык для веб-разработки. Кхм, а как там с fastcgi дела обстоят, не подскажете? Никак же.

>и что же там "никак"? работает и жрать не просит.

Тоесть, пока я был в анобиозе там выросло какое-то управление памятью?

vasdi
()
Ответ на: комментарий от isden

> давно с анабиоза? в 5.1.х все капитально перепилили, сейчас уже вполне можно пользоваться.
Нет, вчера разморозили. Если это так, то я очень рад.

> чочо??

> If the link identifier is not specified, the last link opened by mysql_connect() is assumed


Вот это вот. Это прострел ноги и уродский подход.

> и что же там "никак"? работает и жрать не просит.

Насколько я помню, в текущем своем состоянии fastcgi в php нужно лишь затем, чтобы держать интерпретатор запущенным. Скрипт же каждый раз запускается заново.

В общем, я не отрицаю, что на php нельзя писать. Но лично я испытываю глубокую неприязнь к очень многим аспектам языка.

solid
()
Ответ на: комментарий от mkfifo

> исходя из того что в php нет никакой поддержки многопоточности...

спасибо, хорошо посмеялся... давно так не смеялся с тех пор, как три месяца назад один местный аналитег рассмешил

жгите ишшо

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

>а есть примеры игр на пхп? чтото это как то страшно звучит

наверняка больше половины браузерных рпг

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

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

boombick@bitch-angel:/tmp$ cat t.php 
<?php

class Module {
	static function pgsql_query(){
		echo "Yeah, its true!\n";
	}
}

Module::pgsql_query();

?>
boombick@bitch-angel:/tmp$ php -f t.php 
Yeah, its true!
boombick@bitch-angel:/tmp$ php --version
PHP 5.2.9-4 with Suhosin-Patch 0.9.7 (cli) (built: May 18 2009 22:11:19) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans
boombick@bitch-angel:/tmp$ 

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

> Тоесть, пока я был в анобиозе там выросло какое-то управление памятью?

через ini_set() не работает? при условии что PHP скомпилировано с поддержкой управления памятью.

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

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

эмм.. а как надо?

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

> спасибо, хорошо посмеялся...

Над чем, над многопоточностью в PHP?

deuteranopic
()
Ответ на: комментарий от isden

Чтобы в скрипте можно было расположить цикл принятия запросов. В таком случае получается нехилый профит, т.к. при каждом запросе не тратится время на подключение модулей и инициализацию объектов/данных.

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

> при каждом запросе не тратится время на подключение модулей и инициализацию объектов/данных.

В пахапе нету инициализации объектов и вообще объектной системы нормальной, поэтому им пофигу

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

>> Во вторых - смотря с чем сравнивать. Если с PHP, то естественно рулит и педалит. Без вариантов. Как небо и земля.

Не, ну ТАКОЙ толщины на ЛОРе я ещё не видел.
Сравнить лёгкий и удобный язык, специально предназначенный для ВЕБ-приложений с монструозным, тормозным, проприетарным и глючным поделием, требующим для работы монструозной и дырявой венды.
Не, мож и есть мазохисты, которые вынуждены или терпеть нехилый даунтайм сайта или строить high-available-кластеры и тратить на это туеву хонну бабла, но не думал что они на ЛОРе обитают...

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

> Сравнить страшный и убогий язык, специально предназначенный для написания домашних страничек

fixed.

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

> в 5.1.х все капитально перепилили, сейчас уже вполне можно пользоваться.

Большинство браузерных рпг на 4-м пыхе, потому что 5-й ппц какой нестабильный, в сложных ситуациях ведет себя "не по спеке". Сам я пыхом не занимаюсь (спасибо тебе господи), но мой знакомый, владелец быдлоконторы по написанию онлайн-рпг, утверждает, что 5-й пых еще долго в продакшн не пропихнуть, из-за глючности и недопиленности, он больше для дома подходит, перед сном хеллоуворлды писать дабы быстрее уснуть. Резюмируя, пых - либо стабильность, либо ООП. Извините за толстоту.

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

Одна бабка сказала, другая повторила, и.т.д
Вот так рождаются слухи.

А знакомый твой криворукий еовно-гд или скудоумный ретроград-анабиозник.
А пых 5 вполне и вполне допилен.

anonym_mouse
()
Ответ на: комментарий от Klizmoid

> Сравнить лёгкий и удобный язык, специально предназначенный для ВЕБ-приложений

Легкий должен быть быстрее, верно? Вот только это не имеет ничего общего с реальностью. .net приложение под тем же fastcgi выдаёт на порядок лучшие результаты, а с ростом объёма кода в проекте php становится всё медленней и медленней, т.к. при каждом старте скрипта надо загружать/компилить всё больше и больше кода, да и интерпретатор полюбому медленнее нативного кода. Не говоря уже про то что fastcgi у php можно сказать нет. Почему нет? А посмотри пример как отрабатывается fastcgi запрос на том же C и попробуй повторить на php ;)

> с монструозным, тормозным, проприетарным и глючным поделием, требующим для работы монструозной и дырявой венды.


Ну вот это и есть троллизм. Буквально ничего из этого не правда.
1. инсталляция того же моно не намного больше инсталляции php
2. про тормознутость читай выше.
3. извини, но глючнось - это бред. как говорится - ты не осилил, но осуждаешь?
4. проприетарное = закрытое. что из mono закрыто?
5. требующей винды? ты в своем уме, троллишко?
6. а давай вспомним что .net это платформа и не ограничивает разработчика одним языком, что тот же C# - это полноценный язык, а не обмылок как php, что на .net изначально есть GC, а не как дополнение, вечно отключенное, что ты можешь легко линковаться к любым либам не надеясь что добрый админ включил нужные модули в конфиге, да и вообще модульность php это скорее миф. что .net компилируется в нативный код и производительность во многих местах просто не сравнима, особенно используя многопоточность. да, c/c++ будет это делать ещё быстрее, но отлаживать утечки памяти и ловить сегфолты не у всех есть время.

> Не, мож и есть мазохисты, которые вынуждены или терпеть нехилый даунтайм сайта или строить high-available-кластеры и тратить на это туеву хонну бабла, но не думал что они на ЛОРе обитают...


ололо, а с чего даунтайм сайта на .net больше даунтайма на php?
скорей наоборот - несправляющийся с нагрузкой сайт/форум на php будет в говне (примеров миллион в сети), а на .net даже не заметит (см. тот же sql.ru).

php бесспорно хорош для мелких скриптов и простых сайтов с низкой посещаемостью, это его ниша. но не более. хотя мир не без извращенцев.

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

> Большинство браузерных рпг на 4-м пыхе, потому что 5-й ппц какой нестабильный, в сложных ситуациях ведет себя "не по спеке".

Назови пару. Мне очень интересно. Учитывая, что спеки-то формальной у PHP нет.

> но мой знакомый, владелец быдлоконторы по написанию онлайн-рпг, утверждает, что 5-й пых еще долго в продакшн не пропихнуть, из-за глючности и недопиленности


Передай знакомому, что СССР распался 15 лет назад и можно вылезать из танка. Для него это будет очень важная и свежая новость.

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

> В пахапе нету инициализации объектов

Пеши есчо.

shimon ★★★★★
()

Тут говорили, что онлайн-рпг игры пишутся на PHP.

Прошу обратить внимание, что если в вакансии на такую разработку упоминается PHP, то стоит обратить внимание, упоминается ли в тексте вакансии и С++. В таком случае на PHP пишется только очень маленький функционал, на сколько мне объясняли - что-то на счет залогинивания. Игровая логика, в подобных вакансиях - пишется на С++.

EugenyN
()
Ответ на: комментарий от valich

> > исходя из того что в php нет никакой поддержки многопоточности...

> спасибо, хорошо посмеялся... давно так не смеялся с тех пор, как три месяца назад один местный аналитег рассмешил


Ну так просвети старого похапэшника, где там треды и как их использовать в своих программах, а?

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

>> Массив тайлов карты

>По русски говорить совсем лень, да?

Не-не, примерно так: По-русски говорить лейзишь?

Gukl ★★★
()

Боюсь спросить, при чём тут линукс?

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

> Ах да, php язык для веб-разработки. Кхм, а как там с fastcgi дела обстоят, не подскажете? Никак же.

У нас _все_ сервера с fastcgi, PHP крутится, проблем не видать. С 5.2.чегототам начиная, поддержка fastcgi не то что компилится по умолчанию, ее отключить нельзя.

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

> Я не могу серьезно относиться к ООП-языку, где стандартные функции и библиотеки - не объектно-ориентированные.

#лять, еще один, не видевший http://php.net/spl, нарисовался.

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

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

> В таком случае на PHP пишется только очень маленький функционал, на сколько мне объясняли - что-то на счет залогинивания. Игровая логика, в подобных вакансиях - пишется на С++.

Вся веб-морда может писаться на PHP.

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

>> исходя из того что в php нет никакой поддержки многопоточности...

> спасибо, хорошо посмеялся... давно так не смеялся с тех пор, как три месяца назад один местный аналитег рассмешил


> жгите ишшо


давай напишу.. скажи ток -- на какую тему(?)..

..могу ещё чонить написать на тему того что на php _до_ _версии_ php-5.3 -- непонятно как нада называть свои классы и функции чтобы они не конфликтовали со встроенными...

..список встроенных функций -- тоже условно неисзвестен -- так как он зависит от проинсталлированных дополнений.


конечно..., начиная с php-5.3 можно полностью перейти на использование замыканий и прототипную модель объектов (как в Javascript) , и уже насрать на конфликты имён-функций-и-классов... но чорт-побери -- 2009-год на дворе а до них ТОЛЬКО ЩАЗ дошло, что нужны в языке -- замыкая и namespaceы.

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

> ..список встроенных функций -- тоже условно неисзвестен -- так как он зависит от проинсталлированных дополнений.

function_exists(), не?

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

Ты это серьезно? У пыхыпышников принято перед каждым объявлением функции делать function_exists()? Не, сурово, конечно... но стесняюсь спросить, что будет делаться в true-части ветвления? %)

anonymous4
()
Ответ на: комментарий от slyjoe

Этот знакомый еще, наверно, на 2.4 ядре сидит?

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

> Но лично я испытываю глубокую неприязнь к очень многим аспектам языка.

Ну вот это правда. Да и все, что вы тут наговорили - субъективная отсебятина. Не нравиться, быдлокодерский подход, функции не в классах... мда....

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

>> Легкий должен быть быстрее, верно? Вот только это не имеет ничего общего с реальностью. .net приложение под тем же fastcgi выдаёт на порядок лучшие результаты, а с ростом объёма кода в проекте php становится всё медленней и медленней

Поддерживаю достаточно большой проект на пыхпыхе. Время выполнения запроса - максимум - 1 секунда (при выборке нескольких тысяч строк х три-четыре десятка колонок из таблицы базы данных, их разбор, форматирование, выдача клиента). Сервер не самый мощный.

>> загружать/компилить всё больше и больше кода, да и интерпретатор полюбому медленнее нативного кода. 

Уныло: 
1. Пыхпых кеширует скомпилированный байткод
2. Расширения пыхпыха (драйверы БД, модули расширения типа GD и проч. проч. проч) написаны на С, а аналогичный функционал A$P - на дотнете индусокодерами из M$
Что из этого быстрее? Практика показала - пыхпых с расширениями на С, ага.

>> fastcgi
Вообще не нужен. Был нужен в бородатые времена, когда интерпретатор не был расширением Апача (со всеми вытекающими...) а выполнял программы как CGI-скрипты. Тогда нужны были костыли, которые кешируют байткод, модули, вывод и т.д.



>> Ну вот это и есть троллизм. Буквально ничего из этого не правда.

Всё правда. Венда она таки монструозная, дырявая, и бабла стоит. Для тебя это секрет? А для меня - нет. И для одминов одного большого датацентра - тоже. Матюгаются 8-этажным матом на такое вот вендовое дерьмо, что у них крутится. По 5 раз на день бегают перегружать каждый сервер. 
II$, A$P M$$QL и прочее говнищще. Зато - "ынтерпрайз", хуле... Реклама, маркетинг...

>> 1. инсталляция того же моно не намного больше инсталляции php
Только геморроя с ним больше, т.к. состоит из костылей чуть более чем полностью.

>> 2. про тормознутость читай выше. 
Читай выше

>> 3. извини, но глючнось - это бред. как говорится - ты не осилил, но осуждаешь?

Читай выше про датацентр. Не один я не осилил. *NIX-серверов в датацентре - 85%. И претензий к ним нет. Зато венда - во всём великолепии... За время пока менял винт в рейде на серваке - ТАКОГО наслушался...

>> 4. проприетарное = закрытое. что из mono закрыто?
То, с чего оно слизано. А то, с чего оно слизано - в свою очередь слизано с Джавы и Делфи.

>> 5. требующей винды? ты в своем уме, троллишко?
Много народу пишет на A$P специально под моно, троллишко? Нормальные люди если пишут под нормальные платформы - выбирают нормальные, родные средства для этих платформ. 

>> 6. а давай вспомним что .net это платформа и не ограничивает разработчика одним языком, что тот же C# - это полноценный язык, а не обмылок как php

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

>> , что на .net изначально есть GC, 
Ну сколько можно, а?

>> линковаться к любым либам не надеясь что добрый админ включил нужные модули в конфиге

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

>> да и вообще модульность php это скорее миф. что .net компилируется в нативный код и производительность во многих местах просто не сравнима, особенно используя многопоточность. 

1. Пыхпых кеширует байткод, повторяю ещё раз. Производительность венды? Не смеши мои ботинки. Многопоточность В ВЕБ ПРИЛОЖЕНИЯХ нафик не нужна. Задача ВЕБ-приложения - максимально быстро выдать HTML-код (или картинку, или XML, или JSON, или XSLT). 

>> да, c/c++ будет это делать ещё быстрее, но отлаживать утечки памяти и ловить сегфолты не у всех есть время.

Пыхпых написан таки на С. Как и все расширения к нему. 

>> ололо, а с чего даунтайм сайта на .net больше даунтайма на php?
скорей наоборот - несправляющийся с нагрузкой сайт/форум на php будет в говне (примеров миллион в сети), а на .net даже не заметит (см. тот же sql.ru).

sql.ru тормозит регулярно (кстати!) 
Почему больше даунтайма? Перегружать венду часто надо. Да и вирусы атакуют по незалатанным дырам... 




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

> 1. Пыхпых кеширует байткод

Вы хотите сказать, что PHP-байткод - работает под виртуальной php-машиной, в которой есть JIT-компилятор, GC и прочие современные штучки?

Просто не в курсе.

Строгая типизация языка, увеличивающая производительность виртуальной машины во многих случаях - в десятки раз, есть, нет?

Коллекции, ArrayList, HashMap, возможно даже типизированные коллекции - есть, нет?

EugenyN
()
Ответ на: комментарий от slyjoe

> утверждает, что 5-й пых еще долго в продакшн не пропихнуть, из-за глючности и недопиленности, он больше для дома подходит, перед сном хеллоуворлды писать дабы быстрее уснуть

ну канечно... агащаз. я с похапе очень плотно работаю последние 5 лет. мое мнение - 5-я ветка, где-то с 5.1.2 - весьма неплоха и намного стабильнее и предсказуемее чем 4-я. я еще помню те феерические баги с пропуском цикла while на 4.3.11.

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

>Во что превращается ЛОР? В клон IBM DW, мля, как же запарили их говноновости, а?

Sanitar
()
Ответ на: комментарий от EugenyN

>Строгая типизация языка

Вы имели ввиду не статическую случайно? А то строгая всё-таки слабая типизация пыха не такой оверхед даёт.

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

>Я не могу серьезно относиться к ООП-языку, где стандартные функции и библиотеки - не объектно-ориентированные.

Напиши свои, да и фрейворков как грязи...

>2) Процедурная парадигма. Какого, например, хрена, функции работы с базами данных могут не принимать в качестве аргумента коннект с базой?

Читайте доки, оне рулез.

resource mysql_query ( string $query [, resource $link_identifier ] )

http://ru.php.net/manual/en/function.mysql-query.php

Если он необязателен, это не значит, что его нет. Ну или свою ADO свай, делов-то ;-)

>Кстати, где в php модульность? Рядом с тамошними объектами ;-)

Хрен::там();

И с FastCGI дела обстоят замечательно.

В общем, учим матчасть.

Sanitar
()
Ответ на: комментарий от theos

>Строгая типизация языка

> Вы имели ввиду не статическую случайно? А то строгая всё-таки слабая типизация пыха не такой оверхед даёт.

Нет, не статическую. Если кратко, то строгая - значит обязательная. Если не строгая, значит можно использовать, но если не используешь, то и ладно. :)))

Если подробно, то такой пример (речь пойдет про язык программирования ActionScript, сокращенно - AS, встроенный во Flash):

1) AS 1 работал под виртуальной flash-машиной 1-ой версии. Классы были в самом зародыше. Типизации не было. Указываешь var a = 5 и вперед.

2) AS 2 работал под виртуальной flash-машиной 1-ой версии. Уже былы более-менее классы, уже была типизация var b:String = "Hello!" (но не обязательная, не строгая) переменных ,но код, в итоге, компилился в то же самое, во что комилился и в 1-ом случае.

3) AS 3 работает под виртуальной flash-машиной 2-ой версии. Код строго типизирован (хотя язык еще допускает многочисленные хаки/способы обойти это дело).

P.S. Современный flash-плейер - совмещает в себе обе виртуальные машины, поэтому можно компилить как под 1-ую версию, так и под 2-ую, и даже вызывать один код из другого.

P.S. Статический контроль типов, если имелось в виду - это несколько другое, это когда среда программирования (IDE) может на лету проверять ошибки, вызванные неправильной типизацией/использованием переменных из-за этого, это очень большой стек ошибок. Если среда сама находит ошибки - очень хорошо.

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

>уже была типизация var b:String = "Hello!"

Это как раз именно статическая. Вот когда можно писать 2+"2" - это да, это не строгая.. А тот же питон имеет как раз строгую типизацию. Но не статическую.

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

>> уже была типизация var b:String = "Hello!"

> Это как раз именно статическая. Вот когда можно писать 2+"2" - это да, это не строгая.. А тот же питон имеет как раз строгую типизацию. Но не статическую.

В литературе, и в обсуждениях - активно используется следующее название для описанного Вами - "автоприведение типов". :)

По моему оно логично. Если же использовать словосочетание "статическая типизация", тогда вопросы:

1) Бывает ли динамическая типизация?

2) Разве runtime-среда выполнения кода - не выполняет автоприведение типов - все же динамически? Вспомним, что во многих языках программирования - помпилятор языка если видит 2 + 2 - то оптимизирует СТАТИЧЕСКИ это выражение и встраивает (в том числе и в байт-код, не важно) - значение 4. Если же компилятор видит, что 2 + "2", давайте тогда немного расширим пример для полной однозначности - компилятор видит выражение 2 + a, где тип a - не известен изначально.

Могу вспомнить примеры из AS 2, сам видел - на вход методу подается параметр а, в самом же методе стоят конструкции, что если a - это String, то такая-та ветка выполнения кода, если же а - это Number, то другая ветка выполнения кода.

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

> 2) Разве runtime-среда выполнения кода - не выполняет автоприведение типов - все же динамически?

В этом моменте вру. Если написать 2 + "2", то *статический контроль типов* ;) даст верную оценку о допустимости операции, т.к. он руководствуется заранее известными правилами автоприведения типов.

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

> 1) Бывает ли динамическая типизация?

А, я Вас понял. Вы имеете в виду статическую типизацию и динамическую (характерным примером чего служит полиморфизм).

Вернемся тогда к началу, к первому вопросу:

EugenyN>> Строгая типизация языка, увеличивающая производительность виртуальной машины во многих случаях - в десятки раз, есть, нет?

theos> Вы имели ввиду не статическую случайно? А то строгая всё-таки слабая типизация пыха не такой оверхед даёт.

Ответ: :)

- имел в виду именно строгую типизацию переменных.

P.S. Статическая и динамическая типизация переменных - возможна как при строгой, так и при нестрогой (необязательной) типизации переменных.

Ответ озвучен, наверное разобрались. :)

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

> А то строгая всё-таки слабая типизация пыха не такой оверхед даёт.

Ускорение достигается за счет того, что JIT-компилятор, при _обязательной типизации переменных_ (пускай такая формулировка, сейчас не принципиально) - не должен просчитывать всевозможные автоприведения типов, ЕСЛИ ЕМУ ЗАРАНЕЕ УКАЗАТЬ, ЧТО ТИП ТАКОЙ И ТОЛЬКО ТАКОЙ, И ТОЧКА.

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

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

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

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

Конечно, в разных языках и при разных версиях JIT-компилятора - результаты при сравнительных тестах - могут очень отличаться.

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

- Продуктивнее искать узкие места в своем языке программирования, всегда есть мастера-экспериментаторы, которые могут выводить некоторые закономерности - при каком коде могут наблюдаться тормоза, и есть ли способы немного переделать код, чтобы JIT-компилятор понял все однозначнее и эффективно произвел оптимизацию.

Понятно, что строгая, обязательная типизация языка - априори помогает JIT-компилятору, и разработчикам, которые создают/ищут алгоритмы оптимизации для него.

К тому строгая типизация - дает и статический контроль типов, программистам жить становится легче...

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